メインコンテンツへ移動
SAA-C03Resilient Architectures難易度難しい

SAA-011

注文処理システムで、注文受付APIと在庫更新処理を疎結合にしたいです。在庫更新処理が一時的に停止しても注文メッセージを失わず、後で処理できる構成はどれですか?

選択肢

解説と正解

解説と正解を読む(先に自分で回答してから開くのがおすすめです)

正解:A. APIからSQSキューへメッセージを送信し、在庫更新LambdaがSQSを処理する

解説

SQSを使うと、注文受付と在庫更新を非同期・疎結合にできます。処理側が一時停止してもメッセージをキューに保持できます。

選択肢ごとの解説

A. APIからSQSキューへメッセージを送信し、在庫更新LambdaがSQSを処理する

正解です。SQSは非同期処理とバッファリングに向いています。

B. API GatewayのCORS設定だけで制御する

CORSはブラウザからのアクセス制御であり、非同期処理の信頼性を高める機能ではありません。

C. APIから在庫更新Lambdaを同期呼び出しする

同期呼び出しでは在庫更新側の障害が注文受付に影響しやすくなります。

D. APIからCloudWatch Logsに注文内容を出力するだけにする

CloudWatch Logsは処理キューではありません。

実務での使いどころ

Amazon SQS は、メッセージ送信側(プロデューサー)と受信側(コンシューマー)を時間的・物理的に分離するためのフルマネージド型キューサービスである。注文受付 API がリクエストを受けた時点で SQS にメッセージを投入し、在庫更新ワーカーが別プロセスとして自分のペースでメッセージを取り出して処理する構成にすれば、在庫更新側が一時的に停止していてもメッセージは最大 14 日間キューに保持される。標準キュー(Standard Queue)は順序保証なし・少なくとも 1 回配信、FIFO キューは順序保証・厳密に 1 回処理を提供する。 代替案として SNS(pub/sub)や EventBridge(イベントバス)もあるが、SNS は通知のファンアウト用途、EventBridge はルーティング・スキーマ管理用途であり、ワーカーがメッセージを「取りに行く」ポーリング型のジョブキューには SQS が最も素直に当てはまる。注意点としては、コンシューマー側で可視性タイムアウト(Visibility Timeout)を処理時間より長く設定すること、処理失敗時の再試行回数を超えたメッセージを退避させる Dead Letter Queue(DLQ)を必ず設定することの 2 点が運用上の定石である。 SAA-C03 では、疎結合(decoupling)・非同期処理・耐障害性というキーワードが出題文に含まれる場合、SQS が第一候補となる。誤答としては「ワーカー側で同期 HTTP 呼び出し」「DynamoDB に直接書き込み」「EC2 を Auto Scaling で増やす」など、疎結合化以外の論点にすり替える選択肢が混ぜられる。SNS と SQS の使い分け(通知配信か、ワーカーキューか)も頻出論点である。

関連リンク