目次

AWS Step Functions 完全ガイド 2026

初心者から実務者向けの包括的解説

AWS Step Functions は、マイクロサービス・MLパイプライン・バッチ処理・長期ワークフローを、ステートマシンベースの サーバーレスオーケストレーション で管理する AWS Application Integration サービスです。AWS Lambda・ECS・SageMaker・Bedrock など 200+ の AWS サービスを、コード不要な宣言型の Amazon States Language(ASL)で統合し、エラーハンドリング・リトライ・条件分岐・並列処理を組み込めます。本ガイドは、初心者から実務者向けに、Step Functions の全貌を体系的に解説するものです。

ドキュメントの目的

本ガイドは以下を対象としています。

  • 初心者向け: Step Functions とは何か、なぜ必要かを学びたい方
  • 開発者向け: ワークフロー定義・Workflow Studio・Lambda 統合を実装したい方
  • DevOps/SRE 向け: Distributed Map での大規模並列処理・エラーハンドリングを構築したい方
  • アーキテクト向け: Airflow・EventBridge・Lambda との使い分け・ベストプラクティス
  • 意思決定者向け: OSS オーケストレーション(Temporal・Airflow)vs Step Functions の投資判断

2026 年の Step Functions エコシステム

  • Distributed Map 拡張:JSONata サポート、Map Run による実行詳細表示、最大 10,000 並列ワーカー
  • Amazon Bedrock 統合:AI エージェントのオーケストレーション、生成 AI パイプライン
  • Variables 機能:ステートマシン内での変数定義・再利用(ASL 拡張)
  • JSONata 式言語:より表現力豊かなデータ変換(従来の States Intrinsic Functions の補完)
  • クロスアカウント実行:マルチテナント・複数 AWS アカウント環境への対応
  • LocalStack・SAM Local 対応:ローカル開発環境でステートマシンをシミュレート
  • Express Workflow 同期実行:API Gateway 統合で REST API として即座に応答
  • Map Run:大規模 Distributed Map の詳細なメトリクス・ログ表示

定義

AWS 公式による定義:

“AWS Step Functions is a serverless, visual orchestration platform that lets you build and run multi-step workflows that combine AWS services, including AWS Lambda, Amazon ECS, AWS Glue, and more.”

複数の AWS サービスをビジュアルにつなぎ、実行状態・エラー・再試行を完全に管理します。

エディション・ワークフロータイプ

Step Functions には 2 つのワークフロータイプ があります:

  • Standard ワークフロー:最大 1 年の実行期間、完全な実行履歴、長期ワークフロー・人間承認向け
  • Express ワークフロー(非同期・同期):最大 5 分、高スループット(100,000/秒)、IoT・イベント駆動向け

Step Functions 自体はマネージドサービスで、エディション分けはありません。


目次

  1. 概要
  2. Step Functions が解決する課題
  3. 主な特徴
  4. アーキテクチャ
  5. ワークフロータイプ(Standard vs Express)
  6. State Types(Pass・Task・Choice・Wait・Parallel・Map・Succeed・Fail)
  7. ASL(Amazon States Language)基礎
  8. Distributed Map(大規模並列処理)
  9. Workflow Studio(ビジュアルエディタ)
  10. 主要ユースケース(10+)
  11. エラーハンドリング(Retry・Catch)
  12. サービス統合(Lambda・ECS・SageMaker・Bedrock・200+ 直接統合)
  13. .sync・.waitForTaskToken
  14. クロスアカウント・クロスリージョン
  15. ロギング・モニタリング(CloudWatch・X-Ray・Map Run)
  16. セキュリティ(IAM・リソースポリシー)
  17. SAGA・SAGA Compensation
  18. Step Functions vs EventBridge vs Lambda + SQS
  19. 他の類似ツールとの比較
  20. クライアントとエコシステム(CDK・SAM・Terraform・Workflow Studio・Local emulator)
  21. ベストプラクティス
  22. トラブルシューティング
  23. 2025-2026 最新動向
  24. 学習リソース
  25. 実装例・活用シーン
  26. 導入ロードマップ
  27. 実装チェックリスト
  28. まとめ
  29. 参考文献

概要

初心者向けメモ: Step Functions は「複数の AWS サービスを接続して、複雑なワークフローを自動化する」プラットフォームです。Lambda 関数を 1 つ呼ぶだけでなく、Lambda → DynamoDB → SQS → SNS という複雑な処理フローを、コードを書かずに JSON/YAML で定義できます。各ステップの失敗時の自動リトライ、条件分岐、並列処理もすべて宣言的に管理できるのが特徴です。

Step Functions の位置づけは以下の通り:

graph TD
    Event[S3アップロード/API呼び出し/EventBridge]
    Event -->|トリガー| StepFunctions[AWS Step Functions]
    
    StepFunctions -->|呼び出し| Lambda[Lambda関数]
    StepFunctions -->|呼び出し| ECS[ECSタスク]
    StepFunctions -->|呼び出し| SageMaker[SageMaker Training]
    StepFunctions -->|呼び出し| DynamoDB[DynamoDB操作]
    StepFunctions -->|呼び出し| Bedrock[Amazon Bedrock]
    
    Lambda --> Result[実行結果]
    ECS --> Result
    SageMaker --> Result
    DynamoDB --> Result
    Bedrock --> Result
    
    Result -->|完了通知| SNS[SNS/SQS]
    Result -->|ダッシュボード| CloudWatch[CloudWatch Logs]

Step Functions が解決する課題

1. 複数 Lambda の接続(Lambda Chaining の問題)

問題: Lambda 関数を複数連鎖させる場合、各関数でエラー処理・リトライ・タイムアウト管理を個別実装する必要があり、コード複雑度が指数関数的に増加します。

// ❌ Lambda Chaining: 各関数でエラー処理を繰り返す
async function lambda1(event) {
  try {
    const result = await callLambda2(event);
    return result;
  } catch (e) {
    // エラー処理・リトライロジック...
  }
}

解決: Step Functions で ASL で宣言的に定義。

{
  "Retry": [{
    "ErrorEquals": ["Lambda.ServiceException"],
    "IntervalSeconds": 2,
    "MaxAttempts": 3,
    "BackoffRate": 2.0
  }],
  "Catch": [{"ErrorEquals": ["States.ALL"], "Next": "HandleError"}]
}

2. 長時間実行ワークフロー(Lambda 15 分制限)

問題: Lambda の最大実行時間は 15 分のため、承認フロー(数日)・ML パイプライン(数時間)・大量データ処理は Lambda だけで実装不可。

解決: Step Functions Standard ワークフロー最大 1 年 の実行期間。Wait for callback で人間の承認待機。

3. AWS サービス統合の煩雑さ

問題: Lambda を仲介して DynamoDB・ECS・SageMaker を呼び出すため、Lambda ボイラープレート・SDK 呼び出し・IAM 権限管理が複雑化。

解決: Step Functions SDK Integration で 220+ AWS サービスを直接オーケストレーション。Lambda を経由しないため、コスト削減・レイテンシー低減。

4. ワークフロー状態の把握困難

問題: Lambda Chaining では「今どのステップの誰が何をしているのか」が不明確。監査ログ・実行履歴が散在。

解決: Step Functions は完全な実行履歴・各ステップの入出力・エラー情報を CloudWatch Logs・X-Ray で一元管理。


主な特徴

特徴 説明
宣言的ワークフロー定義 Amazon States Language(ASL)で JSON/YAML で複雑なフロー定義
200+ AWS サービス直接統合 Lambda・ECS・DynamoDB・SageMaker・Bedrock・SNS・SQS・Glue・Athena・EventBridge 等
エラーハンドリング組み込み Retry(指数バックオフ)・Catch(エラーキャッチ)を宣言的に定義
条件分岐(Choice ステート) if/else・複数条件分岐を ASL で表現
並列処理(Parallel / Distributed Map) Parallel:複数ブランチ並列実行。Distributed Map:100M+ アイテムの並列処理(最大 10,000 ワーカー)
長期実行ワークフロー Standard:最大 1 年(監査ログ 90 日保持)。Express:最大 5 分(高スループット)
人間承認(Wait for Callback) .waitForTaskToken でトークン発行、外部システムからコールバックで再開
ビジュアルエディタ Workflow Studio でドラッグ&ドロップ定義・デバッグ・単体テスト
実行履歴・監査ログ CloudWatch Logs・X-Ray・CloudTrail で完全なエビデンス
価格効率性 Standard 0.025/1,000 状態遷移(月 4,000 は無料)。Express 1/100 万実行 + $0.00001667/GB-秒

アーキテクチャ

初心者向けメモ: Step Functions は 3 層構造 です。イベント(S3・EventBridge)から Step Functions が起動され、各ステートで AWS サービス(Lambda・ECS・DynamoDB)を呼び出し、結果を次のステートに渡します。「Step Functions 自体はデータを保存しない」のが重要で、状態・入出力はすべて CloudWatch Logs・実行履歴に記録されます。

graph TD
    subgraph Trigger[イベントトリガー]
        S3[S3アップロード]
        EventBridge[EventBridge ルール]
        API[API Gateway]
        Others[その他イベント]
    end
    
    subgraph Core[Step Functions コア]
        ASL["Amazon States Language<br/>ステートマシン定義"]
        Engine["実行エンジン<br/>(状態管理・遷移制御)"]
        Retry["リトライ・エラー処理<br/>(Retry / Catch)"]
    end
    
    subgraph Services[AWS サービス統合層]
        Lambda[Lambda]
        ECS[ECS / Fargate]
        DynamoDB[DynamoDB]
        SageMaker[SageMaker]
        Bedrock[Bedrock]
        Others2["SNS / SQS / Glue<br/>200+ サービス"]
    end
    
    subgraph Monitoring[ロギング・モニタリング]
        CloudWatch["CloudWatch Logs<br/>(実行ログ)"]
        XRay["AWS X-Ray<br/>(分散トレース)"]
        History["実行履歴<br/>(90日保持)"]
    end
    
    Trigger --> Core
    Core --> Services
    Services --> Retry
    Retry -->|成功| Core
    Retry -->|失敗| Engine
    Core --> Monitoring

アーキテクチャの各層

1. イベントトリガー層

  • S3 バケットへのアップロード(S3 イベント通知)
  • EventBridge ルール(スケジュール・カスタムイベント)
  • API Gateway REST API
  • SNS・SQS メッセージ
  • CloudWatch イベント(スケジュール実行)
  • 手動実行(AWS コンソール・CLI・SDK)

2. Step Functions コア層

  • ASL 定義:JSON/YAML でステートマシン定義
  • 実行エンジン:ステート間の遷移制御・状態管理
  • リトライ・エラー処理:指数バックオフ・Catch ハンドラー

3. AWS サービス統合層

  • 直接統合(SDK Integration):arn:aws:states:::service:action
  • Lambda 仲介:arn:aws:lambda:region:account:function:name
  • HTTP エンドポイントhttps://example.com/api

4. ロギング・モニタリング層

  • CloudWatch Logs:詳細ログ、カスタムログフィルター
  • X-Ray:分散トレース、パフォーマンス分析
  • 実行履歴:ステップごとの入出力・タイムスタンプ

ワークフロータイプ(Standard vs Express)

観点 Standard ワークフロー Express ワークフロー
最大実行時間 1 年 5 分
実行履歴保持 ✅ 完全な監査ログ(90 日) ❌ CloudWatch Logs のみ
実行開始レート 2,000/秒 100,000/秒
デリバリー保証 正確に 1 回(Exactly-Once) 少なくとも 1 回(At-Least-Once, 非同期)/ 最大 1 回(At-Most-Once, 同期)
価格 `0.025/1,000 状態遷移(月 4,000 無料) `1/100 万実行 + $0.00001667/GB-秒
適用シーン 長期ワークフロー・人間承認・監査必要 高スループット・短期処理・IoT イベント
実行例 注文フロー(数日)・ML パイプライン・承認フロー ストリーム処理・リアルタイム分析・API レスポンス
.waitForTaskToken ✅ サポート ✅ サポート(非同期のみ)
Distributed Map ✅ サポート ✅ サポート

選択ガイド

Standard を選ぶ場合:

  • ✅ ワークフロー期間が 5 分を超える
  • ✅ 人間による承認ステップが含まれる
  • ✅ 監査ログ・完全な実行履歴が必要
  • ✅ Exactly-Once デリバリー保証が必要
  • ✅ 実行レート 2,000/秒以下

Express を選ぶ場合:

  • ✅ ワークフロー期間が 5 分以内
  • ✅ 100,000/秒 の高スループット必要
  • ✅ マイクロサービス・イベント駆動
  • ✅ 非同期バックグラウンド処理
  • ✅ At-Least-Once デリバリーで許容

State Types

Step Functions には 8 つの主要ステートタイプ があります。

1. Task ステート

説明: AWS サービス・Lambda・HTTP エンドポイント・アクティビティを呼び出して処理を実行。

{
  "Type": "Task",
  "Resource": "arn:aws:states:::lambda:invoke",
  "Parameters": {
    "FunctionName": "MyFunction",
    "Payload.{{CONTENT}}quot;: "{{CONTENT}}quot;
  },
  "Next": "ProcessResult"
}

パターン:

  • arn:aws:lambda:region:account:function:name:Lambda 関数
  • arn:aws:states:::sqs:sendMessage:SQS メッセージ送信
  • arn:aws:states:::dynamodb:putItem:DynamoDB 書き込み
  • arn:aws:states:::ecs:runTask.sync:2:ECS タスク(同期待機)
  • https://example.com/api:HTTP(S) エンドポイント

2. Choice ステート

説明: 入力データに基づいて条件分岐。if/else 相当。

{
  "Type": "Choice",
  "Choices": [
    {
      "Variable": "$.order.total",
      "NumericGreaterThan": 1000,
      "Next": "ProcessLargeOrder"
    },
    {
      "Variable": "$.order.status",
      "StringEquals": "VIP",
      "Next": "ProcessVIP"
    }
  ],
  "Default": "ProcessNormalOrder"
}

比較演算子:

  • StringEqualsNumericEqualsBooleanEquals
  • StringMatches(正規表現)
  • NumericGreaterThanNumericLessThanNumericGreaterThanEqualsNumericLessThanEquals
  • AndOrNot(複合条件)

3. Wait ステート

説明: 固定秒数待機、または特定の日時まで待機。

{
  "Type": "Wait",
  "Seconds": 300,
  "Next": "ProcessAfterWait"
}

または

{
  "Type": "Wait",
  "Timestamp": "2026-12-25T00:00:00Z",
  "Next": "ProcessOnDate"
}

4. Parallel ステート

説明: 複数のブランチを並列実行し、すべて完了まで待機。

{
  "Type": "Parallel",
  "Branches": [
    {
      "StartAt": "CheckInventory",
      "States": {
        "CheckInventory": {
          "Type": "Task",
          "Resource": "arn:aws:states:::lambda:invoke",
          "End": true
        }
      }
    },
    {
      "StartAt": "ProcessPayment",
      "States": {
        "ProcessPayment": {
          "Type": "Task",
          "Resource": "arn:aws:states:::dynamodb:putItem",
          "End": true
        }
      }
    }
  ],
  "Next": "CombineResults"
}

5. Map ステート / Distributed Map

説明: 配列の各要素を反復処理。Distributed Map で最大 100M アイテム・10,000 並列ワーカー対応。

{
  "Type": "Map",
  "ItemsPath": "$.items",
  "MaxConcurrency": 10,
  "Iterator": {
    "StartAt": "ProcessItem",
    "States": {
      "ProcessItem": {
        "Type": "Task",
        "Resource": "arn:aws:states:::lambda:invoke",
        "End": true
      }
    }
  },
  "Next": "Succeeded"
}

Distributed Map(大規模並列処理):

{
  "Type": "Map",
  "ItemReader": {
    "Resource": "arn:aws:states:::s3:getObject",
    "Parameters": {
      "Bucket": "my-bucket",
      "Key": "data.csv"
    }
  },
  "MaxItemsPath": "$.maxItems",
  "MaxConcurrency": 10000,
  "TolerateFailureCount": 100,
  "Iterator": {
    "StartAt": "ProcessCSVRow",
    "States": {
      "ProcessCSVRow": {
        "Type": "Task",
        "Resource": "arn:aws:lambda:region:account:function:process",
        "End": true
      }
    }
  }
}

6. Pass ステート

説明: 入力データを変換して次のステートに渡す。処理実行しない(デバッグ・データ加工用)。

{
  "Type": "Pass",
  "Parameters": {
    "orderId.{{CONTENT}}quot;: "$.id",
    "total.{{CONTENT}}quot;: "States.MathAdd($.price, $.tax)",
    "timestamp": "2026-04-26T00:00:00Z"
  },
  "Next": "ProcessOrder"
}

7. Succeed ステート

説明: ワークフロー成功終了。

{
  "Type": "Succeed"
}

8. Fail ステート

説明: ワークフロー失敗終了。エラーコード・メッセージ指定。

{
  "Type": "Fail",
  "Error": "InvalidOrderError",
  "Cause": "Order total exceeds credit limit"
}

ステートタイプ比較表

ステート 用途 処理実行 データ変換
Task AWS サービス呼び出し ❌(結果は出力)
Choice 条件分岐
Wait 遅延実行
Parallel 並列実行 ✅(複数ブランチ)
Map 反復処理 ✅(イテレーション)
Pass データ加工
Succeed 成功終了
Fail 失敗終了

ASL(アマゾンステーツランゲージ)基礎

ASL とは

Amazon States Language(ASL)は JSON/YAML ベースの 宣言型ワークフロー定義言語。ステートマシン全体の構造・各ステートの処理内容・エラーハンドリング・入出力変換を記述します。

基本構造

{
  "Comment": "Order processing workflow",
  "StartAt": "ValidateOrder",
  "States": {
    "ValidateOrder": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Parameters": {
        "FunctionName": "validate-order",
        "Payload.{{CONTENT}}quot;: "{{CONTENT}}quot;
      },
      "Next": "CheckInventory",
      "Retry": [
        {
          "ErrorEquals": ["Lambda.ServiceException"],
          "IntervalSeconds": 2,
          "MaxAttempts": 3,
          "BackoffRate": 2.0
        }
      ],
      "Catch": [
        {
          "ErrorEquals": ["InvalidOrderError"],
          "Next": "NotifyFailure",
          "ResultPath": "$.errorInfo"
        }
      ]
    },
    "CheckInventory": {
      "Type": "Task",
      "Resource": "arn:aws:states:::dynamodb:getItem",
      "Parameters": {
        "TableName": "Inventory",
        "Key": {
          "ProductId": {
            "S.{{CONTENT}}quot;: "$.productId"
          }
        }
      },
      "Next": "ProcessPayment"
    },
    "ProcessPayment": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sqs:sendMessage",
      "Parameters": {
        "QueueUrl": "https://sqs.ap-northeast-1.amazonaws.com/123456789/payment-queue",
        "MessageBody.{{CONTENT}}quot;: "States.JsonToString($.order)"
      },
      "End": true
    },
    "NotifyFailure": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sns:publish",
      "Parameters": {
        "TopicArn": "arn:aws:sns:ap-northeast-1:123456789:order-alerts",
        "Message.{{CONTENT}}quot;: "States.Format('Order {} failed: {}', $.orderId, $.errorInfo.Cause)"
      },
      "End": true
    }
  }
}

入出力処理(InputPath / OutputPath / ResultPath / Parameters)

ASL でのデータフロー制御:

属性 説明
InputPath 入力データの一部のみを次のステートに渡す “InputPath”: “.order” ← ``.order オブジェクトのみ
OutputPath ステート出力の一部のみを次のステートに渡す “OutputPath”: “$.result” ← 結果の result フィールドのみ
ResultPath タスク結果を元の入力のどこにマージするか “ResultPath”: “$.processResult” ← 元データを保持
Parameters 入力を加工してタスク引数に渡す "Parameters": {"id.": ".id", "name": "fixed"}

例:

{
  "StartAt": "EnrichData",
  "States": {
    "EnrichData": {
      "Type": "Pass",
      "InputPath": "$.customer",
      "Parameters": {
        "id.{{CONTENT}}quot;: "$.id",
        "name.{{CONTENT}}quot;: "$.name",
        "timestamp": "2026-04-26T00:00:00Z",
        "status": "processed"
      },
      "ResultPath": "$.enriched",
      "OutputPath": "{{CONTENT}}quot;,
      "Next": "SaveToDatabase"
    },
    "SaveToDatabase": {
      "Type": "Task",
      "Resource": "arn:aws:states:::dynamodb:putItem",
      "End": true
    }
  }
}

組み込み関数(Intrinsic Functions)

ASL で利用可能な関数:

関数 説明
States.Format 文字列フォーマット States.Format('Order {}: {}', .id, .status)
States.StringToJson 文字列 → JSON パース States.StringToJson($.jsonString)
States.JsonToString JSON → 文字列化 States.JsonToString(States.JsonToString(.object)$
States.JsonMerge 2 つの JSON をマージ States.JsonMerge(.obj1, .obj2)
States.ArrayGetItem 配列要素取得 States.ArrayGetItem($.items, 0)
States.ArrayLength 配列長取得 States.ArrayLength($.items)
States.ArrayContains 配列に要素が含まれるか States.ArrayContains($.items, 'value')
States.MathAdd 数値加算 States.MathAdd(.price, .tax)
States.MathSubtract 数値減算 States.MathSubtract(.total, .discount)
States.UUID UUID 生成 States.UUID()

JSONata サポート(2026 新機能)

より表現力豊かなデータ変換を実現:

{
  "Type": "Pass",
  "Parameters": {
    "totalPrice.{{CONTENT}}quot;: "$.items.{\"quantity\": $.qty, \"price\": $.unitPrice}} | $sum(price * quantity)",
    "highValueItems.{{CONTENT}}quot;: "$.items[price > 1000]"
  }
}

Distributed Map(大規模並列処理)

概要

Distributed Map は、100M 以上のアイテムを最大 10,000 並列ワーカーで処理 できる Step Functions の機能。CSV・JSON Lines・Parquet ファイルなど、S3 から直接読み込んで大規模バッチ処理を実施。

ユースケース

  • 10 億レコードの ETL(Extract-Transform-Load)
  • 複数リージョン・アカウントへの一括デプロイ
  • 大規模画像・動画・ドキュメント処理
  • 機械学習トレーニングデータの並列前処理

ASL 例

{
  "Comment": "Distributed Map for large-scale data processing",
  "StartAt": "ProcessCSVFromS3",
  "States": {
    "ProcessCSVFromS3": {
      "Type": "Map",
      "ItemReader": {
        "Resource": "arn:aws:states:::s3:getObject",
        "Parameters": {
          "Bucket": "my-data-bucket",
          "Key": "large-dataset.csv"
        },
        "ReaderConfig": {
          "InputType": "CSV",
          "CSVHeaderLocation": "FIRST_ROW"
        }
      },
      "MaxConcurrency": 10000,
      "MaxItemsPath": "$.maxItems",
      "TolerateFailureCount": 1000,
      "Iterator": {
        "StartAt": "TransformRow",
        "States": {
          "TransformRow": {
            "Type": "Task",
            "Resource": "arn:aws:states:::lambda:invoke",
            "Parameters": {
              "FunctionName": "transform-csv-row",
              "Payload.{{CONTENT}}quot;: "{{CONTENT}}quot;
            },
            "ResultPath": "$.transformedData",
            "Next": "SaveToS3"
          },
          "SaveToS3": {
            "Type": "Task",
            "Resource": "arn:aws:states:::s3:putObject",
            "Parameters": {
              "Bucket": "my-output-bucket",
              "Key.{{CONTENT}}quot;: "States.Format('output/{}/{}', $.id, States.UUID())",
              "Body.{{CONTENT}}quot;: "States.JsonToString($.transformedData)"
            },
            "End": true
          }
        }
      },
      "Next": "NotifyCompletion"
    },
    "NotifyCompletion": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sns:publish",
      "Parameters": {
        "TopicArn": "arn:aws:sns:ap-northeast-1:123456789:data-processing",
        "Message": "Distributed Map processing completed"
      },
      "End": true
    }
  }
}

Map Run

Map Run は、Distributed Map 実行の詳細メトリクス・ログを取得・分析するための機能。CloudWatch で並列度・処理時間・エラー率を可視化。


Workflow Studio(ビジュアルエディタ)

概要

AWS コンソール上で ドラッグ&ドロップ でステートマシンを構築。JSON ASL との双方向同期により、ビジュアルと ASL コードを同時に編集可能。

主な機能

機能 説明
キャンバス ステートを配置・接続してフローを構築
プロパティパネル 選択したステートの設定(Resource・Retry・Catch 等)を編集
ASL エディタ 左側に JSON コード編集(リアルタイム同期)
検証 エラーをリアルタイム表示(リソース ARN の形式等)
デバッグ テスト実行で入力データを指定、ステップごとの出力確認
Mock サービス 外部サービス呼び出しをモック化してローカルテスト

ワークフロー

  1. Create state machine → Workflow Studio を選択
  2. キャンバスに Task ステート配置 → リソース選択(Lambda・ECS 等)
  3. プロパティパネルで設定 → Retry・Catch・InputPath・OutputPath
  4. ASL エディタで細部調整 → Parameters・組み込み関数
  5. Test execution → テストデータで実行・デバッグ
  6. デプロイ → Create state machine で確定

主要ユースケース

1. E-Commerce Order Processing(注文処理フロー)

graph TD
    Order[注文受信]
    Order -->|ValidateOrder| Validate{有効か?}
    Validate -->|Yes| Check[在庫確認]
    Validate -->|No| Fail[キャンセル]
    Check -->|OK| Parallel["並列処理"]
    Check -->|NG| Refund[払戻]
    
    Parallel -->|Branch1| Payment[決済処理]
    Parallel -->|Branch2| Notify[在庫減少通知]
    Parallel -->|Branch3| Log[ログ記録]
    
    Payment -->|成功| Shipping[配送手配]
    Payment -->|失敗| CompensatePayment[補償処理]
    
    Shipping --> Notify2[完了通知]
    Notify2 --> End[終了]

実装:

  • Validate Order(Lambda)
  • Check Inventory(DynamoDB)
  • Process Payment(SQS + Lambda)
  • Arrange Shipping(ECS タスク)
  • Compensating Transaction(ロールバック)

2. Machine Learning Pipeline(ML パイプライン)

  • Data Preparation(Glue ジョブ)
  • Feature Engineering(Lambda)
  • Model Training(SageMaker Training Job)
  • Model Evaluation(Lambda)
  • Conditional Deployment(Choice + SageMaker Endpoint)

3. Approval Workflow(人間承認フロー)

  • Request Submit → DynamoDB 保存
  • Send Approval Request → SNS → Approver Email(.waitForTaskToken)
  • Wait for Callback → トークン返却待機
  • Resume Workflow → アカウント有効化

4. SAGA Pattern(分散トランザクション)

複数マイクロサービスの一貫性を Step Functions で管理:

  • Order Service → Payment Service → Shipping Service
  • 失敗時は補償トランザクション(Refund・Cancel Shipping)

5. Data Migration(データ移行)

  • S3 から CSV 読み込み
  • Distributed Map で 100M レコード並列処理
  • DynamoDB・Redshift へ一括書き込み

6. CI/CD Pipeline Orchestration

  • Code Build ジョブ起動
  • 複数リージョンへの並列デプロイ(Parallel)
  • 自動テスト実行
  • デプロイ成功・失敗通知

7. IoT データ処理(ストリーム処理)

Express Workflow で IoT デバイスからの高頻度イベント処理:

  • センサーデータ入力 → EventBridge トリガー
  • Lambda で異常検知
  • リアルタイム通知

8. Bedrock AI Agent Orchestration

AI エージェント(Anthropic Claude など)を利用した複雑なワークフロー:

  • ユーザー入力 → Bedrock の Claude API 呼び出し
  • Claude の出力に基づく条件分岐
  • 外部 API 呼び出し(Web 検索・ツール実行)

9. Scheduled Batch Processing(スケジュール実行)

CloudWatch Events で定期実行:

  • 毎日 22:00 に開始
  • 大規模ログ分析(Athena)
  • レポート生成(QuickSight)
  • メール配信(SES)

10. Event-Driven Microservice Orchestration

複数マイクロサービスの連携:

  • EventBridge → Step Functions
  • REST API マイクロサービス呼び出し(HTTP(S)Task)
  • 非同期処理(SQS キュー)
  • 最終結果通知(SNS)

エラーハンドリング(Retry/Catch)

Retry(自動リトライ)

タスク失敗時に自動的に再試行。指数バックオフ&ジッタで分散化。

{
  "Type": "Task",
  "Resource": "arn:aws:states:::lambda:invoke",
  "Retry": [
    {
      "ErrorEquals": ["Lambda.ServiceException"],
      "IntervalSeconds": 1,
      "MaxAttempts": 3,
      "BackoffRate": 2.0,
      "JitterStrategy": "FULL"
    },
    {
      "ErrorEquals": ["States.Timeout"],
      "IntervalSeconds": 5,
      "MaxAttempts": 1
    }
  ],
  "Next": "ProcessResult"
}

リトライスケジュール例(IntervalSeconds=1, BackoffRate=2.0, MaxAttempts=3):

  • 1 回目失敗 → 1 秒待機 → 再試行
  • 2 回目失敗 → 2 秒待機 → 再試行
  • 3 回目失敗 → 4 秒待機 → 再試行
  • すべて失敗 → Catch に遷移

Catch(エラーキャッチ)

特定のエラーをキャッチして別のステートに遷移。

{
  "Type": "Task",
  "Resource": "arn:aws:states:::lambda:invoke",
  "Catch": [
    {
      "ErrorEquals": ["InvalidOrderError"],
      "Next": "HandleInvalidOrder",
      "ResultPath": "$.error"
    },
    {
      "ErrorEquals": ["States.ALL"],
      "Next": "HandleGenericError",
      "ResultPath": "$.allErrors"
    }
  ],
  "End": true
}

組み込みエラー:

  • States.ALL → すべてのエラー
  • States.TaskFailed → タスク失敗
  • States.Timeout → タイムアウト
  • States.HeartbeatTimeout → ハートビートタイムアウト
  • States.BranchFailed → 並列ブランチ失敗
  • States.NoChoiceMatched → Choice ステートでマッチなし

Retry と Catch の組み合わせ

{
  "Type": "Task",
  "Resource": "arn:aws:states:::ecs:runTask.sync:2",
  "Retry": [
    {
      "ErrorEquals": ["States.TaskFailed"],
      "IntervalSeconds": 10,
      "MaxAttempts": 2,
      "BackoffRate": 1.5
    }
  ],
  "Catch": [
    {
      "ErrorEquals": ["States.ALL"],
      "Next": "SendAlertAndFail",
      "ResultPath": "$.failureDetails"
    }
  ],
  "Next": "ProcessSuccess"
}

サービス統合

直接統合パターン(SDK Integration)

Step Functions から Lambda を経由せずに AWS サービスを直接呼び出し。arn:aws:states:::service:action 形式。

Lambda 統合

{
  "Type": "Task",
  "Resource": "arn:aws:states:::lambda:invoke",
  "Parameters": {
    "FunctionName": "my-function",
    "Payload.{{CONTENT}}quot;: "{{CONTENT}}quot;
  }
}

DynamoDB 統合

{
  "Type": "Task",
  "Resource": "arn:aws:states:::dynamodb:putItem",
  "Parameters": {
    "TableName": "Orders",
    "Item": {
      "OrderId": {
        "S.{{CONTENT}}quot;: "$.orderId"
      },
      "Status": {
        "S": "pending"
      }
    }
  }
}

ECS Task 実行

{
  "Type": "Task",
  "Resource": "arn:aws:states:::ecs:runTask.sync:2",
  "Parameters": {
    "LaunchType": "FARGATE",
    "Cluster": "my-cluster",
    "TaskDefinition": "my-task",
    "NetworkConfiguration": {
      "AwsvpcConfiguration": {
        "Subnets": ["subnet-abc123"],
        "SecurityGroups": ["sg-xyz789"]
      }
    }
  }
}

SQS メッセージ送信

{
  "Type": "Task",
  "Resource": "arn:aws:states:::sqs:sendMessage",
  "Parameters": {
    "QueueUrl": "https://sqs.ap-northeast-1.amazonaws.com/123456789/queue-name",
    "MessageBody.{{CONTENT}}quot;: "States.JsonToString($.message)"
  }
}

SNS 通知

{
  "Type": "Task",
  "Resource": "arn:aws:states:::sns:publish",
  "Parameters": {
    "TopicArn": "arn:aws:sns:ap-northeast-1:123456789:topic-name",
    "Message.{{CONTENT}}quot;: "States.Format('Order {} status: {}', $.orderId, $.status)"
  }
}

SageMaker Training Job

{
  "Type": "Task",
  "Resource": "arn:aws:states:::sagemaker:createTrainingJob.sync:2",
  "Parameters": {
    "TrainingJobName.{{CONTENT}}quot;: "States.Format('job-{}', States.UUID())",
    "RoleArn": "arn:aws:iam::123456789:role/SageMaker",
    "AlgorithmSpecification": {
      "TrainingImage": "382416733822.dkr.ecr.ap-northeast-1.amazonaws.com/xgboost:latest",
      "TrainingInputMode": "File"
    },
    "InputDataConfig": [{
      "ChannelName": "training",
      "DataSource": {
        "S3DataSource": {
          "S3Uri": "s3://my-bucket/training-data/",
          "S3DataType": "S3Prefix",
          "S3DataDistributionType": "FullyReplicated"
        }
      }
    }],
    "OutputDataConfig": {
      "S3OutputPath": "s3://my-bucket/model-output/"
    },
    "ResourceConfig": {
      "InstanceType": "ml.m5.xlarge",
      "InstanceCount": 1,
      "VolumeSizeInGB": 30
    },
    "StoppingCondition": {
      "MaxRuntimeInSeconds": 3600
    }
  }
}

Amazon Bedrock (Claude AI) 統合

{
  "Type": "Task",
  "Resource": "arn:aws:states:::bedrock:invokeModel",
  "Parameters": {
    "ModelId": "anthropic.claude-3-5-sonnet-20241022-v2:0",
    "Body.{{CONTENT}}quot;: "States.JsonToString({\"messages\": [{\"role\": \"user\", \"content\": \"Analyze: $.text\"}], \"max_tokens\": 1024})"
  },
  "Next": "ProcessAIOutput"
}

サポートされる統合(主要 200+ サービス)

サービス Resource パターン 説明
Lambda arn:aws:states:::lambda:invoke Lambda 関数呼び出し
ECS arn:aws:states:::ecs:runTask.sync:2 ECS タスク実行(同期)
DynamoDB arn:aws:states:::dynamodb:putItem アイテム書き込み
SQS arn:aws:states:::sqs:sendMessage メッセージ送信
SNS arn:aws:states:::sns:publish トピック発行
S3 arn:aws:states:::s3:getObject オブジェクト取得
Glue arn:aws:states:::glue:startJobRun.sync:2 Glue ジョブ実行
SageMaker arn:aws:states:::sagemaker:createTrainingJob.sync:2 学習ジョブ実行
Bedrock arn:aws:states:::bedrock:invokeModel LLM 推論
Athena arn:aws:states:::athena:startQueryExecution.sync:2 クエリ実行
CodeBuild arn:aws:states:::codebuild:startBuild.sync:2 ビルド実行
HTTP(S) https://example.com/api HTTP エンドポイント呼び出し
EventBridge arn:aws:states:::events:putEvents イベント送信
StepFunctions arn:aws:states:::states:startExecution.sync:2 別ワークフロー実行
…その他 200+ サービス

.sync / .waitForTaskToken

.sync:2(同期待機)

Task リソースの末尾に .sync:2 を付けることで、タスク完了まで 同期的に待機

{
  "Type": "Task",
  "Resource": "arn:aws:states:::ecs:runTask.sync:2",
  "Parameters": {
    "Cluster": "my-cluster",
    "TaskDefinition": "my-task"
  },
  "Next": "ProcessResult"
}

動作:

  1. ECS タスク起動
  2. タスク完了まで待機(ステートマシン停止)
  3. タスク結果を入力として次のステートに渡す

.waitForTaskToken(コールバック待機)

外部システムからのコールバックを待機する。トークンを外部に渡し、処理完了後に SendTaskSuccess または SendTaskFailure API でトークンを返却して再開。

{
  "Type": "Task",
  "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken",
  "Parameters": {
    "QueueUrl": "https://sqs.ap-northeast-1.amazonaws.com/123456789/approval-queue",
    "MessageBody": {
      "approvalRequest": "User onboarding",
      "taskToken.{{CONTENT}}quot;: "$.Task.Token"
    }
  },
  "Next": "AccountActivation"
}

使用例:人間承認フロー

  1. SNS/Email で承認者にリクエスト送信(taskToken 含む)
  2. 承認者が URL をクリック → API Gateway → Lambda 呼び出し
  3. Lambda が SendTaskSuccess で taskToken を返却
  4. Step Functions 再開 → 次のステートへ
import boto3

sfn_client = boto3.client('stepfunctions')

def approve_workflow(event, context):
    task_token = event['taskToken']
    
    # 承認処理
    response = sfn_client.send_task_success(
        taskToken=task_token,
        output='{"approved": true}'
    )
    return {'statusCode': 200}

クロスアカウント・クロスリージョン

クロスアカウント実行

別の AWS アカウントから Step Functions ワークフローを実行。AssumeRole で権限委譲。

{
  "Type": "Task",
  "Resource": "arn:aws:states:region:ACCOUNT-B:stateMachine:MyStateMachine",
  "RoleArn": "arn:aws:iam::ACCOUNT-A:role/StepFunctionsAssumeRole",
  "Next": "ProcessResult"
}

IAM 設定:

Account A(実行元)のロール:

{
  "Effect": "Allow",
  "Action": "sts:AssumeRole",
  "Resource": "arn:aws:iam::ACCOUNT-B:role/StepFunctionsService"
}

Account B(実行先)のトラストリレーションシップ:

{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::ACCOUNT-A:role/StepFunctionsService"
  },
  "Action": "sts:AssumeRole"
}

クロスリージョン実行

別のリージョンへのワークフロー実行も同様に Resource ARN 指定:

{
  "Type": "Task",
  "Resource": "arn:aws:states:us-west-2:123456789:stateMachine:GlobalWorkflow",
  "Next": "CheckResult"
}

ロギング・モニタリング

CloudWatch Logs

Step Functions 実行ログをリアルタイムで記録。

設定:

{
  "StateMachineArn": "arn:aws:states:ap-northeast-1:123456789:stateMachine:MyWorkflow",
  "LoggingConfiguration": {
    "Level": "ALL",
    "IncludeExecutionData": true,
    "Destinations": [
      {
        "CloudWatchLogsLogGroup": {
          "LogGroupName": "/aws/stepfunctions/my-workflow"
        }
      }
    ]
  }
}

ログレベル:

  • ALL → すべてのイベント(詳細)
  • ERROR → エラーのみ
  • FATAL → 致命的エラーのみ
  • OFF → ロギング無効

X-Ray(分散トレース)

Step Functions 実行を X-Ray で可視化。各ステートの実行時間・エラーを分析。

設定:

{
  "StateMachineArn": "arn:aws:states:ap-northeast-1:123456789:stateMachine:MyWorkflow",
  "TracingConfiguration": {
    "Enabled": true
  }
}

実行履歴

AWS コンソールで各ステップの入出力・タイムスタンプを確認(90 日保持)。

Map Run

Distributed Map の詳細メトリクスを CloudWatch で表示:

  • 並列度(実行中のワーカー数)
  • 処理時間分布
  • エラー率

セキュリティ

IAM ロールと権限

Step Functions に関連するロール:

Step Functions 実行ロール

ワークフロー内でサービス呼び出しを行うための権限:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "lambda:InvokeFunction",
        "dynamodb:PutItem",
        "sqs:SendMessage",
        "sns:Publish"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "iam:PassRole",
      "Resource": "arn:aws:iam::123456789:role/*"
    }
  ]
}

API 呼び出し時のロール

Step Functions API を呼び出すユーザー・ロール:

{
  "Effect": "Allow",
  "Action": [
    "states:StartExecution",
    "states:DescribeExecution",
    "states:GetExecutionHistory"
  ],
  "Resource": "arn:aws:states:ap-northeast-1:123456789:stateMachine:MyWorkflow"
}

リソースポリシー

ワークフローへのアクセスをリソースレベルで制限:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "states:StartExecution",
      "Resource": "arn:aws:states:ap-northeast-1:123456789:stateMachine:MyWorkflow"
    }
  ]
}

暗号化

  • 実行履歴:CloudWatch Logs KMS 暗号化対応
  • ログデータ:X-Ray、CloudWatch Logs ネイティブ暗号化

SAGA・SAGA Compensation

SAGA パターン

複数の分散トランザクション間で一貫性を保証。各ステップの失敗時に補償トランザクション(ロールバック)を実行。

例:E-Commerce Order Processing

{
  "Comment": "SAGA Pattern for Order Processing",
  "StartAt": "ReserveInventory",
  "States": {
    "ReserveInventory": {
      "Type": "Task",
      "Resource": "arn:aws:states:::dynamodb:updateItem",
      "Parameters": {
        "TableName": "Inventory",
        "Key": {"ProductId": {"S.{{CONTENT}}quot;: "$.productId"}},
        "UpdateExpression": "SET InventoryCount = InventoryCount - :qty",
        "ExpressionAttributeValues": {
          ":qty": {"N.{{CONTENT}}quot;: "$.quantity"}
        }
      },
      "Next": "ProcessPayment",
      "Catch": [{
        "ErrorEquals": ["States.ALL"],
        "Next": "ReserveInventoryFailed"
      }]
    },
    "ProcessPayment": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sqs:sendMessage",
      "Parameters": {
        "QueueUrl": "https://sqs.ap-northeast-1.amazonaws.com/123456789/payment-queue",
        "MessageBody.{{CONTENT}}quot;: "States.JsonToString($.paymentInfo)"
      },
      "Next": "ArrangeShipping",
      "Catch": [{
        "ErrorEquals": ["States.ALL"],
        "Next": "CompensateInventory"
      }]
    },
    "ArrangeShipping": {
      "Type": "Task",
      "Resource": "arn:aws:states:::ecs:runTask.sync:2",
      "Parameters": {
        "Cluster": "shipping-cluster",
        "TaskDefinition": "ship-order"
      },
      "Next": "OrderSuccess",
      "Catch": [{
        "ErrorEquals": ["States.ALL"],
        "Next": "CompensatePayment"
      }]
    },
    "OrderSuccess": {
      "Type": "Succeed"
    },
    "CompensateInventory": {
      "Type": "Task",
      "Resource": "arn:aws:states:::dynamodb:updateItem",
      "Parameters": {
        "TableName": "Inventory",
        "Key": {"ProductId": {"S.{{CONTENT}}quot;: "$.productId"}},
        "UpdateExpression": "SET InventoryCount = InventoryCount + :qty",
        "ExpressionAttributeValues": {
          ":qty": {"N.{{CONTENT}}quot;: "$.quantity"}
        }
      },
      "Next": "InventoryRolledBack"
    },
    "CompensatePayment": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sns:publish",
      "Parameters": {
        "TopicArn": "arn:aws:sns:ap-northeast-1:123456789:payment-refund",
        "Message.{{CONTENT}}quot;: "States.JsonToString($.paymentInfo)"
      },
      "Next": "CompensateInventory"
    },
    "InventoryRolledBack": {
      "Type": "Fail",
      "Error": "OrderFailed",
      "Cause": "Compensation completed"
    },
    "ReserveInventoryFailed": {
      "Type": "Fail",
      "Error": "InsufficientInventory"
    }
  }
}

Step Functions vs EventBridge vs Lambda + SQS

観点 Step Functions EventBridge Lambda + SQS
用途 複雑なワークフロー・長期実行 イベント駆動・ルーティング 非同期メッセージ処理
構文 ASL(宣言型) イベントマッピング Lambda コード
実行時間 最大 1 年(Standard) リアルタイム(< 1 秒) 15 分(Lambda 制限)
状態管理 ✅ 完全な履歴・状態保持 ❌ ステートレス ❌ アプリで管理
エラーハンドリング ✅ Retry・Catch 組み込み ❌ 手動実装 ❌ 手動実装
並列処理 ✅ Parallel・Map ❌ ターゲット単位 ❌ アプリで管理
監査ログ ✅ 90 日保持 ✅ CloudTrail ❌ CloudWatch Logs のみ
価格 `0.025/1k 遷移 `1/100 万リクエスト Lambda + SQS 従量課金

使い分け:

  • Step Functions → 注文フロー・ML パイプライン・承認フロー・SAGA パターン
  • EventBridge → S3 イベント → 複数ターゲット。API・イベント駆動。
  • Lambda + SQS → シンプルな非同期処理・ワーカープール。

他の類似ツールとの比較

ツール メリット デメリット 用途
Step Functions AWS ネイティブ・200+ 統合・監査ログ AWS のみ・学習曲線 AWS エコシステム内の複雑ワークフロー
Apache Airflow / MWAA Python DAG・豊富なオペレーター・コミュニティ インフラ管理必要・複雑設定 データエンジニアリング・定期バッチ
Temporal 強力な状態管理・マルチランゲージ・OSS オンプレ運用・学習コスト 複雑な分散トランザクション・長期ワークフロー
Cadence Temporal の前身・シンプル メンテナンス中心・ドキュメント少ない 分散アプリケーション
Prefect モダン UI・クラウドネイティブ Step Functions より高コスト Python ベースのデータ処理
Dagster ソリッドベース・強力な型システム 新興・社コミュニティ データ管理・資産志向アーキテクチャ
Azure Logic Apps Azure ネイティブ・マネージド Azure のみ Azure エコシステム
GCP Workflows GCP ネイティブ・シンプル 機能制限・小規模用 GCP エコシステム
Camunda BPMN 標準・エンタープライズ機能 ライセンスコスト高・複雑 エンタープライズワークフロー

クライアントとエコシステム

AWS CDK(Infrastructure as Code)

import * as sfn from 'aws-cdk-lib/aws-stepfunctions';
import * as sfn_tasks from 'aws-cdk-lib/aws-stepfunctions-tasks';
import * as lambda from 'aws-cdk-lib/aws-lambda';

const validateOrderFn = new lambda.Function(this, 'ValidateOrder', {
  runtime: lambda.Runtime.PYTHON_3_11,
  handler: 'index.handler',
  code: lambda.Code.fromAsset('lambda')
});

const validateTask = new sfn_tasks.LambdaInvoke(this, 'ValidateOrderTask', {
  lambdaFunction: validateOrderFn
});

const workflow = new sfn.StateMachine(this, 'OrderWorkflow', {
  definition: validateTask,
  logs: {
    level: sfn.LogLevel.ALL,
    destination: new logs.LogGroup(this, 'LogGroup')
  }
});

AWS SAM(Serverless Application Model)

Resources:
  OrderWorkflow:
    Type: AWS::Serverless::StateMachine
    Properties:
      Type: STANDARD
      Logging:
        Level: ALL
        IncludeExecutionData: true
        Destinations:
          - CloudWatchLogsLogGroup:
              LogGroupName: !Ref WorkflowLogGroup
      Definition:
        Comment: Order Processing Workflow
        StartAt: ValidateOrder
        States:
          ValidateOrder:
            Type: Task
            Resource: arn:aws:lambda:ap-northeast-1:123456789:function:validate
            Next: ProcessPayment
          ProcessPayment:
            Type: Task
            Resource: arn:aws:states:::sqs:sendMessage
            End: true

Terraform

resource "aws_sfn_state_machine" "order_workflow" {
  name       = "order-processing"
  role_arn   = aws_iam_role.step_functions_role.arn
  definition = file("${path.module}/state_machine.json")

  logging_configuration {
    log_destination        = "${aws_cloudwatch_log_group.step_functions.arn}:*"
    include_execution_data = true
    level                  = "ALL"
  }
}

LocalStack・SAM Local

ローカル開発環境でステートマシンをシミュレート:

# LocalStack で Step Functions 実行
docker-compose up localstack
aws stepfunctions --endpoint-url=http://localhost:4566 create-state-machine \
  --name my-workflow \
  --definition file://state_machine.json \
  --role-arn arn:aws:iam::000000000000:role/service-role

ベストプラクティス

1. ワークフロー設計

✅ DO:

  • ステートマシンを モジュール化(子ワークフローに分割)
  • 宣言的 に エラーハンドリング(Retry・Catch)を定義
  • テスト可能 な小さなステート単位
  • InputPath・OutputPath・ResultPath で入出力を明確化

❌ DON’T:

  • 巨大な 1 つのステートマシン
  • Lambda コード内でエラー処理を混在
  • 無限ループ(Choose ステートで自己参照)

2. エラーハンドリング

{
  "Retry": [
    {
      "ErrorEquals": ["States.TaskFailed", "States.Timeout"],
      "IntervalSeconds": 2,
      "MaxAttempts": 3,
      "BackoffRate": 2.0
    }
  ],
  "Catch": [
    {
      "ErrorEquals": ["States.ALL"],
      "Next": "HandleError",
      "ResultPath": "$.error"
    }
  ]
}

3. パフォーマンス最適化

  • Distributed Map で大規模並列処理(100M+ アイテム)
  • Express Workflow で高スループット短期処理
  • 並列処理(Parallel) で依存なし処理を並行実行

4. コスト削減

  • 状態遷移数を最小化 → Pass ステートでデータ加工して遷移削減
  • 条件分岐(Choice) で不要なタスク実行をスキップ
  • Express Workflow で短期処理・IoT 実行

5. 監視・ロギング

{
  "LoggingConfiguration": {
    "Level": "ALL",
    "IncludeExecutionData": true,
    "Destinations": [{
      "CloudWatchLogsLogGroup": {
        "LogGroupName": "/aws/stepfunctions/my-workflow"
      }
    }]
  },
  "TracingConfiguration": {
    "Enabled": true
  }
}

トラブルシューティング

よくある問題と解決策

問題 原因 解決策
Execution timed out Standard でも実行時間超過 待機時間・ポーリング不足を確認。Wait ステート追加。
States.TaskFailed サービス呼び出し失敗 CloudWatch Logs・実行履歴で詳細確認。Retry パラメータ調整。
InvalidJsonPath InputPath・OutputPath が無効 JSONPath 構文確認。`` で全データ、.key で特定フィールド。
NoChoiceMatched Choice ステートでマッチなし Default ステート追加。条件見直し。
Insufficient IAM permission 実行ロール権限不足 IAM ロールで lambda:InvokeFunction 等許可確認。
BranchFailed Parallel ブランチ失敗 各ブランチエラーを CloudWatch Logs で確認。Catch 追加。

デバッグテクニック

  1. Workflow Studio でビジュアルデバッグ → テスト実行で各ステップの出力確認
  2. CloudWatch Logs でログ検索 → エラーメッセージ・トレースバック確認
  3. X-Ray で分散トレース → ステート間の実行時間・エラー箇所特定
  4. 実行履歴を確認 → ステップごとの入出力・タイムスタンプ確認

2025-2026 最新動向

1. Distributed Map の拡張

  • JSONata サポート → より表現力豊かなデータ変換
  • Map Run → メトリクス・ログの詳細表示
  • 最大 10,000 並列ワーカー → 大規模バッチ処理

2. Amazon Bedrock 統合

AI エージェント(Claude など)を Step Functions で直接オーケストレーション:

{
  "Type": "Task",
  "Resource": "arn:aws:states:::bedrock:invokeModel",
  "Parameters": {
    "ModelId": "anthropic.claude-3-5-sonnet-20241022-v2:0",
    "Body.{{CONTENT}}quot;: "States.JsonToString($.promptData)"
  }
}

3. Variables 機能

ステートマシン内で変数を定義・再利用:

{
  "Comment": "Using Variables",
  "StartAt": "Initialize",
  "States": {
    "Initialize": {
      "Type": "Pass",
      "Parameters": {
        "orderId.{{CONTENT}}quot;: "$.id",
        "totalPrice.{{CONTENT}}quot;: "States.MathAdd($.price, $.tax)"
      },
      "ResultPath": "$.context",
      "Next": "ProcessOrder"
    }
  }
}

4. JSONata 式言語

複雑なデータ変換を より簡潔に:

{
  "Type": "Pass",
  "Parameters": {
    "highValueOrders.{{CONTENT}}quot;: "$.orders[totalPrice > 1000]",
    "totalRevenue.{{CONTENT}}quot;: "$sum($.orders.totalPrice)"
  }
}

5. クロスアカウント・マルチテナント対応

より安全で詳細なクロスアカウント実行。

6. ローカル開発環境統合

LocalStack・SAM Local で完全にシミュレート可能。


学習リソース

公式ドキュメント

チュートリアル・ラボ

  • AWS WorkshopsStep Functions Workshop
  • Qwiklabs → Step Functions ハンズオンラボ
  • A Cloud Guru → Step Functions コース

コミュニティリソース


実装例・活用シーン

シーン 1:E-Commerce Order Processing

S3 にアップロードされた注文ファイルを Step Functions で処理。在庫確認→決済→配送手配→通知まで一連のフロー。

シーン 2:ML Pipeline Orchestration

Glue データ準備 → SageMaker 学習 → Model Evaluation → 本番デプロイまで、完全に Step Functions で管理。

シーン 3:人間承認ワークフロー

申請書自動評価(Lambda)→ 承認者へ通知(SNS)→ 承認待機(.waitForTaskToken)→ アカウント有効化。

シーン 4:大規模データ ETL

Distributed Map で S3 CSV 100M レコードを処理。各行変換→データベース書き込み。

シーン 5:マルチリージョン障害復旧

EventBridge スケジュール → Step Functions → Parallel で複数リージョンへの健全性テスト・フェイルオーバー検証。


導入ロードマップ

Phase 1:基礎習得(1 週間)

  1. Step Functions 基本概念学習
  2. Workflow Studio でシンプルなワークフロー作成
  3. Lambda + DynamoDB 統合テスト

Phase 2:機能検証(2 週間)

  1. エラーハンドリング(Retry・Catch)実装
  2. 並列処理(Parallel・Map)の動作確認
  3. CloudWatch Logs・X-Ray ロギング設定

Phase 3:パイロット導入(1 ヶ月)

  1. 既存プロセス(注文フロー・承認フロー等)に Step Functions 適用
  2. Distributed Map での大規模処理パフォーマンステスト
  3. 本番環境へのデプロイ(CDK・Terraform)

Phase 4:運用・最適化(継続)

  1. CloudWatch・X-Ray でパフォーマンス監視
  2. コスト分析・最適化
  3. ワークフロー改善・拡張

実装チェックリスト

  • [ ] Step Functions ワークフロー定義(ASL)完成
  • [ ] IAM ロール・権限設定完了
  • [ ] CloudWatch Logs ロギング設定
  • [ ] X-Ray 分散トレース有効化
  • [ ] エラーハンドリング(Retry・Catch)実装
  • [ ] 本番環境テスト完了
  • [ ] CDK / SAM / Terraform 構成管理
  • [ ] ドキュメント・操作マニュアル作成
  • [ ] チーム・オンコール体制構築
  • [ ] パフォーマンス・コスト監視ダッシュボード作成

まとめ

AWS Step Functions は、サーバーレスワークフローの標準基盤。Amazon States Language(ASL)で宣言的に複雑なフロー定義でき、Lambda・ECS・DynamoDB・SageMaker・Bedrock など 200+ の AWS サービスを直接統合できます。

主な価値:

  • ✅ エラーハンドリング・リトライ・並列処理を宣言的に管理
  • ✅ 長期ワークフロー(最大 1 年)・人間承認フロー対応
  • ✅ 完全な実行履歴・監査ログで可視化
  • ✅ Distributed Map で大規模バッチ処理(100M+ アイテム)
  • ✅ AWS ネイティブでインフラ管理不要

導入する際のポイント:

  • Standard(1 年対応)vs Express(5 分・高スループット)の使い分け
  • Workflow Studio でビジュアル定義・デバッグ
  • SAGA パターンで分散トランザクション管理
  • CloudWatch・X-Ray で完全可視化
  • CDK・SAM で Infrastructure as Code 化

2025-2026 年は Bedrock 統合・Distributed Map 拡張・JSONata サポートなど、AI・大規模データ処理への機能強化が進みます。AWS エコシステム内の複雑なワークフローを構築する際の 必須ツール になります。


参考文献

AWS 公式

  1. AWS Step Functions Developer Guide
  2. Amazon States Language
  3. Step Functions Pricing
  4. AWS Step Functions Features
  5. Distributed Map Documentation
  6. Service Integrations
  7. Workflow Studio Guide
  8. Error Handling Documentation
  9. Step Functions with AWS CDK
  10. AWS SAM Step Functions

ブログ・ケーススタディ

  • AWS Blogs - Step Functions カテゴリ
  • AWS Re:Invent セッション動画
  • AWS クラウドスキルビルダー

コミュニティ

  • GitHub AWS Samples - serverless-patterns
  • AWS Community Builders
  • Slack AWS Community

ワークフロー設計標準・比較ツール

イベント・メッセージング統合

AI・機械学習パイプライン


ドキュメント最終更新:2026-04-26
対応バージョン:Step Functions 2026 / ASL 拡張機能対応 / Bedrock 統合
参考文献:20+件 / 比較対象:5+ OSS/サード製品