🕌

StepFunctionsのChoice検証メモ

2024/07/28に公開

ここで書いていること

AWS StepFunctions の Choise の使い方を確認したので、忘れないようにここにメモする。

作ったもの

このようにLambda関数の実行結果から受け取った値をChoiceで分岐判定します。

Choiseの判定はこのようになっていて、val要素の値がhogeなのかどうかが分岐判定になります。

Lambda関数について

このStepFunctionsステートマシンにより実行するLambda関数のPythonスクリプトです。
returnで返す値が、StepFunctions ステートマシン に渡される値になります。

import json

def lambda_handler(event, context):
    retVal = event["val"]
    
    return {
        'statusCode': 200,
        'val': retVal
    }

Lambda関数実行時に渡す引数を{"val": "hoge"}とすると、変数retValに"hoge"が格納され、returnで返す値は以下のようになります。

{
    'statusCode': 200,
    'val': "hoge"
}

動作検証

StepFunctionsステートマシンを実行し挙動を確認します。

検証①:val="hoge" で実行

StepFunctionsステートマシン実行時に渡す引数をこのようにします。

実行結果はこちら、期待通り Pass-hoge を通りました

検証②:val="fuga" で実行

StepFunctionsステートマシン実行時に渡す引数をこのようにします。

実行結果はこちら、期待通り Pass-NotHoge を通りました

(おまけ)StepFunctionsのソース

今回検証で作ったStepFunctionsステートマシンのソースです。

{
  "Comment": "A description of my state machine",
  "StartAt": "Lambda Invoke",
  "States": {
    "Lambda Invoke": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "OutputPath": "$.Payload",
      "Parameters": {
        "Payload.$": "$",
        "FunctionName": "arn:aws:lambda:ap-northeast-1:123456789012:function:sample:$LATEST"
      },
      "Retry": [
        {
          "ErrorEquals": [
            "Lambda.ServiceException",
            "Lambda.AWSLambdaException",
            "Lambda.SdkClientException",
            "Lambda.TooManyRequestsException"
          ],
          "IntervalSeconds": 1,
          "MaxAttempts": 3,
          "BackoffRate": 2
        }
      ],
      "Next": "Choice"
    },
    "Choice": {
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.val",
          "StringEquals": "hoge",
          "Next": "Pass-hoge"
        }
      ],
      "Default": "Pass-NotHoge"
    },
    "Pass-hoge": {
      "Type": "Pass",
      "End": true
    },
    "Pass-NotHoge": {
      "Type": "Pass",
      "End": true
    }
  }
}

以上です。


LambdaからStepFunctionsに値を渡す方法と、Choiseの判定は忘れがちなのでメモできてよかった。

Discussion