AWSのStep Functionsを最近よくつかうのでStateの概念をまとめる。。
Stateの種類
- Pass
- 入力をそのまま出力として渡すだけのシンプルな役割を持つ
- Task
- Lambda関数やAWS APIなどの作業を実行する
- Choice
- 条件分岐を行う
- Wait
- 指定時間または特定の時刻まで待機する
- Succeed
- ステートマシンを成功として終了させる
- Fail
- ステートマシンを失敗として終了させる
- Parallel
- 並列処理を行う
- Map
- 配列の各要素に対して同じ処理を繰り返し実行する
たとえば、Lambda関数を呼び出すTask Stateがあるとするなら、概念はこのように考えられる。
- Task State(State)
- Lambda関数を呼び出す(Step)
- State:Step Functionsのステートマシンを構成する状態そのもの
- Step:State内で実際に実行されるタスクやアクション
明確に定義するならこのように言える。ただ、基本的にはStateという言葉を理解しておけばいい、と個人的には思う。
各ステータスの特徴
Pass
- 単純にデータを渡すだけのステータス
- テスト段階や固定値を渡す際に使用
Task
- 作業を実行するステータス
- Lambda関数やAWS APIなどの外部サービスを呼び出す
- タイムアウトやエラー処理の設定が可能
Choice
- 条件に基づいて次の遷移先を決定
- 複数の条件と、それぞれに対応する次のステータスを定義可能
Wait
- 処理を一時停止するステータス
- 指定秒数の待機や特定の時刻まで待機が可能
Succeed
- ステートマシンを正常終了させるステータス
- 終了ステータスのため、次のステータスへの遷移はない
Fail
- ステートマシンを異常終了させるステータス
- エラーコードとエラーメッセージを設定可能
Parallel
- 並列して複数の処理を同時実行するステータス
- 各ブランチで独立した処理フローを定義可能
Map
- 配列の各要素に対して同じ処理を実行
- 大量のデータを同じ処理で扱う場合に便利
使い方のポイント
- 各ステータスを組み合わせて複雑なワークフローを構築できる
- JSONベースでステートマシンを定義する
- AWS Step Functions Visual Workflowでグラフィカルに確認しながらやるといい
- 条件分岐や並列処理、エラーハンドリングなど高度な制御ができるのもいい