Programming Self-Study Notebook

勉強したことを忘れないように! 思い出せるように!!

AWS Step Functions について調べてみた

f:id:overworker:20210304234231p:plain:h200

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のファイル名>で検証する。

用語

用語 意味
ワークフロー 処理の全体像を示すフローチャートのようなモノ
ステート ワークフローを構成する要素(個々のボックス)のこと
ステートマシン 個々のステートの切り替え制御することから、ワークフロー自体をステートマシンと考えることが可能

ステートマシンの呼び出し元

  • 以下の5種類
    • Amazon CloudWatch Event:S3へのファイル保存
    • Amazon API GatewayAPIコール時のバックエンド処理
    • マネージメントコンソール:コンソールからの手動実行
    • AWS CLI:コマンド実行
    • 各種SDK:Lambda等から実行

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)

ステートへのデータの入出力

  • 全体像 f:id:overworker:20211031213954p:plain

入力

{
    "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フィールドの指定方法

  • StateTypeTaskParallelの場合はRetryを設定することができる。

    フィールド 説明
    ErrorEquals
    IntervalSeconds 最初のリトライまでの秒数
    BackoffRate リトライ間隔を増加させる乗数(エクスポネーシャルバックオフ)
    MaxAttempts リトライ回数

Catchフィールドの指定方法

  • StateTypeTaskParallelの場合は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