👌
Step Functions 変数をJSONataとJSONPathで使う例
AWS Step Functionsで最近発表された「変数」を使用する場合、使用するステートマシンクエリ言語がJSONataかJSONPathかによって記法が大きく変わります。公式ドキュメントで変数を使用するステートマシンの例はほとんどJSONataで書かれているため、特にJSONPathで変数を使用する際には注意が必要です。
JSONataで変数を使う
JSONataで変数を参照するには、$x
や$order.numItems
のように変数名の前に$
を使用します。値として変数を使用するには、{% $x %}
のようにします。JSONataにおいて{% ... %}
は変数を含むことを示します。
変数$states
はStep Functionsによって予約済みです。
ステートマシン例
{
"QueryLanguage": "JSONata",
"StartAt": "GetSomeData",
"States": {
"GetSomeData": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Arguments": {
"FunctionName": "function-1",
"Payload": "{% $states.input %}"
},
"Assign": {
"taskResult": "{% $states.result %}",
"functionOutput": "{% $states.result.Payload %}"
},
"Next": "DoSomething"
},
"DoSomething": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Arguments": {
"FunctionName": "function-2",
"Payload": {
"function_output": "{% $functionOutput %}",
"status_code": "{% $taskResult.StatusCode %}"
}
},
"End": true
}
}
}
JSONPathで変数を使う
JSONPathで変数を参照するには、$x
や$order.numItems
のように変数名の前に$
を使用します。値として変数を使用するには、key.$
のようにキー名の最後に.$
を使用します。
変数の割り当て(Assign
)において、$
はタスクの結果を表します。タスクが無いステートでは、InputPath
でフィルターされた値や、ステートへの入力などになります。詳細は下図のとおりです。
ステートマシン例
{
"QueryLanguage": "JSONPath",
"StartAt": "GetSomeData",
"States": {
"GetSomeData": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"FunctionName": "function-1",
"Payload.$": "$"
},
"Assign": {
"taskResult.$": "$",
"functionOutput.$": "$.Payload"
},
"Next": "DoSomething"
},
"DoSomething": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"FunctionName": "function-2",
"Payload": {
"function_output.$": "$functionOutput",
"status_code.$": "$taskResult.StatusCode"
}
},
"End": true
}
}
}
参考
あとがき
動作未確認です。間違っていたら教えていただけると助かります。
Discussion