AWS認定資格 WEB問題集&徹底解説
ソリューションアーキテクト – アソシエイト
AWSサービスの一つであるAmazon Simple Queue Service (Amazon SQS)はどんな内容なのでしょうか?また、AWS認定資格のソリューションアーキテクト-アソシエイト(SAA)に合格するためには、サービスのどんなポイントを押さえておけばよいのでしょうか?
ここでは、そんなあなたの疑問に回答していきたいと思います
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. アーキテクチャおよび技術要素
- ProducerがSQSキューへ
SendMessageまたはSendMessageBatchでメッセージを送信する。 - Consumerは
ReceiveMessage(Long Polling推奨)でメッセージをPull取得する。 - 可視性タイムアウト期間内に処理を完了し
DeleteMessageする。タイムアウト前に完了しない場合はChangeMessageVisibilityで延長する。 - 設定回数失敗したメッセージは自動的にDLQへ転送される。
- 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. 設定・デプロイ手順(ハンズオン例)
- SQSコンソールで標準キューを作成する(キュー名・可視性タイムアウト・メッセージ保持期間を設定)。
- DLQとなるキューを別途作成し、ソースキューの再ドライブポリシーに設定する(maxReceiveCount=3等)。
- Long Pollingを有効化する(受信待機時間=20秒)。
- Lambdaイベントソースマッピングを設定し、バッチサイズを指定する。
- SSE-KMSまたはSSE-SQSを有効化する。
- 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日。