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