Step Functions
AWS のサーバーレスワークフローサービスで、Lambda 関数を視覚的に組み合わせてオーケストレーションする
AWSサーバーレス
Step Functions とは
AWS Step Functions は、サーバーレスワークフローサービスで、Lambda 関数や AWS サービスを視覚的に組み合わせてオーケストレーションする。ASL (Amazon States Language) でワークフローを定義する。
SAM での定義
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 の違いを以下にまとめる。
| 観点 | Standard | Express |
|---|---|---|
| 最大実行時間 | 1 年 | 5 分 |
| 料金 | 状態遷移ごと | 実行時間 + リクエスト |
| 実行保証 | Exactly-once | At-least-once |
| 用途 | 長時間ワークフロー | 高スループット処理 |
SDK 統合 (Lambda 不要)
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 (集約) |
実践的な知識は関連書籍でも得られる。
この記事は役に立ちましたか?
関連用語
Lambda
AWS のサーバーレスコンピューティングサービスで、コードをイベント駆動で実行する
EventBridge
AWS のサーバーレスイベントバスで、イベント駆動アーキテクチャの中核を担う
Saga パターン (オーケストレーション)
分散トランザクションを複数のローカルトランザクションに分割し、中央のオーケストレーターが制御するパターン
AWS Glue
AWS のサーバーレス ETL サービスで、データの抽出・変換・ロードとデータカタログ管理を提供する
サーバーレス
サーバーの管理をクラウドプロバイダーに委ね、コードの実行に対してのみ課金されるコンピューティングモデル
MapReduce
大規模データを Map (分割・変換) と Reduce (集約) の 2 段階で並列処理する分散処理モデル