Amazon SQS のアイコン

Amazon SQS

フルマネージドのメッセージキューイングサービス

何ができるか

Amazon SQS (Simple Queue Service) は、マイクロサービスや分散システム間でメッセージを非同期にやり取りするためのフルマネージドメッセージキューサービスです。送信側と受信側を疎結合にし、一方が停止しても他方に影響を与えない設計を実現します。スタンダードキューと FIFO キューの 2 種類を提供しています。

どのような場面で使うか

マイクロサービス間の非同期通信、注文処理パイプラインのバッファリング、バッチ処理のジョブキュー、Lambda 関数のイベントソース、トラフィックスパイクの吸収などに利用されます。 この分野について体系的に学びたい方は、関連書籍 (Amazon) も参考になります。

身近な例え

郵便ポストに例えられます。手紙 (メッセージ) をポスト (キュー) に投函すると、配達員 (受信側) が順番に取り出して届けます。投函者と配達員は同時にいる必要がなく、ポストが手紙を一時的に保管してくれます。

SQS とは

Amazon SQS は、AWS で最初にリリースされたサービスの 1 つで、メッセージキューイングの基盤です。プロデューサー (送信側) がキューにメッセージを送信し、コンシューマー (受信側) がキューからメッセージを取得して処理します。メッセージは処理が完了するまでキューに保持され、処理失敗時の再試行も自動的に行われます。

スタンダードキューと FIFO キュー

スタンダードキューはほぼ無制限のスループットを提供し、メッセージの順序は「ベストエフォート」です。まれにメッセージが重複配信される可能性があります。FIFO キューはメッセージの順序を厳密に保証し、重複配信を防止します。ただし、スループットは 1 秒あたり 300 メッセージ (バッチ処理で 3,000) が上限です。

デッドレターキューと可視性タイムアウト

可視性タイムアウトは、メッセージが取得されてから他のコンシューマーに見えなくなる期間です。この間に処理が完了しなければ、メッセージは再びキューに戻ります。デッドレターキュー (DLQ) は、指定回数の処理に失敗したメッセージを隔離するキューです。DLQ に溜まったメッセージを分析することで、処理失敗の原因を特定できます。

はじめかた

SQS コンソールで「キューの作成」を選択し、スタンダードまたは FIFO を指定します。AWS SDK からメッセージの送信 (SendMessage) と受信 (ReceiveMessage) を行います。Lambda をトリガーに設定すれば、メッセージが到着するたびに自動的に Lambda 関数が実行されます。無料利用枠として月間 100 万リクエストが常時無料です。

注意点

  • スタンダードキューではメッセージの重複配信が発生する可能性があるため、コンシューマー側で冪等性を確保すること
  • メッセージの最大保持期間は 14 日間。期間を過ぎると自動削除される
  • 無料利用枠として月間 100 万リクエストが常時無料で利用可能

さらに詳しく知りたい方は、関連書籍 (Amazon) で理解を深められます。