SFN インクリメント

AWS Step Functionsでは、直接的な計算を実行する機能はありませんが、Lambda関数を使うことなく値をインクリメントするための単純な Pass ステートを利用する場合は、Parameters を使って値を操作します。これにより、特定のキーに対して加算を行い、新しい値を設定することが可能になります。この場合、一時的な変数を使用する方法で設定できます。

以下に、InitializeState の結果を次の Pass ステートでインクリメントする方法を説明します:

ステートマシンの構造

  1. InitializeState: 初期変数を設定する Pass ステート
  2. IncrementState: 変数の値をインクリメントする Pass ステート
  3. ChoiceState: インクリメントした変数に基づいて条件分岐を行う Choice ステート

ステートマシンの定義

{
  "Comment": "State machine to pass values through Pass and Choice states with incrementation",
  "StartAt": "InitializeState",
  "States": {
    "InitializeState": {
      "Type": "Pass",
      "Result": {
        "variable": 42,
        "status": "initialized"
      },
      "ResultPath": "$.initData",
      "Next": "IncrementState"
    },
    "IncrementState": {
      "Type": "Pass",
      "Parameters": {
        "variable.$": "States.JsonToJmesPath(@.initData.variable + 1)",  // 式評価でインクリメント
        "status.$": "$.initData.status"
      },
      "ResultPath": "$.initData",
      "Next": "ChoiceState"
    },
    "ChoiceState": {
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.initData.variable",
          "NumericGreaterThanEquals": 50,
          "Next": "SuccessPass"
        },
        {
          "Variable": "$.initData.variable",
          "NumericLessThan": 50,
          "Next": "FailurePass"
        }
      ],
      "Default": "FailurePass"
    },
    "SuccessPass": {
      "Type": "Pass",
      "Result": {
        "message": "Success: Value is greater than or equal to 50"
      },
      "ResultPath": "$.resultData",
      "End": true
    },
    "FailurePass": {
      "Type": "Pass",
      "Result": {
        "message": "Failure: Value is less than 50"
      },
      "ResultPath": "$.resultData",
      "End": true
    }
  }
}

説明

  1. InitializeState:
  • Pass ステートで { "variable": 42, "status": "initialized" } を出力します。
  • ResultPath を使用して $.initData に保存。
  • 次のステートとして IncrementState に遷移。
  1. IncrementState:
  • この Pass ステートで、値をインクリメントします。
  • Parameters を使用して、States.JsonToJmesPath(@.initData.variable + 1) 式評価により variable の値を 42 から 43 に増加させます。
  • 結果を再び $.initData に保存し、次のステートとして ChoiceState に遷移。
  1. ChoiceState:
  • 増加された variable の値(43)に基づいて条件分岐します。
  • 値が 50 以上であれば SuccessPass ステートに遷移。
  • 値が 50 未満であれば FailurePass ステートに遷移。
  1. SuccessPass:
  • 成功メッセージを設定し、ステートマシンを終了。
  1. FailurePass:
  • 失敗メッセージを設定し、ステートマシンを終了。

注意点

  • States.JsonToJmesPath を使う方法はAWS Step Functionsのコンテキスト内での式評価の一例です。これはすべてのケースでサポートされているわけではないため、複雑な計算が必要な場合は、やはりLambda関数を使う方法を検討することをお勧めします。

まとめ

上記の例は、値をインクリメントするために Parameters を利用することに焦点を当てたものです。もしより複雑な操作が必要な場合は、Step Functionsの Task ステートとAWS Lambdaの併用を検討してください。これは柔軟性を持たせるために不可欠な手法です。

コメント

タイトルとURLをコピーしました