- 開発技術
- クラウド技術
AWS StepFunctionsでJSONPathからJSONataへの変換例
- #AWS

JSONPath(ジェイソンパス)やJSONata(ジェイソナタ)とは
【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc. 詳細はこちらから>
JSONPathとは従来StepFunctionsでサポートされている言語です。一方JSONataは2024年にStepFunctionsでサポートが開始された言語でよりシンプルに記載ができる言語です。
詳しくは以下を参照
AWS Step Functions が Variables と JSONata の変換で開発者のエクスペリエンスを簡素化 – AWS
AWS StepFunctionsとは
AWSのサーバーレスシステムでありLambdaやS3など他AWSシステムとの連携を行うことができます。様々なシステムをパズルのように組み合わせて構築ができるので視覚的にフローが理解しやすく、コードに詳しくなくてもシステムを組みやすいです。また細かい設定を行う際はコードの形式に切り替えることもでき、応用性も優れています。
詳しくは以下の公式サイトを参照
Step Functions とは – AWS Step Functions
Mapstateでの変換例
今回はStepFunctions内でループ処理を行うMapStateを例として扱います。処理の内容としては入力された
1 |
[job1,job2] |
という2つのジョブを2回GlueDataBrewのジョブを並列で実行することで処理を行うものです。
JSONPath
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
"マップステート": { "Type": "Map", "ItemsPath": "$.input", "ItemProcessor": { "ProcessorConfig": { "Mode": "INLINE" }, "StartAt": "ジョブ実行", "States": { "ジョブ実行": { "Type": "Task", "Resource": "arn:aws:states:::databrew:startJobRun.sync", "Parameters": { "Name.$": "$.input" }, "ResultSelector": { "OutputPath.$": "States.Format('output/{}_20250722.csv', $.Name)" }, "OutputPath": "$.OutputPath", "End": true } } }, "Next": "次のステートへ" } |
JSONata
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
"マップステート": { "Type": "Map", "ItemProcessor": { "ProcessorConfig": { "Mode": "INLINE" }, "StartAt": "ジョブ実行", "States": { "ジョブ実行": { "Type": "Task", "Resource": "arn:aws:states:::databrew:startJobRun.sync", "Arguments": { "Name": "{% $states.input %}" }, "Output": "{% 'output/' & $states.input & '_20250722.csv' %}", "End": true } } }, "Next": "次のステートへ", "Items": "{% $states.input %}" } |
見比べてみるとJSONPathもJSONataも全体的に大きくは変わらないですが出力(Output)の部分で異なっています。JSONPathではoutput/job1_20250722.csvを出力する際ResultSelectorを利用しています。ResultSelectorは値を加工するために利用する機能です。今回の場合だとState.Formatで入力値をファイルパスの中央に入れる加工を行っています。しかしその際中央に入れるはずの入力値を最後に記載する形式になっています。
一方JSONataではResultSelectorやState.Formatなどの機能はありません。代わりにoutput内で簡潔に記載が可能になっています。ファイルパスのフォーマットも直感的にわかる形式になっています。今回はMapState単体の例を挙げましたがより複雑で大規模なシステムになるとJSONataはよりシンプルに記載できるためエラーを発見しやすく、整備性にも優れています。まだ実際の例自体は少ないですがAWS公式もJSONataを推奨していることもあり、今後はJSONataの作例が増えて作成しやすくなっていくはずです。
【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>