Step Functionsステートマシンの実行のイベントソースをコマンドで確認する
こんにちは、CX事業本部 IoT事業部の若槻です。
今回は、AWS Step Functionsステートマシンの実行のイベントソースをコマンドで確認する方法のご紹介です。
確認してみた
AWS Step Functionsステートマシンは、手動実行、EventBridgeルール、S3イベントなど様々なイベントソースから実行できます。マネジメントコンソールからであれば[Execution Input]タブから確認できます。下記だとEventBridgeルールから実行されていることが分かります。
一方で、イベントソースをプログラムなどからコマンドで確認したい場合はDescribeExecution APIを使用する必要があります。
まずステートマシンの実行のArnであるexecutionArnをAWS CLIのstepfunctions list-executions
コマンドを使用して取得します。
$ accountId=XXXXXXXXXXXX $ stateMachineArn=arn:aws:states:ap-northeast-1:${accountId}:stateMachine:MyStateMachine $ aws stepfunctions list-executions \ --state-machine-arn ${stateMachineArn} \ --max-items 2 { "executions": [ { "executionArn": "arn:aws:states:ap-northeast-1:XXXXXXXXXXXX:execution:MyStateMachine:5aa5a77d-04ce-45a4-aaad-0c44697c8da7", "stateMachineArn": "arn:aws:states:ap-northeast-1:XXXXXXXXXXXX:stateMachine:MyStateMachine", "name": "5aa5a77d-04ce-45a4-aaad-0c44697c8da7", "status": "SUCCEEDED", "startDate": "2021-11-29T23:20:47.611000+09:00", "stopDate": "2021-11-29T23:20:48.417000+09:00" }, { "executionArn": "arn:aws:states:ap-northeast-1:XXXXXXXXXXXX:execution:MyStateMachine:1ca14969-4f77-7b83-24ea-7cb0fc4cd1be_ed65e8bd-3a5f-592c-00f5-d179a8cab810", "stateMachineArn": "arn:aws:states:ap-northeast-1:XXXXXXXXXXXX:stateMachine:MyStateMachine", "name": "1ca14969-4f77-7b83-24ea-7cb0fc4cd1be_ed65e8bd-3a5f-592c-00f5-d179a8cab810", "status": "SUCCEEDED", "startDate": "2021-11-17T11:11:08.759000+09:00", "stopDate": "2021-11-17T11:11:09.568000+09:00" } ], "NextToken": "eyJuZXh0VG9rZW4iOiBudWxsLCAiYm90b190cnVuY2F0ZV9hbW91bnQiOiAyfQ==" }
list-executions
でも実行ごとのstatus
、startDate
、stopDate
などのある程度の情報は取得できますが、イベントソースの情報は含まれていません。取得したexecutionArn
を使用してさらにdescribe-execution
を実行してDescribeを必要があります。
1つ目の実行のDescribeを取得してみます。するとinputで手動実行時に指定した任意の入力が確認できます。
$ executionArn1=arn:aws:states:ap-northeast-1:${accountId}:execution:MyStateMachine:5aa5a77d-04ce-45a4-aaad-0c44697c8da7 $ aws stepfunctions describe-execution \ --execution-arn ${executionArn1} { "executionArn": "arn:aws:states:ap-northeast-1:XXXXXXXXXXXX:execution:MyStateMachine:5aa5a77d-04ce-45a4-aaad-0c44697c8da7", "stateMachineArn": "arn:aws:states:ap-northeast-1:XXXXXXXXXXXX:stateMachine:MyStateMachine", "name": "5aa5a77d-04ce-45a4-aaad-0c44697c8da7", "status": "SUCCEEDED", "startDate": "2021-11-29T23:20:47.611000+09:00", "stopDate": "2021-11-29T23:20:48.417000+09:00", "input": "{\n \"Comment\": \"Insert your JSON here\"\n}", "output": "{}" }
2つ目の実行のDescribeを取得してみます。するとinputでイベントソースとなったEventBridgeルールが確認できます。
$ executionArn2=arn:aws:states:ap-northeast-1:${accountId}:execution:MyStateMachine:1ca14969-4f77-7b83-24ea-7cb0fc4cd1be_ed65e8bd-3a5f-592c-00f5-d179a8cab810 $ aws stepfunctions describe-execution \ --execution-arn ${executionArn2} { "executionArn": "arn:aws:states:ap-northeast-1:XXXXXXXXXXXX:execution:MyStateMachine:1ca14969-4f77-7b83-24ea-7cb0fc4cd1be_ed65e8bd-3a5f-592c-00f5-d179a8cab810", "stateMachineArn": "arn:aws:states:ap-northeast-1:XXXXXXXXXXXX:stateMachine:MyStateMachine", "name": "1ca14969-4f77-7b83-24ea-7cb0fc4cd1be_ed65e8bd-3a5f-592c-00f5-d179a8cab810", "status": "SUCCEEDED", "startDate": "2021-11-17T11:11:08.759000+09:00", "stopDate": "2021-11-17T11:11:09.568000+09:00", "input": "{\"version\":\"0\",\"id\":\"1ca14969-4f77-7b83-24ea-7cb0fc4cd1be\",\"detail-type\":\"Scheduled Event\",\"source\":\"aws.events\",\"account\":\"XXXXXXXXXXXX\",\"time\":\"2021-11-17T02:11:06Z\",\"region\":\"ap-northeast-1\",\"resources\":[\"arn:aws:events:ap-northeast-1:XXXXXXXXXXXX:rule/myRule\"],\"detail\":{}}", "output": "{}" }
inputをダンプすると下記のようになります。これを使用すればステートマシンがどのイベントソースから実行されたか分かりますね。
{ "version": "0", "id": "1ca14969-4f77-7b83-24ea-7cb0fc4cd1be", "detail-type": "Scheduled Event", "source": "aws.events", "account": "XXXXXXXXXXXX", "time": "2021-11-17T02:11:06Z", "region": "ap-northeast-1", "resources": [ "arn:aws:events:ap-northeast-1:XXXXXXXXXXXX:rule/myRule" ], "detail": {} }
おわりに
AWS Step Functionsステートマシンの実行のイベントソースを確認する方法についてご紹介しました。
そもそもなぜステートマシンの実行のイベントソースを確認したかったかというと、EventBridgeルールで定期的にステートマシンを実行するシステムで、一定期間内に期待した回数だけステートマシンが実行されていることを確認したかったためでした。
以上