Amazon SQS のアイコン

Amazon SQS

アプリケーション間でメッセージを確実に受け渡すフルマネージドのキューサービス

何ができるか

Amazon SQS (Simple Queue Service) は、アプリケーション間でメッセージを非同期にやり取りするためのフルマネージドのメッセージキューサービスです。送信側がキューにメッセージを入れ、受信側がキューからメッセージを取り出して処理します。送信側と受信側が同時に稼働している必要がなく、処理速度の違いを吸収するバッファとして機能します。毎秒数千から数百万のメッセージを処理できます。

どのような場面で使うか

マイクロサービス間の非同期通信、注文処理システムのキュー管理、画像や動画の変換処理のジョブキュー、メール送信の非同期処理、バッチ処理のタスク分散、システム間のデカップリング (疎結合化) など、処理の信頼性と拡張性が求められる場面で利用されています。 この分野について体系的に学びたい方は、関連書籍 (Amazon) も参考になります。

身近な例え

郵便ポストに例えるとわかりやすいでしょう。手紙 (メッセージ) を郵便ポスト (キュー) に投函すれば、相手が不在でも届きます。配達員 (受信側) は自分のペースでポストから手紙を取り出して処理します。手紙が大量に届いても、ポストが溢れることはなく、順番に処理されます。

SQS とは

Amazon Simple Queue Service (SQS) は、AWS が最初に提供したサービスの 1 つで、2004 年から運用されている歴史あるサービスです。メッセージキューとは、送信者と受信者の間に置かれるバッファで、両者を疎結合にする役割を果たします。送信者はメッセージをキューに入れるだけで処理完了とし、受信者は自分のペースでキューからメッセージを取り出して処理します。

キューの種類

SQS には 2 種類のキューがあります。標準キューは、ほぼ無制限のスループットを提供し、メッセージの順序は保証されませんが、少なくとも 1 回の配信が保証されます。FIFO (First-In-First-Out) キューは、メッセージの順序を厳密に保証し、重複配信を防止します。FIFO キューは毎秒 300 メッセージ (バッチ処理で 3,000) の制限がありますが、順序が重要な処理に適しています。

デッドレターキュー

処理に失敗したメッセージを自動的に別のキュー (デッドレターキュー) に移動する機能があります。たとえば、メッセージの処理が 3 回失敗した場合、そのメッセージをデッドレターキューに移動し、後から原因を調査できます。これにより、問題のあるメッセージが正常なメッセージの処理を妨げることを防ぎます。

はじめかた

SQS を使い始めるには、SQS コンソールで「キューの作成」をクリックします。キューの種類 (標準または FIFO) を選択し、メッセージの保持期間や可視性タイムアウトを設定します。AWS SDK を使ってアプリケーションからメッセージの送信と受信を行います。Lambda 関数をキューのトリガーとして設定すれば、メッセージが届くたびに自動的に処理を実行できます。

注意点

  • 標準キューではメッセージが重複配信される場合があるため、受信側で冪等性 (同じ処理を複数回実行しても結果が変わらない設計) を確保すること
  • メッセージの最大サイズは 256KB のため、大きなデータは S3 に保存してメッセージには参照情報のみを含める設計にすること
  • 無料利用枠として月間 100 万リクエストが永続的に提供される

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