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

SQSキュー(VisibilityTimeout=30秒)からメッセージを受信して処理するLambda関数がある。 平均処理時間は45秒だが、同一メッセージが複数回処理されてしまう問題が断続的に発生している。 最も適切な解決策はどれか?

A
SQSキューのVisibilityTimeoutをLambda関数のタイムアウト値の少なくとも6倍以上に設定する
✓ 正解
VisibilityTimeout(30秒)が処理時間(45秒)より短いため、処理が完了する前にメッセージが再び可視状態になり、別のコンシューマーが同じメッセージを取得しています。AWSのベストプラクティスでは、VisibilityTimeoutはLambdaのタイムアウト値の少なくとも6倍に設定することが推奨されています。
B
Lambda関数のReserved Concurrency(予約済み同時実行数)を1に設定して並列処理を防ぐ
Reserved Concurrencyを1にするとスループットが大幅に低下し根本解決になりません。
C
SQSのMessageRetentionPeriod(メッセージ保持期間)を短縮して古いメッセージを削除する
MessageRetentionPeriod の短縮は古いメッセージを削除しますが重複処理対策にはなりません。
D
SQS標準キューをFIFOキューに変更して処理順序を保証する
FIFOキューへの変更は順序保証であり重複処理の直接的な解決策ではありません。

解説

VisibilityTimeout(30秒)が処理時間(45秒)より短いため、処理が完了する前にメッセージが再び可視状態になり、別のコンシューマーが同じメッセージを取得しています。AWSのベストプラクティスでは、VisibilityTimeoutはLambdaのタイムアウト値の少なくとも6倍に設定することが推奨されています。 選択肢B:Reserved Concurrencyを1にするとスループットが大幅に低下し根本解決になりません。 選択肢C:MessageRetentionPeriod の短縮は古いメッセージを削除しますが重複処理対策にはなりません。 選択肢D:FIFOキューへの変更は順序保証であり重複処理の直接的な解決策ではありません。

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

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

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