AWS Step Functions
開発者ガイド

InputPath、ResultPath、および OutputPath

Fail を除く状態にはいずれも、InputPathResultPath、または OutputPath を含むことができます。これらの状態では、JSON がワークフロー内を移動する際にパスを使用してフィルタリングすることができます。

たとえば、Lambda ステートマシンを作成する チュートリアルに示す AWS Lambda 関数とステートマシンから開始します。次の InputPathResultPathOutputPath が含まれるように、ステートマシンを変更します。

{ "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" } }

commentextra ノードは破棄できるが、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 ノード (例: ResultPath によって挿入される lambdaresult の子) のみ選択されます。状態出力は、次のようにフィルタリングされます。

{ "val1": 23, "val2": 17, "lambdaresult": "Hello, AWS Step Functions!" }

この Task 状態では次のようになります。

  1. InputPath では、Lambda 関数への入力から lambda ノードのみ送信されます。

  2. ResultPath では、元の入力の data ノードの子として結果を挿入します。

  3. OutputPath では、data ノードのみ状態出力に渡されるように、状態入力 (現在は Lambda 関数の結果が含まれる) がフィルタリングされます。

詳細については、「Step Functions の入出力処理」を参照してください。