📝

EventBridge ルールから Step Functions ステートマシンの呼び出しに失敗したことを DLQ で確認してみた

に公開

EventBridge ルールからの呼び出し失敗時のメッセージを SQS の DLQ へ送信して確認してみました。

1. Step Functions ステートマシンの作成

以下のシンプルなステートマシンを作成しました。

{
  "Comment": "A description of my state machine",
  "StartAt": "成功",
  "States": {
    "成功": {
      "Type": "Succeed"
    }
  },
  "QueryLanguage": "JSONata"
}

2. SQS キューの作成

標準キューをデフォルト設定で作成しました。
このキューを EventBridge ルールの DLQ に指定します。

3. EventBridge ルールの作成

以下のイベントパターンを定義しました。

{
  "source": ["test"]
}
  • ターゲット: 1 で作成したステートマシン
  • デッドレターキュー: 2 で作成したキュー

4. 動作確認

まずは正常にステートマシンが実行されることから確認します。
イベントバスから以下のイベントを送信します。

  • イベントバス: default
  • イベントソース: test
  • 詳細タイプ: test
  • イベントの詳細: 以下の JSON
{
  "message": "test"
}

上記イベント送信後、ステートマシンが実行されていれば OK です。

次に EventBridge ルールからの呼び出しを失敗させます。
EventBridge ルールのターゲットで指定されている IAM ロールの権限を変更します。
今回は IAM ポリシーの Resource に存在しないステートマシン名を記載しました。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "states:StartExecution",
            "Resource": "arn:aws:states:ap-northeast-1:012345678901:stateMachine:dummy"
        }
    ]
}

この状態で再度イベントバスからイベントを送信してもステートマシンは実行されません。
DLQ を確認してみると、利用可能なメッセージが 1 になっていることを確認できます。

メッセージの送受信からメッセージをポーリングすると、イベントバスから送信されたメッセージとともにエラーも確認できます。

今回のエラーメッセージは以下の通りでした。

ERROR_CODE String NO_PERMISSIONS
ERROR_MESSAGE String User: arn:aws:sts::012345678901:assumed-role/Amazon_EventBridge_Invoke_Step_Functions_1179309302/39991657cdb6366a91a774d13904b2e4 is not authorized to perform: states:StartExecution on resource: arn:aws:states:ap-northeast-1:012345678901:stateMachine:test because no identity-based policy allows the states:StartExecution action (Service: AWSStepFunctions; Status Code: 400; Error Code: AccessDeniedException; Request ID: 49122a27-7536-450c-98dd-ddb8238876d6; Proxy: null)

IAM ポリシーを変更したことでステートマシンを呼び出す権限がなくなり、上記エラーが発生しました。
権限エラーに限らずステートマシンの呼び出しが失敗した場合に備えて DLQ を設定しておくとトラブルシューティングに役立ちそうです。

まとめ

今回は EventBridge ルールから Step Functions ステートマシンの呼び出しに失敗したことを DLQ で確認してみました。
どなたかの参考になれば幸いです。

参考資料

Discussion