【基礎から学ぶ】AWS Step Functionsのイベント履歴

記事タイトルとURLをコピーする

どうも、くればやしです。

Step Functions でイベント履歴を確認する場合の基礎的な知識をまとめてみたいと思います。

AWS Step Functionsのイベント履歴について

Step Functionsではステートマシンが実行されると、イベント履歴(HistoryEvent)を確認可能です(マネジメントコンソール上では 実行イベント履歴 と表記されている)。

イベント履歴のフォーマットは以下のリンクにまとめられています。

docs.aws.amazon.com

このイベント履歴は、以下図のようにマネジメントコンソールで表示可能です。

シンプルなステートマシンであれば、マネジメントコンソール上の表示だけでイベント履歴の確認は可能です。

しかし、ステートマシンの構造がある程度複雑になってくると、マネジメントコンソール上の表示だけでは確認が難しいことがあるため、適宜CLIやスクリプトによる確認が必要となってきます。

ステートマシンが複雑な場合のイベント履歴

その要因として、1つは、現在のマネジメントコンソールでは、IDの若い順からイベント履歴を動的にロードする構造となっているため、履歴が長いとロードに大変時間がかかってきます。

もう1つは、マネジメントコンソール上ではイベント履歴のすべての項目が表示されるわけではありません。具体的には表示される項目は上記図のように、

  • ID
  • タイプ
  • ステップ
  • リソース
  • 経過時間
  • タイムスタンプ
  • xxxEventDetailsの値

です。

シンプルなステートマシンであればこれらで十分ですが、Mapを使用したステートマシンを構成するような場合はさらに確認の要件が複雑になってくる場合があります。

各イベント履歴のIDは時系列にしたがって連番で付与されるようですが、Mapを使用した場合は、複数のリソースが並列実行されるため、Map内で連結されているイベントがイベント履歴上のIDでは連続していないケースが発生します。

例えばイベントAの後にイベントBが依存関係として呼ばれたとして、イベントAとイベントBはイベント履歴上のIDは隣り合っていない場合があります。 そのような場合に、イベント履歴上のつながりを確認する方法として、イベント履歴データの previousEventId 値を確認します。上記例の場合、イベントBの previousEventId はイベントAのIDが格納されているため、後ろからたどっていけば、イベントの実行のつながりを確認していくことができます。 この previousEventId も現在マネジメントコンソール上では確認できないようです。

AWS CLIの例

したがって、適宜CLIやスクリプトによる履歴の確認が必要になってくるわけですが、CLIでイベント履歴を取得する場合は、例えば get-execution-historyコマンドを使用します。

以下は実行結果のサンプルです。

 % aws stepfunctions get-execution-history --execution-arn [arn]
{
    "events": [
        {
            "timestamp": "2022-02-13T00:31:23.856000+09:00",
            "type": "ExecutionStarted",
            "id": 1,
            "previousEventId": 0,
            "executionStartedEventDetails": {
                "input": "{\n    \"hogehoge\": [1]\n}",
                "inputDetails": {
                    "truncated": false
                },
                "roleArn": "arn:aws:iam::xxxxxxxxxxxx:role/role"
            }
        },

おわりに

以上、Step Functions でイベント履歴を確認する場合の基礎的な知識をまとめてみました。

紅林輝(くればやしあきら)(サービス開発部) サバワクブログの記事一覧はコチラ

サービス開発部所属。2015年にサーバーワークスにJOIN。クラウドインテグレーション部を経て、現在はAWS運用自動化サービスCloud Automatorの開発に従事。主にバックエンドやサーバレスを担当。卓球熱再燃中🔥