SFNをインクリメントするラムダ使う方法

もちろん、AWS Step Functionsで値をインクリメントするために、Taskステートを使用してAWS Lambda関数を呼び出す方法を説明します。

このプロセスの概要は以下の通りです:

  1. Lambda関数を使用して値をインクリメントする。
  2. Step FunctionsでそのLambda関数を呼び出し、結果を次のステートに渡す。

ステップごとの詳細

1. Lambda関数の作成

まず、値をインクリメントするためのシンプルなLambda関数を作成します。以下はPythonの例です。

import json

def lambda_handler(event, context):
    # 入力値を取得
    variable = event['variable']
    # 値をインクリメント
    variable += 1
    # 結果を返す
    return {
        'variable': variable,
        'status': event['status']
    }

このLambda関数は、入力イベントのvariableの値をインクリメントし、結果を返します。

2. Step Functionsの定義

次に、このLambda関数を使用して値をインクリメントするStep Functionsのステートマシンを定義します。

{
  "Comment": "State machine to pass values through Pass, Task and Choice states with incrementation",
  "StartAt": "InitializeState",
  "States": {
    "InitializeState": {
      "Type": "Pass",
      "Result": {
        "variable": 42,
        "status": "initialized"
      },
      "ResultPath": "$.initData",
      "Next": "IncrementTask"
    },
    "IncrementTask": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:IncrementFunction",  // 実際のLambda関数のARN
      "InputPath": "$.initData",
      "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 に保存。
  • 次のステートとして IncrementTask に遷移。
  1. IncrementTask:
  • Task ステートで、リソースとしてLambda関数のARNを指定します。
  • InputPath を使用して $.initData をLambda関数の入力として渡します。
  • ResultPath を使用してLambda関数の出力を再度 $.initData に保存し、次のステートとして ChoiceState に遷移。
  1. ChoiceState:
  • 増加された variable の値(ここでは 42 + 1 = 43) に基づいて条件分岐を行います。
  • 値が 50 以上であれば SuccessPass ステートに遷移。
  • 値が 50 未満であれば FailurePass ステートに遷移。
  1. SuccessPass:
  • 成功メッセージを設定し、ステートマシンを終了します。
  1. FailurePass:
  • 失敗メッセージを設定し、ステートマシンを終了します。

詳細

  • Task ステート
  • Resource フィールドでLambda関数のARNを指定。
  • InputPath を使って前のステートの出力をLambda関数の入力に渡します。
  • ResultPath を使ってLambda関数の出力を次のステートに渡す準備をします。

結果

このステートマシンを実行すると、最初に InitializeState で値が42に初期化され、その後 IncrementTask によってLambda関数が呼び出され変数が43にインクリメントされます。そして最後に ChoiceState で変数の値に基づいて条件分岐が行われます。

これによって、Lambda関数を使用してStep Functions内で値をインクリメントする方法がわかりました。もし、より複雑なロジックが必要な場合は、追加のステートやLambda関数を組み合わせることで対応可能です。

コメント

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