💭
Step Functions 変数を使って遊んでみる
はじめに
Step Functionsに変数が実装されたみたいなので、変数を触ってみました。
バケツリレー的に値を渡す必要がなくなったので、とても便利な機能です。
変数
変数を使用すると、中間状態を経由せずに、後で取得できるデータを保存できます。視覚的な図については、次を参照してください: 変数の仕組み
とあるように、Step Functionsの変数は、途中の処理に引き渡さずとも値を引き出せるため、直感的に理解するような変数と同義です。
実際に次のようなStep Functionsを用意してみました。
とてもシンプルですが、次のように変数を設定しました。
下記のように、途中のpass(1)を飛ばして、引数に受け取る事ができます。
この時、変数で定義したkeyを元に呼び出す事が可能です。
また、上記をコードだとこのようになります。
{
"Comment": "A description of my state machine",
"StartAt": "Pass",
"States": {
"Pass": {
"Type": "Pass",
"Next": "Pass (1)",
"Assign": {
"val": 100
}
},
"Pass (1)": {
"Type": "Pass",
"Next": "Lambda Invoke"
},
"Lambda Invoke": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Output": "{% $states.result.Payload %}",
"Arguments": {
"FunctionName": "",
"Payload": "{% $val %}"
},
"Retry": [
{
"ErrorEquals": [
"Lambda.ServiceException",
"Lambda.AWSLambdaException",
"Lambda.SdkClientException",
"Lambda.TooManyRequestsException"
],
"IntervalSeconds": 1,
"MaxAttempts": 3,
"BackoffRate": 2,
"JitterStrategy": "FULL"
}
],
"End": true
}
},
"QueryLanguage": "JSONata"
}
変数はAssignとすれば、変数を定義できます。
"Assign": {
"val": 100
}
実際に使ってみて
実際の業務内では、dynamoDBにstateを持たせており、最後にstateを更新したい場面がありました。その時に、対象のレコードの情報を変数として渡す形が綺麗に実装でき、とてもありがたかったです。
今後も必須で使う機能なので、より良い使い方とかあればぜひ教えていただけると嬉しいです。
最後まで読んでいただきありがとうございました。
Discussion