無限ノック › SAA 練習問題一覧 › 問題
SAA弾力性に優れたアーキテクチャの設計

あるシステムでは AWS Lambda 関数(タイムアウト: 5分)が Amazon SQS Standard Queue からメッセージを処理しています。SQS のデフォルト設定(可視性タイムアウト: 30秒)のまま運用したところ、一部のメッセージが処理完了前に再表示され重複処理が発生しています。この問題を最小限の変更で解消するための最も適切な対処はどれですか?

A
SQS キューの可視性タイムアウト(Visibility Timeout)を Lambda 関数のタイムアウト時間の6倍以上(30分以上)に変更し、処理中のメッセージが他のコンシューマーに再表示されないようにする。
✓ 正解
可視性タイムアウトを Lambda タイムアウトの6倍(30分)以上に設定することで、Lambda 処理中にメッセージが再表示されなくなります。AWS 公式が推奨する最小限の設定変更で重複処理を解消できます。
B
SQS キューのメッセージ保持期間(Message Retention Period)を現在の値より大幅に延長し、処理が完了するまでメッセージがキューから削除されないよう設定を変更する。
メッセージ保持期間はメッセージがキューに存在できる最大時間(デフォルト4日)を制御します。処理中の可視性制御とは別の設定であり、この変更では重複処理の問題を解消することができません。
C
Lambda のリザーブドコンカレンシー(Reserved Concurrency)を1に設定して同時実行を1件に制限し、複数の Lambda インスタンスが同じメッセージを並行処理しないようにする。
リザーブドコンカレンシーを1にすると同時実行数は1になりますが、可視性タイムアウトの問題は残ります。また処理スループットが著しく低下し、大量メッセージの処理に支障が出ます。
D
SQS Standard Queue を FIFO Queue に移行し、メッセージグループ ID を設定することで同一グループ内のメッセージを順序付けて1件ずつ処理されるよう保証する。
FIFO Queue は重複排除 ID により5分間の重複排除ウィンドウを提供しますが、可視性タイムアウトによる再表示の根本原因は解消されず、スループット上限(3,000メッセージ/秒)という追加制約も発生します。

解説

SQS の可視性タイムアウトは、コンシューマーがメッセージを受信してから他のコンシューマーに再表示されるまでの時間を制御します。Lambda タイムアウト(5分 = 300秒)に対してデフォルトの可視性タイムアウト(30秒)が短いため、Lambda が処理中にメッセージが再表示されて別の Lambda インスタンスに重複処理されます。AWS は可視性タイムアウトを Lambda タイムアウトの6倍(30分)以上に設定することを推奨しており、この設定変更のみで問題を解消できます。 選択肢Bのメッセージ保持期間はメッセージがキューに保存される合計時間を制御するもので、処理中の可視性制御とは無関係です。重複処理の根本原因を解消できません。 選択肢Cのリザーブドコンカレンシーを1に設定すると並列処理は防げますが、可視性タイムアウトの問題は解消されず処理スループットが大幅に低下します。また再表示されたメッセージを同一インスタンスが再処理するリスクも残ります。 選択肢DのFIFO Queue への移行は重複排除機能を提供しますが、スループット上限(3,000メッセージ/秒)という制約が加わり、可視性タイムアウトによる再表示の根本原因は解消されません。

ドメイン別正答率・予想スコアでリアルタイムに実力把握

無限ノックでSAAを徹底対策。全問AI生成のオリジナル問題。

無料で演習を始める →
← SAA の問題一覧に戻る