ある企業が、AWS Lambda を使ったイベント処理システムで、Amazon EventBridge からトリガーされた Lambda 関数が外部 API の一時的なエラーで失敗することがある。失敗したイベントを最大 3 時間後まで保持して再処理できるようにしたい。最も適切な設定はどれか。
- A. EventBridge ルールを 3 時間ごとに実行するよう変更する。
- B. Lambda 関数内の try-catch で最大 3 時間のループを実装する。
- C. Amazon SQS を Lambda と EventBridge の間に挟み、SQS のメッセージ保持期間を 3 時間に設定する。
- D. Lambda 関数の非同期呼び出し設定で最大イベント有効期間を 3 時間(10,800 秒)に設定し、最大再試行回数を 2 に設定する。
解答と解説を見る
正解: D
Lambda の非同期呼び出し設定(EventBridge からのトリガーは非同期)では、最大イベント有効期間(Maximum Event Age)を設定できる。このパラメータを 10,800 秒(3 時間)に設定すると、イベントが 3 時間以内であれば Lambda は最大再試行回数に従ってリトライを繰り返す。最大再試行回数(0〜2)を設定することで再試行のタイミングと回数を制御できる。選択肢AのEventBridge ルールの変更は元のイベントを再発火させるものではなく、新しいイベントが 3 時間後に発火するようになるだけ。失敗したイベントの再処理という要件を満たさない。選択肢Bの Lambda 関数内での 3 時間ループは Lambda の最大実行時間(15 分)を超えるため技術的に不可能。選択肢CのSQS の挿入は有効な手段だが、EventBridge → SQS → Lambda の構成変更が必要で、Lambda の非同期設定を変更するより構成変更が大きい。
📚 関連サービスの解説: AWS Lambda