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

開発者はSQS標準キューでトリガーされるLambda関数を構築しています。Lambda関数の処理時間は約45秒ですが、同じメッセージが複数回処理される問題が発生しています。SQSキューの可視性タイムアウト(Visibility Timeout)は30秒に設定されています。この問題を解決するための適切な対策はどれですか?

A
SQSロングポーリングを有効にして空のポーリングを減らす
[ロングポーリング]は[空のポーリングを減らすだけで重複処理の問題は解決しない]。
B
SQSキューの可視性タイムアウトをLambda関数のタイムアウトより長い値(例:60秒以上)に設定する
✓ 正解
可視性タイムアウトは、メッセージが処理中に他のコンシューマーから見えなくなる時間です。Lambda処理(45秒)より可視性タイムアウト(30秒)が短いため、処理完了前にメッセージが再度キューに見えてしまい、別のLambdaインスタンスが同じメッセージを取得します。可視性タイムアウトはLambda関数タイムアウトの6倍以上にすることがAWSのベストプラクティスです。
C
SQS FIFOキューに切り替えて重複処理を防ぐ
[SQS FIFOキュー]は[重複排除機能がありますが、既に発生している重複処理問題の根本原因(可視性タイムアウト不足)を解決するものではない]。
D
Lambda関数の予約済み同時実行数(Reserved Concurrency)を1に制限する
[Reserved Concurrency]は[同時実行数を制限するだけで可視性タイムアウトの問題は解決しない]。

解説

可視性タイムアウトは、メッセージが処理中に他のコンシューマーから見えなくなる時間です。Lambda処理(45秒)より可視性タイムアウト(30秒)が短いため、処理完了前にメッセージが再度キューに見えてしまい、別のLambdaインスタンスが同じメッセージを取得します。可視性タイムアウトはLambda関数タイムアウトの6倍以上にすることがAWSのベストプラクティスです。 選択肢Aの[ロングポーリング]は[空のポーリングを減らすだけで重複処理の問題は解決しない]。 選択肢Cの[SQS FIFOキュー]は[重複排除機能がありますが、既に発生している重複処理問題の根本原因(可視性タイムアウト不足)を解決するものではない]。 選択肢Dの[Reserved Concurrency]は[同時実行数を制限するだけで可視性タイムアウトの問題は解決しない]。

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

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

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