Amazon SQS で構築する非同期メッセージング - Standard と FIFO キューの設計

Standard と FIFO キューの使い分け、DLQ による処理失敗メッセージの退避、Lambda イベントソースマッピングによる自動処理を紹介します。

SQS の概要

SQS はフルマネージドのメッセージキューイングサービスです。SNS が 1 対多のファンアウトを提供するのに対し、SQS は 1 対 1 のポイントツーポイントメッセージングを提供します。Web アプリケーションのリクエスト処理とバックエンドの重い処理を分離し、スケーラビリティと耐障害性を向上させます。

キュー設計と DLQ

Standard キューは秒間数万メッセージのスループットを提供し、メッセージの順序は保証されません。FIFO キューはメッセージグループ ID ごとに順序を保証し、重複排除 ID で exactly-once 処理を実現します。スループットは秒間 300 メッセージ (バッチで 3000) です。DLQ は maxReceiveCount 回処理に失敗したメッセージを自動的に移動し、メインキューの処理を妨げません。DLQ のメッセージを調査し、原因を修正した後にメインキューに再ドライブ (再送) できます。

Lambda 統合と大容量メッセージ

SQSLambda のイベントソースマッピングで、キューのメッセージを自動的に Lambda 関数で処理します。バッチサイズとバッチウィンドウを設定し、複数メッセージをまとめて処理することで Lambda の呼び出し回数を削減します。 FIFO キューでは Lambda の同時実行数がメッセージグループ数に制限されます。 Extended Client Library で 256 KB を超えるメッセージを S3 経由で送受信し、大容量データの非同期処理に対応します。メッセージの暗号化は SSE-SQS (無料) または SSE-KMS で設定します。 メッセージキューに関する詳しい解説はAmazon の関連書籍でも確認できます。

SQS の料金

SQS の Standard キューは 100 万リクエストあたり約 0.40 ドル、FIFO キューは約 0.50 ドルです。最初の 100 万リクエスト/月は無料です。1 リクエストは最大 256 KB で、64 KB チャンクごとに 1 リクエストとしてカウントされます。ロングポーリング (WaitTimeSeconds=20) で空のレスポンスを削減し、リクエスト数を最適化します。DLQ のメッセージは通常のキューと同じ料金で課金されるため、DLQ のメッセージを定期的に処理または削除します。

まとめ

SQS は非同期メッセージングで疎結合なアーキテクチャを構築するサービスです。Standard キューで秒間数万メッセージのスループットを提供し、FIFO キューで順序保証と重複排除を実現します。Lambda のイベントソースマッピングでメッセージを自動処理し、DLQ で処理失敗メッセージを退避させます。ロングポーリングでリクエスト数を最適化し、Extended Client Library で 256 KB 超のメッセージにも対応します。