AWS Step Functionsでは実は使えないJSONata関数がある

AWS Step Functionsでは実は使えないJSONata関数がある

2025.09.29

こんにちは。サービス開発室の武田です。

AWS Step FunctionsのJSONata使ってますか?(挨拶)

全体をいきなり置き換えるのはたいへんですので、ステート1個ずつから始めていくと導入しやすいです。

さて、実はStep Functionsは独自にJSONataの関数を追加しており、逆に使えない関数があることをご存じでしょうか?今回はそれらの関数を紹介します。

Step Functionsに追加された独自JSONata関数

Step Functionsでは次の6個のJSONata関数が追加されています。

1. $partition - 配列の分割

States.ArrayPartitionの代替となる関数です。大きな配列を指定したサイズのチャンクに分割します。

			
			{
  "Assign": {
    "arrayPartition": "{% $partition([1, 2, 3, 4, 5, 6, 7, 8, 9], 3) %}"
  }
}

		

上記の例では、[[1, 2, 3], [4, 5, 6], [7, 8, 9]]という2次元配列が生成されます。最後のチャンクは指定サイズより小さくなることがあります。

2. $range - 連続値配列の生成

States.ArrayRangeの代替となる関数です。開始値、終了値、ステップ値を指定して配列を生成します。

			
			{
  "Assign": {
    "evenNumbers": "{% $range(0, 10, 2) %}"
  }
}

		

この例では[0, 2, 4, 6, 8, 10]が生成されます。ステップ値を負数にすることで、逆順の配列も作成できます。

3. $hash - ハッシュ値の計算

States.Hashの代替となる関数です。文字列のハッシュ値を計算します。

			
			{
  "Assign": {
    "contentHash": "{% $hash($states.input.content, 'SHA-256') %}"
  }
}

		

サポートされているアルゴリズムは次のとおりです。

  • MD5
  • SHA-1
  • SHA-256
  • SHA-384
  • SHA-512

4. $random - 乱数生成(シード対応)

States.MathRandomの代替となる関数です。標準JSONataの$random関数とは異なり、シード値を受け付けます。

			
			{
  "Assign": {
    "randNoSeed": "{% $random() %}",
    "randSeeded": "{% $random($states.input.seed) %}"
  }
}

		

シード値を使用することで、同じシードからは常に同じ乱数が生成され、テスト時の再現性を確保できます。

5. $uuid - UUID生成

States.UUIDの代替となる関数です。バージョン4のUUIDを生成します。

			
			{
  "Assign": {
    "requestId": "{% $uuid() %}"
  }
}

		

6. $parse - JSON文字列のパース

文字列化されたJSONをオブジェクトに変換します。標準JSONataでは$evalが同様の機能を提供しますが、Step Functionsでは$evalがサポートされていないため、代替として用意されています。

			
			{
  "Assign": {
    "parsedData": "{% $parse($states.input.json_string) %}"
  }
}

		

Step Functionsで使えないJSONata関数

$eval - 式の動的評価

セキュリティ上の懸念から、動的なコード実行は 無効化 されています。先ほど少し書きましたが、代替として、JSON文字列のパースには$parse関数を使用しましょう。

まとめ

特に覚えておきたいのは$eval関数が無効化されていることです。JSON文字列をパースしたい場合は$parse関数を使うことになりますので、ぜひ覚えておきましょう!

参考URL

この記事をシェアする

FacebookHatena blogX

関連記事

AWS Step Functionsでは実は使えないJSONata関数がある | DevelopersIO