🍊

はじめての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つの主要な部分から構成される。

  1. ステートマシン(State Machine)
    ワークフロー全体の定義。どの状態から開始するか(StartAt)、そしてそのワークフロー内にどのような状態があるか(States)を定義。

  2. 状態(State)
    ワークフローの各ステップを表す。状態にはいくつかの種類がある、それぞれ異なる役割を持っている。

主な状態の種類

Task

最も基本的な状態で、AWS Lambda関数やAWS Batchジョブなど、特定のタスクを実行。

Choice

入力データに基づいて、次にどの状態に進むかを決定する条件分岐の状態。Choiceフィールドに複数の条件を定義し、条件に一致した場合は指定された状態へ、どれにも一致しない場合はDefaultで指定された状態へ進む。

Pass

何もしない状態。入力データをそのまま出力として渡したり、特定のデータを追加したりするのに使われる。デバッグやデータ整形に便利。

Wait

指定された期間、ワークフローの実行を一時停止する。Secondstimestampなどのフィールドで待機時間を設定可能。

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