はじめてのAWS Step Function ~概要編~
AWS Step Functionとは
分散アプリケーションとマイクロサービスを「ステートマシン」と呼ばれるサーバーレスなワークフローを使って、制御・可視化するサービス。
Lambdaをはじめとする他のサービスを呼び出して、以下のような処理を実行可能
- 処理の順序の定義
- 並列実行
- 条件分岐
- 失敗時のリトライや例外・エラー処理
ステートマシンとは
ステートマシンは「ステート(状態)」という要素で構成。ASL(Amazon States Language)と呼ばれるJSON形式の独自言語を使って、ステートの状態遷移をワークフローとして定義する。
ステートマシンの種類
「標準ワークフロー」と「Expressワークフロー」の2種類がある。
標準ワークフローは、最大実行時間が1年と長いため、様々な種類のワークフローを実装可能。
Expressワークフローは、最大実行時間が5分と短い反面、1秒あたりに起動できるステートマシン数が高く、1秒あたりの状態遷移できる数がほぼ無制限に設定されている。
項目 | 標準ワークフロー | Expressワークフロー |
---|---|---|
最大実行時間 | 1年 | 5分 |
実行開始レート | 毎秒2000以上 | 毎秒100,000以上 |
状態遷移レート | 1アカウントあたり4000以上 | ほぼ無制限 |
料金 | 状態遷移ごとの従量課金 | 実行回数、実行時間、消費されたメモリに対する従量課金 |
実行セマンティクス | 1回だけ実行 | 最低1回位実行 |
サービス統合 | 全てのサービス統合とパターンをサポート | 全てのサービス統合をサポート。ジョブ実行パターンまたはコールバックパターンはサポートしない |
AWSサービスの3種の呼び出しパターン
リクエストレスポンス
もっともシンプルな統合方法。統合されたサービスを呼び出し、そのサービスからHTTPレスポンスを受け取るとすぐに次のステートに進む。
タスクの実行完了を待つことなく、すぐに続行するため、タスクが短時間で完了する場合や、タスクの実行結果が次のステップに必要ない場合に適している。
※Standard・Expressワークフローでサポート
ジョブ実行
Step Functionsはサービスを呼び出し、そのジョブが完了するまで待機する。バッチ処理や、機械学習モデルのトレーニングなど、完了までに時間がかかるジョブに適している。
※Standardワークフローのみでサポート
コールバック待機
外部サービスや人手による承認など、非同期で長時間かかるタスク向け。Step Functionsはサービスを呼び出す際にタスクトークンを渡す。ワークフローはそのタスクトークンが外部サービスから返されるまで一時停止する。タスクが完了したら、外部サービスがタスクトークンをStep Functionsにコールバックすることで、ワークフローが再開される。
※Standardワークフローのみでサポート
ASLとは
AWS Step Functionsのワークフローを定義するために使用されるJSONベースの言語。ワークフローの各ステップ(状態)とその遷移を宣言的に記述。
ASLの主要な構成要素
ASLは以下の2つの主要な部分から構成される。
-
ステートマシン(State Machine)
ワークフロー全体の定義。どの状態から開始するか(StartAt
)、そしてそのワークフロー内にどのような状態があるか(States
)を定義。 -
状態(State)
ワークフローの各ステップを表す。状態にはいくつかの種類がある、それぞれ異なる役割を持っている。
主な状態の種類
Task
最も基本的な状態で、AWS Lambda関数やAWS Batchジョブなど、特定のタスクを実行。
Choice
入力データに基づいて、次にどの状態に進むかを決定する条件分岐の状態。Choice
フィールドに複数の条件を定義し、条件に一致した場合は指定された状態へ、どれにも一致しない場合はDefault
で指定された状態へ進む。
Pass
何もしない状態。入力データをそのまま出力として渡したり、特定のデータを追加したりするのに使われる。デバッグやデータ整形に便利。
Wait
指定された期間、ワークフローの実行を一時停止する。Seconds
、timestamp
などのフィールドで待機時間を設定可能。
Succeed / Fail
ワークフローを正常に終了させる(Succeed
)か、エラーとして終了させる(Fail
)状態。ワークフローの終点として使用。
ASLの基本の例
StartAtでHelloWorldという状態から開始し、StatesでそのHelloWorld
という状態を定義。TypeがTask
なので、Lambda関数を実行し、End:true
でワークフローど、一時的に上限を緩和したい場合はお問い合わせフォームより申請してください。を終了。
{
"Comment": "シンプルなワークフローの例",
"StartAt": "HelloWorld",
"States": {
"HelloWorld": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloFunction",
"End": true
}
}
}
まとめ
- AWS Step Functionsはステートというワークフローを用いて、サービスを制御・可視化するサービス
- 標準ワークフローとExpressワークフローの2種類がある
- リクエストレスポンス、ジョブ実行、コールバック待機の3種類の呼び出しパターンを持つ
- ワークフローを定義するためには、ASLというJSON形式の言語を用いる
Discussion