Step Functions

AWS のサーバーレスワークフローサービスで、Lambda 関数を視覚的に組み合わせてオーケストレーションする

AWSサーバーレス

Step Functions とは

AWS Step Functions は、サーバーレスワークフローサービスで、Lambda 関数や AWS サービスを視覚的に組み合わせてオーケストレーションする。ASL (Amazon States Language) でワークフローを定義する。

SAM での定義

OrderWorkflow:
  Type: AWS::Serverless::StateMachine
  Properties:
    DefinitionBody:
      StartAt: ValidateOrder
      States:
        ValidateOrder:
          Type: Task
          Resource: !GetAtt ValidateFunction.Arn
          Next: ProcessPayment
        ProcessPayment:
          Type: Task
          Resource: !GetAtt PaymentFunction.Arn
          Next: SendNotification
          Catch:
            - ErrorEquals: [PaymentFailed]
              Next: HandleFailure
        SendNotification:
          Type: Task
          Resource: !GetAtt NotifyFunction.Arn
          End: true
        HandleFailure:
          Type: Task
          Resource: !GetAtt FailureFunction.Arn
          End: true

ステートの種類

ステート 説明
Task Lambda や AWS サービスを呼び出す
Choice 条件分岐
Parallel 並列実行
Map 配列の各要素を並列処理
Wait 指定時間待機
Pass データの変換
Succeed / Fail 成功 / 失敗で終了

Standard vs Express

観点 Standard Express
最大実行時間 1 年 5 分
料金 状態遷移ごと 実行時間 + リクエスト
実行保証 Exactly-once At-least-once
用途 長時間ワークフロー 高スループット処理

SDK 統合 (Lambda 不要)

WriteToDynamoDB:
  Type: Task
  Resource: arn:aws:states:::dynamodb:putItem
  Parameters:
    TableName: orders
    Item:
      orderId:
        S.$: $.orderId
      status:
        S: completed
  End: true

Lambda を経由せず、Step Functions から直接 DynamoDB に書き込める。Lambda の実行コストを削減。

エラーハンドリング

ProcessPayment:
  Type: Task
  Resource: !GetAtt PaymentFunction.Arn
  Retry:
    - ErrorEquals: [ServiceException]
      IntervalSeconds: 2
      MaxAttempts: 3
      BackoffRate: 2
  Catch:
    - ErrorEquals: [States.ALL]
      Next: HandleFailure

ユースケース

ユースケース パターン
注文処理 Task → Task → Task (直列)
画像処理 Map (並列処理)
承認ワークフロー Task → Wait (人間の承認) → Task
ETL パイプライン Parallel → Task (集約)

実践的な知識は関連書籍でも得られる。

関連用語