DVAトラブルシューティングと最適化

Lambda関数がSQS標準キューからメッセージを受信して注文処理を行っています。Lambda関数のタイムアウトは30秒ですが、SQSキューの可視性タイムアウト(Visibility Timeout)は10秒に設定されています。運用チームから「同じ注文が複数回処理されている」という報告がありました。この問題の根本原因として最も可能性が高いのはどれですか?

A
Lambda関数が処理完了後にDeleteMessage APIを明示的に呼び出していないため、メッセージがキューに残り続けている
マネージド統合では Lambda は処理成功時にメッセージを自動削除するため、明示的な DeleteMessage 呼び出しは不要です。
B
SQSの可視性タイムアウト(10秒)がLambda関数のタイムアウト(30秒)より短いため、Lambdaがまだ処理中にメッセージがキューに再表示され、別のLambdaインスタンスが同じメッセージを取得する
✓ 正解
可視性タイムアウト(10 秒)が Lambda タイムアウト(30 秒)より短いと、Lambda 処理中にメッセージがキューに再表示され、別インスタンスが重複処理します。ベストプラクティスでは可視性タイムアウトを Lambda タイムアウトの 6 倍以上に設定します。
C
SQS標準キューはAt-Least-Once配信を保証する設計のため、重複配信は根本的に防げない。FIFO(先入れ先出し)キューへ移行する必要がある
標準キューの重複配信は稀なレアケースであり、今回の定常的重複は設定ミスが原因です。FIFO への移行は必須ではありません。
D
Lambdaのリザーブドコンカレンシーが低くスロットリングが頻発しており、再試行によって同じメッセージが複数処理されている
リザーブドコンカレンシー設定がない場合、スロットリングは発生せず、重複処理の直接原因ではありません。

解説

Lambda + SQSのマネージド統合では、Lambdaは処理成功時にメッセージを自動削除するため選択肢Aは誤りです。しかし可視性タイムアウトがLambdaのタイムアウトより短い場合、Lambda処理中にメッセージがキューに再表示され、別のLambdaインスタンスが同じメッセージを重複処理します。AWSのベストプラクティスでは、可視性タイムアウトをLambda関数タイムアウトの6倍以上(この場合は最低180秒)に設定することを推奨しています。標準キューの重複配信(選択肢C)は稀なレアケースであり、今回の定常的な重複は設定ミスが原因です。

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

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

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