SQS Standard キューと FIFO キュー
最大スループット向けの Standard キューと、順序どおりの厳密に1回の処理向けの FIFO キューを比較し、適切なタイプを選択します。
「SQS Standard キューと FIFO キュー」はCoddyKit上の無料AWS Solutions Architectレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAWS Solutions Architect学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AWS Solutions Architectコースには全4レッスンが含まれています。
メッセージキューが重要な理由
メッセージキューはプロデューサーとコンシューマーを分離します。プロデューサーはコンシューマーが処理するのを待たずに、キューへメッセージを送信します。コンシューマーは自身のペースでメッセージを処理します。このパターンにより、高速なプロデューサーが低速なコンシューマーを圧迫するのを防ぎ、各層を個別にスケールできるようになり、コンシューマーが一時的に利用できない場合にも永続的なバッファーを提供できます。Amazon SQSは、AWSが提供するフルマネージドで可用性の高いメッセージキューイングサービスです。
SQS標準キューの特徴
標準キューは無制限のスループット(1秒あたりのトランザクション数がほぼ無制限)を提供します。少なくとも1回の配信が保証されますが、まれに(分散インフラストラクチャが原因で)同じメッセージが複数回配信される場合があります。メッセージの順序はベストエフォートです。通常は送信順に配信されますが、保証はされません。標準キューは、スループットが重要で、コンシューマーが重複や順序が前後したメッセージを処理できる場合に適しています。
# Create a Standard queue
aws sqs create-queue \
--queue-name 'OrderProcessingQueue'
# Send a message
aws sqs send-message \
--queue-url 'https://sqs.us-east-1.amazonaws.com/123456789012/OrderProcessingQueue' \
--message-body 'OrderId-12345'SQS FIFOキューの特徴
FIFOキュー(First-In, First-Out)は、厳密に1回の処理とメッセージ順序を保証します。メッセージは送信された正確な順序で配信されます。FIFOキューは1秒あたり300トランザクション(バッチ処理時は3,000)までサポートします。FIFOキューの名前は末尾を.fifoにする必要があります。順序と厳密に1回の処理が重要な場合(金融取引、Eコマースの注文処理、在庫更新など)にはFIFOキューを使用してください。
# Create a FIFO queue
aws sqs create-queue \
--queue-name 'OrderProcessingQueue.fifo' \
--attributes '{
"FifoQueue": "true",
"ContentBasedDeduplication": "true"
}'FIFOキューのメッセージグループ
FIFOキューでは、キュー内の順序を分割するためにMessage Group IDを使用します。同じGroup IDを持つメッセージは順序どおりに配信され、異なるGroup IDを持つメッセージは並列に処理できます。たとえば、customerIdをGroup IDとして使用すると、各顧客の注文は順番に処理されますが、異なる顧客の注文は同時に処理されます。これにより、コンシューマー間で水平方向にスケールしながらFIFOのセマンティクスを実現できます。
aws sqs send-message \
--queue-url 'https://sqs.us-east-1.amazonaws.com/123456789012/Orders.fifo' \
--message-body 'Order details here' \
--message-group-id 'customer-789' \
--message-deduplication-id 'order-uuid-abc123'FIFOキューでの重複排除
FIFOキューでは、重複排除IDを使用してメッセージの重複処理を防ぎます。5分間の重複排除期間内に同じIDを持つ2つのメッセージが送信された場合、2つ目のメッセージは通知なしに破棄されます。重複排除ID(MessageDeduplicationId)を明示的に指定するか、コンテンツベースの重複排除を有効にできます。この場合、SQSがメッセージ本文のSHA-256ハッシュを重複排除IDとして自動的に計算します。コンテンツベースの重複排除はより簡単ですが、メッセージ本文が一意である必要があります。
メッセージの保持期間とサイズ制限
SQSでは、設定可能な期間メッセージを保持します。最小は1分、最大は14日(デフォルトは4日)です。保持期間内に消費されなかったメッセージは自動的に削除されます。メッセージの最大サイズは256 KBです。より大きなペイロードにはSQS Extended Client Libraryを使用するか、ペイロードをS3に保存して、SQSメッセージにはS3オブジェクトへの参照のみを送信してください。標準キューとFIFOキューは、どちらもこれらの制限を共有します。
メッセージの受信と削除
コンシューマーはreceive-messageを使用してキューをポーリングします。受信後、メッセージは非表示(他のコンシューマーから見えない状態)になり、可視性タイムアウトの期間が経過するまでその状態が続きます。コンシューマーはメッセージを処理した後、タイムアウトが切れる前に、レシートハンドルを使用して明示的に削除する必要があります。コンシューマーがクラッシュした場合や、時間内に削除しなかった場合、メッセージは再び表示され、別のコンシューマーが処理できるようになります。これにより、標準キューで少なくとも1回の配信が実現されます。
RECEIPT=$(aws sqs receive-message \
--queue-url 'https://...' \
--query 'Messages[0].ReceiptHandle' --output text)
# Process message, then delete it
aws sqs delete-message \
--queue-url 'https://...' \
--receipt-handle "$RECEIPT"実際のスループット比較
標準キューは、画像サムネイルの生成、通知メールの送信、ログ処理など、重複を冪等に処理でき、順序が重要でないワークロードに適しています。FIFOキューは、銀行振込処理(入金前の出金)、Eコマースのカート更新(チェックアウト前の商品追加)、ステップ2がステップ1の後に続く必要があるワークフローなどで必要になります。ほとんどの高スループットアーキテクチャでは標準キューがデフォルトの選択肢です。順序または厳密に1回の配信が必須要件である場合にのみ、FIFOへ切り替えてください。
スループットとコストのためのバッチ処理
SQSではAPIリクエストごとに料金が発生します。バッチ操作を使用すると、1回のAPI呼び出しで送信、受信、削除を最大10メッセージまで実行でき、コストを最大10分の1に削減できます。FIFOキューでは、高スループットモード(バッチ処理を有効化)をサポートしており、10件のバッチ処理で上限が1秒あたり3,000メッセージまで引き上げられます。本番環境では、API呼び出しのコストを最小限に抑えるため、必ずsend-message-batchとdelete-message-batchを使用してください。
aws sqs send-message-batch \
--queue-url 'https://...' \
--entries '[
{"Id": "msg1", "MessageBody": "Order-001"},
{"Id": "msg2", "MessageBody": "Order-002"},
{"Id": "msg3", "MessageBody": "Order-003"}
]'キューのアクセスポリシー
SQSキューは、誰がキューへ送信したり、キューから受信したりできるかを制御するリソースベースのポリシー(キューポリシー)によって保護されます。これは、クロスアカウントアクセスを許可する場合や、SNSからSQSキューへ発行する場合に重要です。LambdaのSQSへのアクセスは、Lambda実行ロールのIAMポリシー(sqs:ReceiveMessage、sqs:DeleteMessage、sqs:GetQueueAttributes)によって制御されます。常に最小権限を適用し、コンシューマーに受信と削除を超える権限を与えないでください。
標準とFIFOの選択ガイド
選択する際は、次の質問を確認してください。(1) 順序は重要ですか? 重要な場合 → FIFOです。(2) 厳密に1回の処理が必要ですか? 必要な場合 → FIFOです。(3) 1秒あたり3,000トランザクションを超えるスループットが必要ですか? 必要な場合 → 標準です(FIFOはバッチ処理時でも3,000 TPSが上限です)。(4) コンシューマーは重複を処理できますか? できる場合 → 標準のほうが簡単で低コストです。SAA-C03試験でFIFOを示すキーワードは「ordering」「exactly-once」「sequential」「deduplication」です。標準を示すキーワードは「high throughput」「best effort」「at-least-once」です。
クイックチェック
このレッスンで扱ったAWS Solutions Architect(SAA-C03)の概念について、理解度を確認しましょう。
レッスンのまとめ
このレッスンでは、次のことを学びました。標準キューは、少なくとも1回の配信とベストエフォートの順序付けで無制限のスループットを提供し、重複を許容できる大量ワークロードに適しています。FIFOキューは、Message Group IDと重複排除IDを使用して厳密に1回の処理と厳密なメッセージ順序を保証しますが、バッチ処理時でも3,000 TPSが上限です。どちらを選ぶかは、順序付けと重複排除が必須要件かどうかによって決まります。次は、可視性タイムアウト、デッドレターキュー、ロングポーリングについて学びます。
AI チューターと学ぶ AWS Solutions Architect — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 30
- レッスン
- 120
よくある質問
「SQS Standard キューと FIFO キュー」レッスンは無料ですか?
はい。「SQS Standard キューと FIFO キュー」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AWS Solutions Architectコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AWS Solutions Architectコースには全4レッスンが含まれています。
「SQS Standard キューと FIFO キュー」で何を学びますか?
最大スループット向けの Standard キューと、順序どおりの厳密に1回の処理向けの FIFO キューを比較し、適切なタイプを選択します。 ブラウザで直接実行するハンズオンコードでAWS Solutions Architectを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AWS Solutions Architectを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAWS Solutions Architectは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「SQS Standard キューと FIFO キュー」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAWS Solutions Architectレッスンでコードを書いて実行できますか?
はい。すべてのAWS Solutions Architectレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- SQS Standard キューと FIFO キュー
- 可視性タイムアウト、DLQ、ロングポーリング
- SNS トピックとファンアウトアーキテクチャ
- SQS メッセージフィルタリングと SNS + SQS 統合