Step Functionsステートマシンの実行のイベントソースをコマンドで確認する

2021.11.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、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でも実行ごとのstatusstartDatestopDateなどのある程度の情報は取得できますが、イベントソースの情報は含まれていません。取得した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ルールで定期的にステートマシンを実行するシステムで、一定期間内に期待した回数だけステートマシンが実行されていることを確認したかったためでした。

以上