AWS Step Functionsの基本を調べてみました(ちゃんと調べたことが無かったので、調べてみました。)。今回は、基本に関しての個人的なまとめノートの共有ですが最近のアップデートを見ると激アツサービスに化けそうな雰囲気を感じます。
最近の動向(2021/9/30)
- AWS Step Functions が AWS SDK 統合で 200 を超える AWS のサービスのサポートを追加
特徴
AWS のサービスのオーケストレーション、ビジネスプロセスの自動化、サーバーレスアプリケーションの構築に使用されるローコードの視覚的なワークフローサービス
概要
- ワークフローに表現された処理を制御するステートマシン
- 全体の流れを可視化することができる
- 各ステップの実行履歴をログから追跡できる
料金
- 従量課金(処理された状態遷移の数)
- 状態遷移1回あたり$0.000025(Tokyo)(リージョンによって異なる)
- 無料枠あり(Tokyo:毎月4000回までの状態遷移は無料)
- リトライの回数もカウントされる
内部構成
- ASL(Amazon States Language)でワークフローを定義する(JSON形式の言語)
- ASLの文法チェックツール:
awslabs/statelint
gem install statelint
でインストールstatelint <ASLのファイル名>
で検証する。
- ASLの文法チェックツール:
用語
用語 | 意味 |
---|---|
ワークフロー | 処理の全体像を示すフローチャートのようなモノ |
ステート | ワークフローを構成する要素(個々のボックス)のこと |
ステートマシン | 個々のステートの切り替え制御することから、ワークフロー自体をステートマシンと考えることが可能 |
ステートマシンの呼び出し元
- 以下の5種類
CloudWatchにより提供されているメトリクス
名称 | 説明 |
---|---|
ExecutionTime | 実行の開始点から終了点までの間隔(ミリ秒単位) |
ExecutionThrottled | スロットリングされた実行の数 |
ExecutionsAborted | 中断された実行の数 |
ExecutionsFailed | 失敗した実行の数 |
ExecutionStarted | 開始された実行の数 |
ExecutionsSucceeded | 正常に完了した実行の数 |
ExecutionsTimeOute | タイムアウトした実行の数 |
制限
- SLA:99.9%
- ステートマシンの最大数:10,000(1アカウントあたり)
- 最大リクエストサイズ:1MB
- ステートマシンの最大実行時間:1年間
- ステートマシンの実行履歴の最大サイズ:25,000イベント
- Stateへの入出力の最大データサイズ:32,768文字
- State遷移の合計数:1アカウント・1リージョン内のすべてのステートマシンに対してState遷移の合計数が計算され、トークンバケットアルゴリズムに基づいた制限が適用される。
- バケットサイズ:800(Tokyo)
- 1秒ごとの補充レート:400(Tokyo)
ステートへのデータの入出力
- 全体像
入力
{ "title":"Number to add", "numbers":[3,4] }
InputPath
- 渡された入力のうち、何をStateで使用するかを指定する
{ "Type":"Task", "InputPath":"$.numbers", "Resource":"$arn:awas:lambda...", ...
Parameters
- 渡された入力から、「キーと値」のペアを生成してStateに渡す
{ "Type":"Task", "Parameters":{ "calc.$":"$.numbers" }, "Resource":"$arn:awas:lambda...", ...
出力
ResultPath
- Stateの実行結果をどのようなフィールド名で受け取るかを指定
{ "Type":"Task", "InputPath":"$.numbers", "ResultPath":"$.sum", ...
OutputPath
- 次のStateに引き渡すデータを指定する
{ "Type":"Task", "InputPath":"$.numbers", "ResultPath":"$.sum", "OutputPath":"$[’title’,’sum’]", ...
ステートマシンの記述
ステートマシン全体の設定
ステートマシンの全体に対する記述
フィールド 説明 Comment テキストで任意のコメントを記述できる StartAt 一番最初に実行するState(エントリーポイント)を指定する TimeoutSeconds ステートマシン全体の実行時間に対してのタイムアウト時間を指定する(秒数を指定する)→エラーとして強制終了する Version ASLのバージョンを指定(規定は1.0) States ステートマシンを構成するStateを指定する(複数含めることが可能)
ステートの記述
- ステートの種類(7種)
Task
単一の処理を行う
フィールド 説明 Resource ARN形式で指定 Parameters Resourceに渡すパラメータを指定(対象サービスにより内容は異なる) TimeoutSeconds タイムアウト時間を設定する(秒数で指定) HeartbeatSeconds Activityのみに適用される ResultPath Stateの出力をどのような名前で受け取るか指定 Retry エラーハンドリングに使用 Catch エラーハンドリングに使用
Wait
指定した時間の間、処理をストップする
フィールド 説明 Seconds 待機する時間を秒単位で指定する Timestamp ISO8601形式(例:2021-10-31T12:34:56Z)でいつまで待機するかを指定 SecondsPath Stateへの入力データのうち、待機する時間をJsonPath構文で指定 TimestampPath Stateへの入力データのうち、いつまで待機するかをJsonPath構文で指定
Pass
入力をそのまま出力へ渡す
フィールド 説明 Result Stateの実行結果を指定 ResultPath Resultをどのようなパラメータ名で受け取るか指定 Parameters 入力されたデータから「キーと値」のJsonを生成
Parallel
- 並列に処理を実行する
いずれかが失敗するとParallelのState全体が失敗した扱いになる
フィールド 説明 Branches 配列で並列に実行するSteteを指定 ResultPath ParallelのStateの出力をどのようなパラメータで受け取るか指定 Retry Branches内のStateのエラー時のリトライをハンドリングする Catch Branches内のStateのエラー時の後処理をハンドリングする
Choice
一定の条件により分岐する
フィールド 説明 Default どの条件に合致しなかったときに実行するState Choices Variable Stateへの入力のうち指定したフィールドを条件分岐に指定する Next 条件に合致したときに遷移するState NumericEquale Variableに対する比較演算子と比較する値を指定
Succeed
- 実行結果を成功として終了する
Fail
実行結果を失敗として終了する
フィールド 説明 Error エラー名を指定。Retryや例外のCatchに指定できる Cause エラーの原因を文字列で指定
Retryフィールドの指定方法
StateType
がTask
、Parallel
の場合はRetryを設定することができる。フィールド 説明 ErrorEquals IntervalSeconds 最初のリトライまでの秒数 BackoffRate リトライ間隔を増加させる乗数(エクスポネーシャルバックオフ) MaxAttempts リトライ回数
Catchフィールドの指定方法
StateType
がTask
、Parallel
の場合はRetryを設定することができる。フィールド 説明 ErrorEquals エラーの条件を指定 Next エラー条件に該当した際に遷移させるStateを指定 ResultPath エラーの内容を出力に含める際に指定する
ErrorEquals
どのようなエラーの時に条件に合致したとみますかを指定する
フィールド 説明 State.ALL すべてのエラーに合致 State.Timeout Stateがタイムアウトした際に合致 State.TaskFailed Stateの実行に失敗した際に合致する State.Permissions State実行の権限が無かった際に合致する
参考文献
公式サイトへのリンク
AWS Step Functions モダンアプリケーションのための視覚的なワークフロー
【AWS Black Belt Online Seminar】AWS Step Functions
www.youtube.com