modalsoul’s blog

これは“失敗”と呼べるかもしれないが、ぼくは“学習体験”と呼びたい

AWS StepFunctionsのStateMachine内で値を引き回す方法

AWS StepFunctionsで定義したStateMachineで、実行時に与えられる値をStateを横断して参照するようなケースを考える。

ex.

以下のようなステートマシンで、実行時にparamが与えられるとき、Step2でも同じくparamを参照したい

flowchart TD Start(Start) -->|param| Step1[Step1] Step1 -->|param| Step2[Step2] Step2 --> End(End)

ResultPath

ResultPathを使うことで、InputをOutputへ引き回し、伝播させることができる

docs.aws.amazon.com

結果を破棄し、元の入力を渡す

ResultPathにnullを指定すると、実行したStateの結果を破棄し、元の入力をそのまま出力することができる

ex.)

StateMachine

{
  "StartAt": "Step1",
  "States": {
    "Step1": {
      "Type": "Pass",
      "Result": "hogefuga",
      "ResultPath": null,
      "Next": "Step2"
    },
    "Step2": {
      "Type": "Pass",
      "Result": "$.param",
      "End": true
    }
  }
}

Input

{
  "param": "input value"
}

Output

Step1の結果hogefugaが破棄され、Inputと同じ値が出力される。これでStep2でもStep1と同じInputを参照できる

{
  "param": "input value"
}

結果を入力に含める

元の入力に、指定したキーの値として実行したStateの結果を入れ、出力することができる

ex.)

StateMachine

{
  "StartAt": "Step1",
  "States": {
    "Step1": {
      "Type": "Pass",
      "Result": "hogefuga",
      "ResultPath": "$.result",
      "Next": "Step2"
    },
    "Step2": {
      "Type": "Pass",
      "Result": "$.param",
      "End": true
    }
  }
}

Input

{
  "param": "input value"
}

Output

Step1の結果hogefugaがResultPathに指定したキーresultの値としてInputに追加され出力される。

{
  "param": "input value",
  "result": "hogefuga"
}