SAA / ドメイン2 レジリエントなアーキテクチャの設計

重要な内容

Amazon SQS (Simple Queue Service)

は、アプリケーション間でメッセージを非同期に受け渡すためのマネージドなキューサービスです。 送信側と処理側を直接つなげず、キューを間に置くことで、処理の遅延、負荷の急増、一時的な障害に強いアーキテクチャを作れます。

SAA では、SQS を「メッセージをためるサービス」としてだけ覚えるのではなく、Standard キューと キュー、、、、 連携、 との使い分けを判断できることが重要です。

Point
  • SQS = Simple Queue Service の略です。
  • Queue は「待ち行列」という意味です。
  • SQS は「処理待ちの仕事をキューにためて、処理側が順番に取り出すサービス」と覚えます。
  • 和訳

概要

は、分散システムの部品同士をにするためのサービスです。 たとえば、画像アップロード後のリサイズ処理、注文後の非同期処理、ログ処理、バッチ処理、ワーカーへのジョブ配布などで使います。

送信側はメッセージをキューへ送るだけで処理を完了できます。 処理側は自分のペースでキューからメッセージを取得して処理します。 そのため、処理側が一時的に遅くなっても、送信側のアプリケーション全体を止めずに済みます。

概要の図 Producer送信側 SQS Queue Consumer / Worker 1 Consumer / Worker 2 Consumer / Worker 3 処理後にメッセージ削除

SAA では、「同期処理か非同期処理か」「順序が必要か」「重複処理に耐えられるか」「失敗メッセージをどう隔離するか」「 や とどう連携するか」を判断します。

見るポイント代表的な判断
処理を非同期化したいかSQS を間に置いて producer と consumer を疎結合にします。
高重視かStandard キューを選び、重複や順序ずれに備えます。
厳密な順序が必要か キューと message group ID を使います。
処理失敗が続くかDead-letter queue へ隔離します。
空の受信リクエストを減らしたいかLong polling を使います。
Lambda で処理したいかSQS を Lambda event source mapping にします。

主要技術

①Standard キューと FIFO キュー

には Standard キューと キューがあります。 Standard キューは高とスケールを重視する通常の選択肢です。 FIFO キューはメッセージの順序と重複排除を重視する場合に使います。

キュー種別特徴向いている用途試験での判断ポイント
Standard キュー高スループット、少なくとも 1 回配信、ベストエフォート順序大量ジョブ、画像処理、ログ処理、バックグラウンド処理重複処理や順序ずれをアプリ側で許容・対策できる場合に選びます。
FIFO キューFirst-In-First-Out、重複排除、メッセージグループ内順序保証注文処理、決済順序、状態更新、順序が重要なコマンド順序が必須で、スループットより整合性を重視する場合に選びます。

Standard キューでは、同じメッセージが複数回配信される可能性があります。 そのため、consumer は同じメッセージを複数回処理しても結果が壊れないな設計にします。 また、送信順序が完全に保証されるわけではないため、順序依存の処理には向きません。

FIFO キューでは、message group ID ごとに順序を保ちます。 同じ message group ID のメッセージは順番に処理されますが、異なる message group ID なら並列処理できます。 順序を保ちたい単位を message group ID で適切に分けることが重要です。

Point
  • FIFO = First-In, First-Out の略です。
  • 先に入ったものを先に出す、という意味です。
  • Idempotent(冪等) は、同じ処理を複数回実行しても結果が変わらない性質です。
  • 和訳

⚠️ 頻出: 「大量メッセージを高速に処理し、多少の重複は許容」は Standard キュー、「注文や状態変更を順番通りに処理」は FIFO キューです。

1 件のメッセージの最大サイズは、Standard キューと FIFO キューのどちらも 1 MiB です(2025 年 8 月に 256 KiB から引き上げられました)。 画像や動画のように上限を超えるデータは、本体を に保存し、メッセージには名とオブジェクトキーだけを入れて受け渡します。 Java と Python 向けの Amazon SQS Extended Client Library は、この受け渡しを自動で行います。


②メッセージライフサイクルと可視性タイムアウト

のメッセージは、送信、受信、処理、削除という流れで扱います。 consumer がメッセージを受信しても、メッセージは自動では削除されません。 処理が成功したら consumer が削除する必要があります。

②メッセージライフサイクルと可視性タイムアウトの図 SendMessage ReceiveMessage メッセージを返す Visibility timeout 中は他 consumer から見えない 処理 DeleteMessage Producer SQS Queue Consumer

は、consumer が受信したメッセージを一時的に他の consumer から見えなくする時間です。 この時間内に処理して削除すれば、他の consumer は同じメッセージを処理しません。 処理が終わる前に可視性タイムアウトが切れると、メッセージは再び見えるようになり、別の consumer に処理される可能性があります。

設定・状態意味判断ポイント
Visibility timeout受信後に一時的に非表示にする時間処理時間より短すぎると重複処理が増えます。
ChangeMessageVisibility処理中に可視性タイムアウトを延長・短縮長時間処理や処理時間が変動する場合に使います。
In-flight message受信済みだが削除されていないメッセージ多すぎる場合は削除漏れ、処理遅延、タイムアウト設計を疑います。
Message retentionキュー内で保持できる期間期限を過ぎたメッセージは削除されます。

長時間処理では、可視性タイムアウトを処理時間に合わせて設定します。 処理時間が読めない場合は、処理中に ChangeMessageVisibility で延長する設計を検討します。 ただし、長すぎる可視性タイムアウトは失敗時の再試行を遅らせます。

⚠️ 頻出: 「同じメッセージが何度も処理される」場合、consumer の、可視性タイムアウトの長さ、処理後の DeleteMessage 実行を確認します。


③Dead-letter queue と失敗処理

Dead-letter queue は、処理に何度も失敗したメッセージを隔離するためのキューです。 失敗メッセージを本来のキューに戻し続けると、正常なメッセージ処理を妨げたり、同じ失敗を繰り返したりします。 に移すことで、後から原因調査や再処理ができます。

③Dead-letter queue と失敗処理の図 成功 失敗・再試行 maxReceiveCount 超過 Main Queue Consumer DeleteMessage Dead-letter Queue 調査・修正・Redrive
要素役割試験での判断ポイント
Dead-letter queue失敗メッセージの隔離先処理不能メッセージを分析しやすくします。
maxReceiveCountDLQ へ移すまでの受信回数小さすぎると一時障害でも DLQ に入り、大きすぎると失敗が長引きます。
RedriveDLQ から再処理する操作バグ修正後にメッセージを戻して処理できます。
alarmDLQ への流入監視障害検知に使います。

DLQ は、元のキューと同じアカウント・に作成する必要があります。 また、 キューには FIFO の DLQ、Standard キューには Standard の DLQ を組み合わせる設計にします。

DLQ は失敗を隠すための仕組みではありません。 DLQ にメッセージが入ったら、consumer の例外、入力データ、権限、依存先サービス、、再試行回数を調査します。

Point
  • DLQ = Dead-letter Queue の略です。
  • Dead-letter は、配達できなかった郵便物のような意味です。
  • SQS では「何度処理しても失敗するメッセージの隔離先」と覚えます。
  • 和訳

⚠️ 頻出: 「何度も失敗するメッセージで処理が詰まる」は DLQ を設定します。単に可視性タイムアウトを長くするだけでは、根本的な失敗隔離にはなりません。


④ショートポーリング、ロングポーリング、バッチ処理

Consumer は ReceiveMessage でキューからメッセージを取得します。 この取得方式にはショートとがあります。

ショートポーリングはすぐに応答します。 メッセージがない場合も空の応答が返りやすく、空振りリクエストが増えることがあります。 ロングポーリングは、指定時間までメッセージの到着を待ってから応答するため、空の応答を減らし、コスト効率を上げやすいです。

方式特徴向いている場面
Short pollingすぐ応答します。空応答が増えやすいです。即時応答を優先し、空振りを許容する場合です。
Long polling最大待機時間までメッセージを待ちます。空応答と 呼び出しを減らしたい場合です。
Batch API複数メッセージをまとめて送受信・削除高と API コスト削減に役立ちます。
④ショートポーリング、ロングポーリング、バッチ処理の図 WaitTimeSeconds = 0 WaitTimeSeconds > 0 Consumer ReceiveMessage Short polling即時応答 Long pollingメッセージ到着を待つ 空応答を減らす 空応答が増える可能性

Batch API を使うと、複数メッセージをまとめて送信、受信、削除できます。 大量処理では API 呼び出し回数を減らし、スループットとコストを改善できます。 ただし、バッチ内の一部だけ失敗する可能性があるため、結果を個別に確認する設計が必要です。

⚠️ 頻出: 「空の ReceiveMessage が多くコストが増える」は long polling を使います。「大量メッセージを効率よく処理」は batch API も検討します。


⑤Lambda、SNS、EventBridge との連携

は他サービスとの連携でよく使われます。 でキューを処理する場合、Lambda の event source mapping が SQS をし、メッセージのバッチを Lambda 関数へ渡します。 処理に成功すると、Lambda がメッセージを削除します。

⑤Lambda、SNS、EventBridge との連携の図 Producer SQS Queue Lambda Event Source Mapping Lambda Function Database / API SNS Topic EventBridge Pipes
連携用途試験での判断ポイント
SQS + Lambda非同期ワーカー処理Lambda がキューをポーリングし、バッチ単位で処理します。
+ SQS + バッファリング1 つのイベントを複数キューへ配信し、各 consumer が独立処理できます。
Pipesソースからターゲットへの連携・フィルタ・変換SQS から別サービスへ送る途中で絞り込みや変換をしたい場合に使います。
+ SQSワーカー数の自動調整キュー深度に応じて / ワーカーを増減します。

Lambda と SQS の連携では、関数コードをにする必要があります。 バッチ内の一部メッセージだけ失敗した場合、部分バッチ応答を使わないと、成功済みメッセージも再試行される可能性があります。 そのため、失敗したメッセージだけを再処理する設計が重要です。

SNS は publish-subscribe 型で、1 つのメッセージを複数の購読先へ配信するサービスです。 SQS はキュー型で、consumer が取り出して処理します。 複数システムへ同じイベントを配り、それぞれが独立して処理したい場合は、SNS topic から複数 SQS queue へ配信する fanout 構成がよく使われます。

Point
  • SNS = Simple Notification Service の略です。
  • Notification は「通知」という意味です。
  • SNS は「複数の相手に知らせる」、SQS は「処理待ちをためる」と分けて覚えます。
  • 和訳

⚠️ 頻出: 「1 つのイベントを複数の処理系へ配る」は SNS + SQS、「処理側の負荷を吸収する」は SQS、「Lambda で SQS を処理する」は event source mapping です。


⑥セキュリティ、暗号化、監視

へのアクセスは ポリシーとキューポリシーで制御します。 同一アカウント内のアプリケーションには IAM ロールで sqs:SendMessage や sqs:ReceiveMessage を付与します。 や から SQS へ送信する場合は、キューポリシーで送信元を許可します。

観点関連機能判断ポイント
IAM 権限sqs:SendMessage、sqs:ReceiveMessage、sqs:DeleteMessageproducer と consumer に必要最小限の権限を付けます。
Queue policyクロスアカウント、SNS 連携キュー側で送信元や利用者を許可します。
-SQSSQS 管理キーによる暗号化シンプルに保存時暗号化したい場合です。
キーによる暗号化鍵管理、監査、権限制御が必要な場合です。
EndpointVPC からプライベート接続インターネットを経由せず SQS に到達したい場合です。
キュー深度、古いメッセージ、 流入遅延や障害検知に使います。

SQS のサーバー側暗号化は、メッセージ本文を暗号化します。 SSE-KMS を使う場合は、SQS 権限だけでなく KMS キーの利用権限も確認します。 暗号化済みキューでは と署名付きリクエストが必要です。

監視では、キューに溜まっているメッセージ数、最も古いメッセージの経過時間、処理中メッセージ数、DLQ のメッセージ数を見ます。 キュー深度が増え続ける場合は、consumer 数、処理速度、依存先障害、、スケーリング条件を確認します。

⚠️ 頻出: 「SQS は VPC 内に作るサービス」ではありません。SQS はリージョナルなです。VPC 内からプライベートにアクセスしたい場合は VPC Endpoint を使います。


試験対策

SAA の 問題では、まず「処理を非同期化してにしたいか」を見ます。 Web リクエスト中に重い処理を直接実行するのではなく、SQS にメッセージを入れて、バックグラウンドの worker や で処理する構成がよく正答になります。

次に、順序要件を確認します。 順序が不要で高が重要なら Standard キューです。 順序と重複排除が重要なら キューを選びます。 Standard キューでは at-least-once 配信を前提に、consumer をにします。

問題文のキーワード優先して考える機能理由
Producer と consumer を疎結合SQS一時的な処理遅延や障害をキューで吸収できます。
大量メッセージを高速処理Standard キュー高スループットに向きます。
メッセージ順序が必須FIFO キューMessage group ID 内の順序を保てます。
同じメッセージが再処理される冪等性 + Visibility timeout + DeleteMessageSQS は重複処理を前提に設計します。
処理に何度も失敗するDead-letter queue失敗メッセージを隔離して調査できます。
空の受信が多いLong polling空応答を減らし、コスト効率を改善します。
1 つのイベントを複数処理系へ + SQS fanout複数 queue に配信し、各 consumer が独立処理できます。
Lambda でキューを処理Event source mappingLambda が SQS をして処理します。
キュー深度で worker を増減 + backlog に応じて処理能力を調整します。
SQS メッセージを暗号化-SQS / 鍵管理要件に応じて選びます。
試験対策の図 はい いいえ いいえ はい SQS 設計問題 非同期化・疎結合が目的ですか? 順序が必須ですか? SNS / EventBridge / Step Functions なども検討 Standard Queue FIFO Queue 失敗メッセージ対策は? Dead-letter Queue Visibility timeout 調整 冪等な consumer 処理方法は? Lambda event source mapping EC2 / ECS worker + Auto Scaling

よくある誤答は、SQS と SNS の混同です。 SQS はキューであり、consumer がメッセージを取り出して処理します。 SNS はトピックであり、複数の購読先に通知を配信します。 複数システムへ同じイベントを確実に届けたい場合は、SNS から複数の SQS キューへ fanout する構成を考えます。

もう一つの頻出ポイントは、SQS が「完全に 1 回だけ処理される」と思い込むことです。 Standard キューは at-least-once 配信で、重複配信の可能性があります。 FIFO キューでも、アプリケーション側のリトライや処理失敗に備えて、冪等性と失敗処理を設計します。

コスト面では、 リクエスト数、メッセージ数、ポーリング方式、 利用、データ転送、Lambda や worker の処理時間が影響します。 SAA では料金の数値暗記より、long polling、batch API、適切な、Auto Scaling による処理能力調整を押さえます。


参考文献

  1. ※1出題比率: AWS 公式の試験ガイドに記載された、採点対象の設問のうちその分野が占める割合です。

検索

キーワードを入力してください