翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
InputPath、ResultPath、OutputPath の例
失敗 状態または 成功 状態以外のすべての状態には、InputPath
、ResultPath
、OutputPath
などの入力および出力処理フィールドを含めることができます。また、待機 および 選択 状態は ResultPath
フィールドをサポートしていません。これらのフィールドを使用すると、JSJsonPath
Parameters
フィールドを使用して、JSON データがワークフロー内を移動する際にそのデータを操作することもできます。Parameters
の使用の詳細については、「InputPath、パラメータ、 ResultSelector」を参照してください。
例えば、AWS Lambda チュートリアルに示す Lambda を使用する Step Functions ステートマシン状態の作成 関数とステートマシンから開始します。次の InputPath
、ResultPath
、OutputPath
が含まれるように、ステートマシンを変更します。
{
"Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function",
"StartAt": "HelloWorld",
"States": {
"HelloWorld": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloFunction
",
"InputPath": "$.lambda",
"ResultPath": "$.data.lambdaresult",
"OutputPath": "$.data",
"End": true
}
}
}
次の入力を使用して実行を開始します。
{
"comment": "An input comment.",
"data": {
"val1": 23,
"val2": 17
},
"extra": "foo",
"lambda": {
"who": "AWS Step Functions"
}
}
comment
と extra
ノードは破棄できますが、Lambda 関数の出力を含め、data
ノードに情報を保存したいと思っています。
更新されたステートマシンで、Task
状態は、タスクへの入力を処理するように変更されます。
"InputPath": "$.lambda",
ステートマシン定義のこの行によって、タスク入力は、状態入力から lambda
ノードのみに制限されます。Lambda 関数は、入力として JSON オブジェクト ({"who": "AWS Step Functions"}
) のみを受信します。
"ResultPath": "$.data.lambdaresult",
この ResultPath
は、元のステートマシン入力の data
ノードの子として、Lambda 関数の結果を lambdaresult
という名前のノードに挿入するよう指示します。元の入力および OutputPath
を使った結果に対してこれ以上処理を実行しないため、状態の出力には元の入力を使った Lambda 関数の結果が含まれます。
{
"comment": "An input comment.",
"data": {
"val1": 23,
"val2": 17,
"lambdaresult": "Hello, AWS Step Functions!"
},
"extra": "foo",
"lambda": {
"who": "AWS Step Functions"
}
}
しかし、目的は data
ノードのみを保持し、Lambda 関数の結果を含めることです。OutputPath
を使用して、状態出力に渡す前に、結合されたこの JSON をフィルタリングします。
"OutputPath": "$.data",
これにより、出力に渡される、元の入力の data
ノード (例: lambdaresult
によって挿入される ResultPath
の子) のみ選択されます。状態出力は、次のようにフィルタリングされます。
{
"val1": 23,
"val2": 17,
"lambdaresult": "Hello, AWS Step Functions!"
}
この Task
状態では次のようになります。
-
InputPath
では、Lambda 関数への入力からlambda
ノードのみ送信します。 -
ResultPath
では、元の入力のdata
ノードの子として結果を挿入します。 -
OutputPath
では、data
ノードのみが状態出力に渡されるように、状態入力 (現在は Lambda 関数の結果が含まれる) がフィルタリングされます。
例 JsonPath を使用して、元のステートマシンの入力、結果、最終出力を操作する
保険申請者の身元と住所を検証する以下のステートマシンを考えてみましょう。
注記
完全な例を表示するには、「Step Functions での JSON パスの使用方法
{ "Comment": "Sample state machine to verify an applicant's ID and address", "StartAt": "Verify info", "States": { "Verify info": { "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "Verify identity", "States": { "Verify identity": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:
check-identity
:$LATEST" }, "End": true } } }, { "StartAt": "Verify address", "States": { "Verify address": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:check-address
:$LATEST" }, "End": true } } } ] } } }
次の入力を使用してこのステートマシンを実行すると、検証を実行する Lambda 関数は検証が必要なデータのみを入力として想定するため、実行は失敗します。そのため、適切な JsonPath を使用して検証する情報を含むノードを指定する必要があります。
{ "data": { "firstname": "Jane", "lastname": "Doe", "identity": { "email": "jdoe@example.com", "ssn": "123-45-6789" }, "address": { "street": "123 Main St", "city": "Columbus", "state": "OH", "zip": "43219" }, "interests": [ { "category": "home", "type": "own", "yearBuilt": 2004 }, { "category": "boat", "type": "snowmobile", "yearBuilt": 2020 }, { "category": "auto", "type": "RV", "yearBuilt": 2015 }, ] } }
Lambda 関数が使用する必要があるノードを指定するには、以下のように check-identity
InputPath
フィールドを使用します。
"InputPath": "$.data.identity"
加えて、
Lambda 関数が使用する必要があるノードを指定するには、以下のように check-address
InputPath
フィールドを使用します。
"InputPath": "$.data.address"
ここで、検証結果を元のステートマシン入力内に保存する場合は、以下のように ResultPath
フィールドを使用します。
"ResultPath": "$.results"
ただし、ID と検証の結果のみが必要で、元の入力を破棄する場合は、以下のように OutputPath
フィールドを使用します。
"OutputPath": "$.results"
詳細については「Step Functions の入出力処理」を参照してください。