無限ノック › DVA 練習問題一覧 › 問題
DVAトラブルシューティングと最適化

Eコマースアプリケーションでは、SQSキューを介してLambda関数で支払いトランザクションを処理しています。Lambda関数のタイムアウトは300秒(5分)に設定されており、SQSの可視性タイムアウト(Visibility Timeout:処理中のメッセージを他のコンシューマーから隠す時間)は60秒に設定されています。一部の支払いが重複処理されて二重請求が発生しています。この問題の根本原因はどれですか?

A
SQS標準キューはAt-Least-Once配信(少なくとも1回の配信を保証する仕組み)のため重複は不可避であり、FIFOキューへの切り替えが必要
FIFO切り替えは重複を防ぎますが、スループット上限(1秒300件)の制約が生じます。また根本原因である可視性タイムアウト不足を修正していません。
B
SQSの可視性タイムアウト(60秒)がLambda関数のタイムアウト(300秒)より短く、処理中にメッセージが再び可視状態になって別のLambdaインスタンスに取得されている
✓ 正解
可視性タイムアウトがLambda関数のタイムアウトより短い場合、処理中にメッセージが再度キューに露出して別インスタンスによる重複取得が発生します。ベストプラクティスではLambdaタイムアウトの6倍以上を推奨します。
C
Lambda関数がメッセージ処理完了後にSQSキューからメッセージを明示的に削除していない
SQSトリガーのLambdaは処理成功後に自動でメッセージを削除するため、明示的削除の不足は重複発生の原因ではありません。
D
Lambda関数の予約済み同時実行数が不足しており、複数のLambdaインスタンスが同一メッセージを取得している
Lambda関数の予約済み同時実行数不足は、可視性タイムアウト起因の重複処理を防ぐ仕組みではありません。

解説

可視性タイムアウトがLambda関数のタイムアウトより短い場合、処理中にメッセージが再度キューに露出し、別のLambdaインスタンスによる重複取得が発生します。AWSのベストプラクティスでは可視性タイムアウトをLambda関数タイムアウトの6倍以上(本ケースでは最低1,800秒)に設定することを推奨しています。 選択肢AのSQS標準キューはAt-Least-Once配信(少なくとも1回の配信を保証する仕組み)のため重複は不可避であり、FIFOキューへの切り替えが必要ですが、根本原因である可視性タイムアウトの不足を修正しておらず、スループット上限(1秒あたり300件)の制約も生じます。 選択肢CのLambda関数がメッセージ処理完了後にSQSキューからメッセージを明示的に削除していないというのは誤りです。SQSトリガーのLambdaは処理成功後に自動でメッセージを削除します。 選択肢DのLambda関数の予約済み同時実行数(Reserved Concurrency)が不足しているというのは、可視性タイムアウト起因の重複処理を防ぐ仕組みではありません。

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

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

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