SQS(Simple Queue Service)とは?
フルマネージドでサーバレスのキューサービスです。
メリット
- キューとしての非同期処理の実現に加え、AWSの持つ高い障害耐性と処理性能を得ることができます。
- また、サーバレスなので運用コストもかかりません。
具体的なユースケース
アプリケーション間の連携
相手先で障害が起きていても一旦キューに蓄積するので、相手先が復旧したら再送することが可能です。昨今のマイクロサービスやサーバーレス構成のアプリケーションの高まりによりアプリケーション間に配置するケースが多いです。
スパイクアクセス(急なアクセスが増加)が発生しやすいアプリケーション
急なアクセス増加でもキューに蓄積してくれてデータの損失を防ぎます。
Railsでの利用
「Shoryuken」というGemを使って作成します。Railsでの非同期処理といえば「Sidekiq(Redis)」だとは思いますが、
Shoryuken
「AWS SQS」からジョブ取り出すワーカーを簡単に作成することができるGemです。
Fake SQS
AWSのSQSを使わずにローカルでSQSっぽいものを構築することができるモックです。Dockerイメージとして提供されていてローカル用に「docker-compose.yml」で設定します。
SQSの種類
標準キュー
メリット
無制限のスループット:ほぼ無制限のトランザクション(TPS)をサポートする。
デメリット
ベストエフォート型の順序付け:メッセージが送信されたときと異なる順序で配信されることがある。
少なくとも1回の配信:メッセージは少なくとも1回は確実に配信されるが、複数のメッセージのコピーが配信されることもある。
用途
処理の順序や重複を許容できる場合はこちらを選ぶ。
FIFOキュー
メリット
高スループット:デフォルトでは、FIFOキューは毎秒最大300件のトランザクション(TPS)をサポートする。
先入れ先出し配信:メッセージが送信または受信された順序が厳密に保持されます (先入れ先出し)。
デメリット
標準キューよりTPSが下がる。
用途
処理の順序や重複を許容できない場合はこちらを選ぶ。
料金
基本的には安いです。月100万リクエストまで無料、月1億リクエストで4300円程度です。
用語
Dead letter queue(デットレターキュー)
リトライしても処理に失敗する場合は別キューに格納する機能です。Cloudwatchと連携し、デバッグに使用できます。
詳細仕様
リトライをサポート
一定時間内に処理が正常に完了しなかった場合、再度 Queueに入ります。ただ、一定回数失敗した場合、「Dead letter queue(デッドレターキュー)」 に移動されます。
SQSとStep Functionsの使い分け
SQS
スケーラブルで信頼性が高いキューが必要な場合
Cloudformation
Lambda側でターゲットを指定すれば良いだけなので記述量は少ない。
Step Functions
処理の追跡や、サービス間のメッセージ受け渡しが必要な場合
Cloudformation
ロジックを記述する必要があるので記述量が多い。ただ、「何と何が何をしているのか」が分かり易く可読性が高い。
この記事へのコメントはありません。