やらかしを教訓として残します
機能概要
- 契約しているクライアントさんに対して、メールを送信するAPIを作成
- そのAPIのエンドポイントをAPI送信先として登録
- EventBridge で毎月1日の8時に、登録したAPI送信先に対してリクエストを送信
起こったこと
該当のAPI送信先に10分間隔でリクエストが発生しており、クライアントさんに対してメールを送信し続ける事例が発生
無駄だった対応
デフォルトから設定変更をしていなかったため
再試行ポリシーの再試行回数が185に設定されていたのを0に変更
どうやら設定変更前に発生したイベントに対して、新しい設定は反映されないようですね…
適切だった対応
該当の EventBridge を無効化して、登録していたAPI送信先を削除
原因
API送信先ページに記されていましたが、どうやら5秒以上かかる処理は EventBridge がタイムアウトしてしまう模様。
タイムアウトでイベント失敗と判断され、再試行ループ
ただ、EventBridge がタイムアウトを返したとしてもバックエンド側はその後も普通に動いており正常終了
設定された再試行回数を元に、それを繰り返していた、という感じでした
上記ページから引用
EventBridge API 送信先エンドポイントへのリクエストのクライアント実行タイムアウトの最大値は 5 秒でなければなりません。ターゲットエンドポイントの応答に 5 秒以上かかる場合、 EventBridge リクエストはタイムアウトします。 EventBridge タイムアウトしたリクエストは、再試行ポリシーに設定されている最大回数まで再試行します。デフォルトでは、最大値は 24 時間と 185 回です。再試行の最大回数を超えると、デッドレターキューがあればイベントはそこに送られ、なければイベントはドロップされます。
しばらくはメール送信対象のクライアントが少なかったので5秒以内に終わっていたのですが、クライアントさんが増えてきて5秒以上経過するようになったって感じです
今後の対応
5秒以上かかる処理は、Lambda にお願いする
※Lambda のタイムアウト時間は最大15分なので、それ以上かかる場合また別の手段が必要
感想
AWS難しい