StepFunctionsのPassステートでできることあれこれ

2021.04.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

StepFunctionsのPassステートでできることを整理してみました。

既存のパラメータをすべて捨てて、Passステートで返す新たな値だけを使う

Resultフィールドで新たな値を定義するだけです。シンプル。

ステートマシンの定義

{
  "StartAt": "PassTest",
  "States": {
    "PassTest": {
      "Type": "Pass",
      "Result": {
        "Fuga": "FugaValue"
      },
      "End": true
    }
  }
}

入力

{
  "Hoge": "HogeValue"
}

出力

{
  "Fuga": "FugaValue"
}

既存のパラメーターを残したまま、Passステートで新たな値を追加する

ResultPathフィールドで新たな値の位置を指定すれば、他の場所には既存のパラメーターが残ります。

ステートマシンの定義

{
  "StartAt": "PassTest",
  "States": {
    "PassTest": {
      "Type": "Pass",
      "Result": "FugaValue",
      "ResultPath": "$.Fuga", 
      "End": true
    }
  }
}

入力

{
  "Hoge": "HogeValue"
}

出力

{
  "Hoge": "HogeValue",
  "Fuga": "FugaValue"
}

既存のパラメーターをフィルタする

NGパターン: Resultを使う

Resultを使うと失敗します。Resultの中で動的な値は使用できないようです。

ステートマシンの定義

{
  "StartAt": "PassTest",
  "States": {
    "PassTest": {
      "Type": "Pass",
      "Result":{
        "Fuga" : "$.Fuga"
      },
      "End": true
    }
  }
}

入力

{
  "Hoge": "HogeValue",
  "Fuga": "FugaValue"
}

出力

{
  "Fuga": "$.Fuga"
}

OKパターン: Parameterを使う

Resultフィールドは使わず、Parametersフィールドで残したい値を指定します。Resultを使わない場合Parametersの値がそのままPassステートの出力になります。

ステートマシンの定義

{
  "StartAt": "PassTest",
  "States": {
    "PassTest": {
      "Type": "Pass",
      "Parameters":{
        "Fuga.$" : "$.Fuga"
      }, 
      "End": true
    }
  }
}

入力

{
  "Hoge": "HogeValue",
  "Fuga": "FugaValue"
}

出力

{
  "Fuga": "FugaValue"
}

既存のプロパティ名書き換え 他のプロパティはフィルタ

ステートマシンの定義

{
  "StartAt": "PassTest",
  "States": {
    "PassTest": {
      "Type": "Pass",
      "Parameters":{
        "Foo.$" : "$.Fuga"
      },
      "End": true
    }
  }
}

入力

{
  "Hoge": "HogeValue",
  "Fuga": "FugaValue"
}

出力

{
  "Foo": "FugaValue"
}

そのまま残したい値があるのであれば、Parameterフィールドにもとの名前のまま追記すれば良いです。

何もしない

ユースケースが思い浮かびませんが…一応ご紹介します。特に追加フィールドを定義せず、EndあるいはNextを書くだけです。

ステートマシンの定義

{
  "StartAt": "PassTest",
  "States": {
    "PassTest": {
      "Type": "Pass",
      "End": true
    }
  }
}

入力

{
  "Hoge": "HogeValue",
  "Fuga": "FugaValue"
}

出力

{
  "Hoge": "HogeValue",
  "Fuga": "FugaValue"
}

参考情報

あわせて読みたい