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 (集約) |
実践的な知識は関連書籍でも得られる。