💭

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