0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS】変数設定を使用したステートマシン実装【StepFunctions】

Last updated at Posted at 2024-11-25

はじめに

最近のアップデートでステートマシンに変数設定ができるようになりました
これまでのステートマシンの実装ではより上流のステップで出力された値を下流のステップで使用するにはその中間のステップで入力と出力に含めて中継するようなことが必要でしたが
今回の変数を使用することでプログラミングのグローバル変数を使用するように、上流のステップで変数に設定した値は下流のステップで任意のタイミングで入力や出力で使用できるようになります
今回の記事ではその使い方をまとめてみました

↓こんな感じで変数をステップの外部で保持できるイメージ(AWSドキュメントより)
image.png

設定できる変数の種類

変数は以下のように1つの変数に1つの値を設定するものや、配列、Json形式のような構造体をはじめとしてJson形式で表現できる形で定義できます
{ "foo": 123, "bar": ["a", "b", "c"], "car": { "cdr": true } }
【StepFunctionsのビジュアルワークフローで設定した画面】
↓変数を設定したいステップを選択して「変数」タブを選択して変数を設定する
1.png

変数の呼び出し方

呼び出すときはJsonPathであれば下記のような構文で呼び出します
"【キー】": "{% $【呼び出したい変数名】%}"
固定値設定の変数呼び出し例(設定例では「123」が参照される)
{ "data": "{% $foo %}" }
配列設定の変数呼び出し例(配列の2番目の値(設定例では「b」)が参照される)
{ "data": "{% $bar[1] %}" }
構造体定の変数呼び出し例(設定例では「true」が参照される)
{ "data": "{% car.cdr %}" }

実際に動かしてみた①上流ステップの変数を下流ステップの出力で呼び出す

設定①上流ステップで変数の設定

※この例では1ステップ目で変数を設定
2.png

設定②最終ステップで変数の内容出力

※この例ではLambdaの出力と一緒に、最終ステップの出力で配列変数の2番目の値を呼び出す
3.png

設定③ステートマシンの実行結果を確認

Lambdaの処理結果「result」と一緒に、設定したキー「data」の値として変数の値「b」が出力された
4.png

変数を途中で変更するには

ステートマシンのあるステップの出力結果を使って値を更新したい場合
例:2番目のステップの結果の値を変数に設定する

①2番目のステップのLambda(12345を結果として返す)

5.png

②ステートマシンの編集画面にて、2番目のステップの変数設定で結果を設定する

{ "foo": "{% $states.result.Payload.body.valueToPass %}" }
6.png

③最後のステップの出力結果を設定した変数にする

7.png

④結果:2番目のステップで設定した値が出力されることを確認

8.png

余談:2番目のステップの結果なのに2番目のステップで変数設定する理由は?

AWSドキュメントに記載がありましたが、変数の設定が該当のステップの処理の最後になるため、
2番目のステップの結果を変数に設定したいときは2番目のステップの中で設定します

9.png

思いつくユースケース

思い付きレベルですが、応用できるユースケースを記載しておきます。
他に良い使い方があれば教えて下さい

【思い付きユースケース例】
・エラーなどのメッセージをDBではなく変数として上流で設定しておき、ステートマシンの中で必要な時に適宜呼び出す
・データの種類ごとに変数を用意しておき、ステートマシン中の計算結果を変数に積み上げる
など

さいごに

昔ステートマシンの実装の際に上流の結果を下流に流すときにかなり苦労した気がします
上流で設定した変数を下流のどこでも呼び出せる今回のアップデートは、ステートマシン実装の簡略化やプログラムの可読性を向上させるのに嬉しいアップデートだと思います

参考URL

AWSドキュメント
https://docs.aws.amazon.com/step-functions/latest/dg/workflow-variables.html
クラメソさんの記事
https://dev.classmethod.jp/articles/step-functions-variables/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?