1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

EventBridgeのイベント配信失敗時の動作確認してみる。

Last updated at Posted at 2025-02-26

はじめに

今回は、下記イベント配信失敗時の動作確認をしてみます。

動作確認

いくつかのケース動作確認してみます。

ターゲット先のLambdaが失敗したとき

まず、常に例外が発生するLambdaをターゲットに指定して、動作確認してみます。

def lambda_handler(event, context):
    # ゼロ除算エラーを発生させる
    result = 1 / 0    
    return {
        "statusCode": 200,
    }

配信自体は完了。FailedEntryCountは0です。

ターゲットの処理は非同期処理のため、処理結果までは見ていない模様です。

{
    "FailedEntryCount": 0,
    "Entries": [
        {
            "EventId": "3205b679-d932-b5d5-bd08-c251b967029b"
        }
    ]
}

対象のルールにDLQの配信設定をしているのですが、DLQの配信がされていません。

スクリーンショット 2025-02-26 3.39.34.png

Lambdaログを見てみると、2回呼び出しがされています。

START RequestId: 9aee35c5-4a3b-4686-9c3d-ca70e99ed419 Version: $LATEST

START RequestId: 9aee35c5-4a3b-4686-9c3d-ca70e99ed419 Version: $LATEST

これはLambda側の非同期呼び出しの仕組みが適用されている模様です。

スクリーンショット 2025-02-27 4.12.52.png

Lambda側の非同期呼び出し失敗時にDLQには配信されてました。

スクリーンショット 2025-02-27 4.16.01.png

なお、Lambda側の非同期処理については、以前まとめているので紹介しておきます!

ターゲットの呼び出しに失敗したとき

次はターゲットの実行ルールをからラムダの実行権限を除き、そもそも実行できないようにしてみます。

スクリーンショット 2025-02-26 3.44.43.png

この場合でも、FailedEntryCountは増えません。

{
    "FailedEntryCount": 0,
    "Entries": [
        {
            "EventId": "4bd6d9fa-14ee-bf55-8d0d-25a3ce7f7599"
        }
    ]
}

ただし、DLQにはメッセージが配信されています。

スクリーンショット 2025-02-26 3.49.04.png

メッセージを見てみると、Lambdaの実行権限がないよ!的な内容がわかります。

スクリーンショット 2025-02-26 3.51.07.png

またDLQ配信時には、InvocationsSentToDlqのメトリックスが発行されるみたいです。

スクリーンショット 2025-02-27 3.57.22.png

イベントとして認識できないデータを送った時

次はペイロードからSourceDetailTypeを除き、イベントとして成立していないデータを送ってみます。

aws events put-events \
  --entries '[{
    "Detail": "{\"instance-id\": \"i-abcd1111\", \"state\": \"running\"}",
    "EventBusName": "arn:aws:events:ap-northeast-1:xxxxxxxxxxxx:event-bus/default"
  }]' \
  --region ap-northeast-1

FailedEntryCountが1になり、エラー内容が表示されるようになりました。

{
    "FailedEntryCount": 1,
    "Entries": [
        {
            "ErrorCode": "InvalidArgument",
            "ErrorMessage": "Parameter Source is not valid. Reason: Source is a required argument."
        }
    ]
}

なお、DLQへの配信はありません。

どのルールにも一致しないイベントを送ってみる。

最後に、SourceDetailTypeがいずれのルールにも一致しないイベントを送ってみます。

FailedEntryCountは0、DLQ配信も無しでした。

{
    "FailedEntryCount": 0,
    "Entries": [
        {
            "EventId": "1dc41457-f6dd-68f7-d29b-9011a24f901c"
        }
    ]
}

この挙動については、明記がされていました。

スクリーンショット 2025-02-27 4.33.37.png

まとめ

各種動作確認をして以下のような感じになってそうです。

  • イベントの配信自体ができなかった場合
    • FailedEntryCountに加算
  • イベントの配信はできたが、ターゲットへの配信ができない場合
    • FailedEntryCountに加算無し。DLQ配信あり
  • イベント、ターゲットへの配信はできたが、ターゲットがエラー
    • FailedEntryCountに加算無し。DLQ配信無し
      • ターゲット側の再試行ポリシーに従う。

ただ、イベントブリッジ側の再試行の動作確認ができなかった事が残念です。

ドキュメントを読む限り、ネットワークエラーなどリトライで成功する見込みがあるエラーのみ、再試行がされるようです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?