📝
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