AWS認定資格 WEB問題集&徹底解説

ソリューションアーキテクト – アソシエイト

Amazon Simple Queue Service (Amazon SQS) の概要と試験出題ポイントは?

AWSサービスの一つであるAmazon Simple Queue Service (Amazon SQS)はどんな内容なのでしょうか?また、AWS認定資格のソリューションアーキテクト-アソシエイト(SAA)に合格するためには、サービスのどんなポイントを押さえておけばよいのでしょうか?
ここでは、そんなあなたの疑問に回答していきたいと思います

Amazon SQS 徹底解説 | AWS認定試験の頻出ポイントまとめ

1. サービス概要

Amazon Simple Queue Service (SQS) は、フルマネージドのメッセージキューイングサービスです。 Producer(送信側)とConsumer(受信側)を疎結合にし、メッセージをキューに一時蓄積することで、処理の非同期化・バッファリング・ピーク吸収を実現します。

ConsumerはPull型でメッセージを取得します(SNSのPush型と対比)。 処理完了後にConsumerが明示的にDeleteMessageを呼ぶまで、メッセージはキューに保持され続けます。

主なユースケースはマイクロサービス間の非同期処理、Lambda自動起動(イベント駆動)、ピーク負荷のバッファリング、SNS Fan-outとの組み合わせです。

2. 主な特徴と機能

2.1 キューの種類(最頻出)

  • 標準キュー(Standard): 事実上無制限のスループット、ベストエフォート順序、少なくとも1回配信(重複あり)。アプリ側でべき等処理が必要。
  • FIFOキュー: 厳密なFIFO順序保証1回のみ配信(重複排除)。スループットはデフォルト毎秒300件(バッチ時3000件)。名前の末尾は.fifo必須。

2.2 可視性タイムアウト(Visibility Timeout)

Consumerがメッセージを受信すると、他のConsumerから見えなくなる時間(デフォルト30秒、最大12時間)。 この間にDeleteMessageしないと再度キューに現れ、別のConsumerが再処理できます。 長時間処理にはChangeMessageVisibilityで延長します。

2.3 Long Polling vs Short Polling

  • Short Polling(デフォルト): メッセージがなければ即時空レスポンスを返す(APIコスト増)。
  • Long Polling: WaitTimeSeconds(最大20秒)を設定し、メッセージが届くまで待機。空レスポンスが減りコスト削減・レイテンシ改善。推奨設定。

2.4 デッドレターキュー(DLQ)

maxReceiveCountを超えた受信試行回数のメッセージを別のDLQへ自動転送します。 問題メッセージを隔離・調査でき、正常メッセージの処理を妨げません。 SQS DLQのDLQリドライブ機能でソースキューへ再処理も可能です。

2.5 メッセージの制限・保持

  • 最大メッセージサイズ: 256KB。大きなペイロードはS3に本体を格納し、SQSにS3参照を送る(Extended Client Library)。
  • メッセージ保持期間: デフォルト4日、最大14日。
  • 遅延キュー(Delay Queue): メッセージ配信を最大15分遅延。個別メッセージへの遅延(MessageTimer)も可能(FIFO非対応)。

2.6 Lambda統合(イベントソースマッピング)

SQSキューをLambdaのイベントソースに設定すると、Lambdaがバッチでメッセージを取得・処理し、成功で自動削除します。 FIFOキューではメッセージグループ単位で順序処理が保証されます。

3. アーキテクチャおよび技術要素

  1. ProducerがSQSキューへSendMessageまたはSendMessageBatchでメッセージを送信する。
  2. ConsumerはReceiveMessage(Long Polling推奨)でメッセージをPull取得する。
  3. 可視性タイムアウト期間内に処理を完了しDeleteMessageする。タイムアウト前に完了しない場合はChangeMessageVisibilityで延長する。
  4. 設定回数失敗したメッセージは自動的にDLQへ転送される。
  5. Lambdaトリガーを設定した場合はポーリング・取得・処理・削除を自動化できる。

SNS(Fan-out)→ 複数SQSキュー → 各Consumer/Lambdaという構成が最もよく使われる分散パターンです。

4. セキュリティと認証・認可

  • IAMポリシー: SendMessage/ReceiveMessage/DeleteMessage等のAPI操作を最小権限で制御。
  • キューポリシー(リソースベース): クロスアカウントや特定サービス(SNS等)からのSendMessageを許可。
  • SSE-KMS: キュー保存メッセージをKMSキーで暗号化(転送中はTLS)。
  • SSE-SQS: SQSマネージドキーによる簡易暗号化(追加コストなし)。
  • VPCエンドポイント(PrivateLink): インターネットを経由せずVPC内からSQSへアクセス。

5. 料金形態

  • リクエスト数: 100万件あたり課金。標準/FIFOで単価が異なる。毎月100万件は無料枠(標準キュー)。
  • バッチ操作: SendMessageBatch等で最大10件を1リクエスト扱いにしてコスト削減可能。
  • SSE-KMS: KMS APIコール分の追加料金。SSE-SQSは追加コストなし。
  • データ転送: 同一リージョン内は無料。クロスリージョンはデータ転送料が発生。

6. よくあるアーキテクチャ・設計パターン

  • 非同期処理バッファ: WebサーバーがSQSキューへジョブを投入し、バックエンドWorker/Lambdaが非同期処理。ピーク時のスパイクを吸収。
  • SQS + Lambda: SQSをLambdaイベントソースに設定し、サーバーレスで自動処理。
  • DLQ隔離 + アラーム: DLQのメッセージ数をCloudWatchで監視し、閾値超過でアラートを発出。
  • SNS Fan-out + SQS: SNSトピック→複数SQSキューで、同一イベントを並列・独立に処理。
  • FIFO + 冪等処理: SQS FIFOで順序と重複排除を保証し、金融取引・在庫管理などに利用。

7. 設定・デプロイ手順(ハンズオン例)

  1. SQSコンソールで標準キューを作成する(キュー名・可視性タイムアウト・メッセージ保持期間を設定)。
  2. DLQとなるキューを別途作成し、ソースキューの再ドライブポリシーに設定する(maxReceiveCount=3等)。
  3. Long Pollingを有効化する(受信待機時間=20秒)。
  4. Lambdaイベントソースマッピングを設定し、バッチサイズを指定する。
  5. SSE-KMSまたはSSE-SQSを有効化する。
  6. CloudWatchでDLQのApproximateNumberOfMessagesVisibleに対するアラームを設定する。

8. 試験で問われやすいポイント

8.1 標準 vs FIFO(最頻出)

Q: 順序保証と重複排除が必要な場合はどちらのキューを使うか?
A: FIFOキュー。ただしスループットは毎秒300件(バッチ時3000件)に制限。名前の末尾に.fifoが必要。

Q: 標準キューで重複配信が発生する可能性があるとき、アプリ側でどうすべきか?
A: 冪等性(idempotent)な処理を実装し、重複処理しても結果が同じになるようにする。

8.2 可視性タイムアウト

Q: Consumer がメッセージを受信中に他のConsumerが同じメッセージを取得しないようにする仕組みは?
A: 可視性タイムアウト(Visibility Timeout)。取得後に他からは見えなくなる。

Q: 処理が可視性タイムアウト内に終わらない場合は?
A: ChangeMessageVisibilityで延長する。タイムアウト切れで別のConsumerが再取得できる。

8.3 Long Polling

Q: SQSでAPIコスト削減とレイテンシ改善を両立する設定は?
A: Long Polling(WaitTimeSeconds=20秒等)を有効化する。Short Pollingより空レスポンスが大幅に減る。

8.4 DLQ

Q: 処理に繰り返し失敗するメッセージを隔離・分析するには?
A: DLQ(Dead-Letter Queue)を設定し、maxReceiveCount超のメッセージを自動転送する。

8.5 Lambda統合

Q: SQSキューへのメッセージ到着でLambdaを自動起動するには?
A: SQSをLambdaのイベントソース(イベントソースマッピング)として設定する。ポーリング・取得・削除はLambdaが自動管理する。

8.6 SNS vs SQS の比較

  • SNS: Push型、1対多、配信後保持なし。
  • SQS: Pull型、1対1(1コンシューマー)、メッセージを最大14日保持。
  • 組み合わせ: SNS Fan-out → 複数SQSキューで、並列・非同期処理を実現。

8.7 遅延キューとメッセージタイマー

Q: キュー全体のメッセージ配信を遅らせたい場合は?
A: 遅延キュー(Delay Queue)を設定する(最大15分)。個別メッセージはMessageTimerで制御(FIFOは不可)。

8.8 メッセージサイズと保持期間

Q: SQSメッセージの最大サイズと保持期間は?
A: 最大256KB、保持期間はデフォルト4日・最大14日。