AWS Step Functions の実行ログをCSVに出して、実行時間を見える化してみた話

に公開

最近 AWS Step Functions の実行ログを分析する機会があり、「直近〇日分のログを CSV に出して、実行時間も見えるようにしたい!」と思って調べてみました。

が、やってみて分かったことがいくつか。


まず前提として知っておきたいこと

✅ Step Functions には CSV ダウンロード機能がない

マネジメントコンソールからも、「CSVでエクスポート」みたいなボタンは存在しません。
実行ログをエクスポートしたい場合は、自分で CLI や SDK を使って取得する必要があります。

✅ CLI/APIでは「実行時間」は取得できない

startDatestopDate は取得できますが、実行時間(duration)は返ってきません
つまり、自分で stopDate - startDate を計算する必要があります。


やりたいこと

  • 特定の Step Functions の実行履歴を直近60日分取得
  • 開始・終了時間を JST(日本時間)に変換
  • 実行時間を秒で計算して CSV に
  • 最後は Excel で見やすく表示!

やったこと(コマンド)

以下のスクリプトで実現できます。

STATE_MACHINE_ARN="arn:aws:states:ap-northeast-1:1111111111:stateMachine:example-tate-machine"
START_DATE=$(date -d "60 days ago" --utc +%Y-%m-%dT%H:%M:%SZ)

aws stepfunctions list-executions \
  --state-machine-arn "$STATE_MACHINE_ARN" \
  --status-filter "SUCCEEDED" \
  --query "executions[?startDate>='$START_DATE'].[executionArn, status, startDate, stopDate]" \
  --output json | jq -r '.[] | @csv' | awk -F, '{
    gsub(/"/, "", $0);
    if (NR == 1) {
      print "executionArn,status,startDate(JST),stopDate(JST),duration_seconds"
    } else {
      start=$3;
      stop=$4;
      start_jst = strftime("%Y-%m-%d %H:%M:%S", mktime(gensub(/[-T:Z]/, " ", "g", start)) + 9*3600);
      stop_jst = strftime("%Y-%m-%d %H:%M:%S", mktime(gensub(/[-T:Z]/, " ", "g", stop)) + 9*3600);
      duration = mktime(gensub(/[-T:Z]/, " ", "g", stop)) - mktime(gensub(/[-T:Z]/, " ", "g", start));
      print $1 "," $2 "," start_jst "," stop_jst "," duration
    }
  }' > executions.csv

Excelで「実行時間」を見やすく表示

CSV を Excel で開いたら、実行時間の秒数をわかりやすい時間形式に変換しましょう。

おすすめの関数はこちら:

=TEXT(F2/86400, "hh:mm:ss.000")

F2duration_seconds のセルです


出力イメージ

executionArn status startDate(JST) stopDate(JST) duration_seconds duration_formatted
arn:〜 SUCCEEDED 2025-04-10 10:00:00 2025-04-10 10:05:20 320 00:05:20.000

Step Functions の実行時間がひと目で分かると、運用や分析がグッとやりやすくなります。


まとめ

  • Step Functions のログは そのままでは CSV 出力できない
  • CLI/API では duration(実行時間)は取得できない
  • でも startDatestopDate があれば、自力でCSVにして分析は可能!
  • CLIでdurationのフォーマットまで出来てれば良いけど、それは後で見直します

CloudWatch Logs まで見に行かなくても、サクッと確認したいときはこの方法が便利です👍

Discussion