ResultPath - AWS Step Functions

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ResultPath

状態の出力は、入力のコピー、生成される結果 (例: Task 状態の Lambda 関数からの出力)、またはその入力と結果の組み合わせです。ResultPath を使用して、上記のうち、状態出力に渡す組み合わせを制御します。

次の状態タイプでは、結果を生成できます。また、ResultPath: を含むことができます。

ResultPath を使用して、タスク結果とタスク入力を組み合わせるか、またはこれらのいずれかを選択します。ResultPath に指定したパスで、出力に渡す情報を制御します。

注記

ResultPath では、リファレンスパスの使用を制限します。これにより、JSON の単一ノードのみ識別できるように範囲を制限できます。Amazon ステートメント言語リファレンスパス を参照してください。

これらの例は、Step Functions ステートを作成するマシンLambda の使用 チュートリアルに記述されているステートマシンおよび Lambda 関数に基づきます。上記のチュートリアルを実行し、出力をテストするには、ResultPath フィールドにさまざまなパスを入力します。

ヒント

Step Functions コンソールのデータフローシミュレータを使用して、JSON パス構文をテストし、状態 、 の中でデータの操作方法に関する理解を深め、状態の間でのデータを渡す方法を確認します。

ResultPath を使用して結果で入力を置き換える

ResultPath を指定しない場合、デフォルトの動作は、"ResultPath": "$" を指定した場合と同様になります。上記の場合、入力全体を結果に置き換えるように状態に指示されるため、状態入力は、タスク結果によって生じる結果によって完全に置き換えられます。

次の図は、ResultPath によって、入力がタスクの結果に完全に置き換えられる様子を表します。


        入力を ResultPath に置き換える

Step Functions ステートを作成するマシンLambda の使用 に述べられているステートマシンおよび Lambda 関数を使用する (以下の入力を渡す場合):

{ "comment": "This is a test of the input and output of a Task state.", "details": "Default example", "who": "AWS Step Functions" }

Lambda 関数では、以下のような結果が生成されます。

"Hello, AWS Step Functions!"

ResultPath が状態で指定されていない場合、または "ResultPath": "$" が設定されている場合、状態の入力は、Lambda 関数の結果に置き換えられます。また、状態の出力は次のとおりです。

"Hello, AWS Step Functions!"
注記

ResultPath は、結果の内容を入力に含むために、出力に渡す前に使用します。ただし、ResultPath が指定されていない場合、デフォルトで入力全体が置き換えられます。

結果を破棄し、元の入力を保持する

ResultPathnull に設定すると、元の入力が出力に渡されます。"ResultPath": null を使用すると、状態の入力ペイロードは、結果に関係なく、出力に直接コピーされます。

次の図は、null ResultPath が入力を直接出力にコピーする方法を示しています。


        ResultPath を使用して入力を出力にコピーします。

ResultPath を使用して結果を入力に含める

次の図は、ResultPath を使用して結果を入力に含める方法を示します。


        入力を ResultPath に含める

Step Functions ステートを作成するマシンLambda の使用 チュートリアルで述べられているステートマシンおよび Lambda 関数を使用して、以下の入力を渡すことができます。

{ "comment": "This is a test of the input and output of a Task state.", "details": "Default example", "who": "AWS Step Functions" }

Lambda 関数の結果は次のとおりです。

"Hello, AWS Step Functions!"

入力を保持するには、Lambda 関数の結果を挿入し、結合された JSON を次の状態に渡すために、次のように ResultPath を設定できます。

"ResultPath": "$.taskresult"

こうすると、元の入力がある Lambda 関数の結果が含められます。

{ "comment": "This is a test of input and output of a Task state.", "details": "Default behavior example", "who": "AWS Step Functions", "taskresult": "Hello, AWS Step Functions!" }

Lambda 関数の出力は、taskresult の値として元の入力に付加されます。新しく挿入された値を含む入力は、次の状態に渡されます。

また、その結果を入力の子ノードに挿入することもできます。ResultPath を以下のように設定します。

"ResultPath": "$.strings.lambdaresult"

次の入力を使用して実行を開始します。

{ "comment": "An input comment.", "strings": { "string1": "foo", "string2": "bar", "string3": "baz" }, "who": "AWS Step Functions" }

Lambda 関数の結果は、入力の strings ノードの子として挿入されます。

{ "comment": "An input comment.", "strings": { "string1": "foo", "string2": "bar", "string3": "baz", "lambdaresult": "Hello, AWS Step Functions!" }, "who": "AWS Step Functions" }

状態出力によって、子ノードとしての結果に元の入力 JSON が含まれるようになりました。

ResultPath を使用して、入力のノードを結果に更新する

次の図は、ResultPath を使用して、入力の既存 JSON ノードの値をタスク結果の値に更新する方法を示します。


        入力を ResultPath に置き換える

Step Functions ステートを作成するマシンLambda の使用 チュートリアルのステートマシンおよび Lambda 関数の例を使用して、 以下の入力を渡すことができます。

{ "comment": "This is a test of the input and output of a Task state.", "details": "Default example", "who": "AWS Step Functions" }

Lambda 関数の結果は次のとおりです。

Hello, AWS Step Functions!

入力を保存し、その結果を JSON の新しいノードとして挿入せずに、既存のノードを上書きすることができます。

例えば、"ResultPath": "$" を省略または設定するとノード全体が上書きされるため、個々のノードを指定して結果を上書きすることができます。

"ResultPath": "$.comment"

comment ノードは状態入力に存在しているため、ResultPath"$.comment" に設定すると、入力のノードは、Lambda 関数の結果に置き換えられます。OutputPath でフィルタリングしない場合、以下が出力に渡されます。

{ "comment": "Hello, AWS Step Functions!", "details": "Default behavior example", "who": "AWS Step Functions", }

comment ノードの値である "This is a test of the input and output of a Task state." は、Lambda 関数の結果 (状態出力の "Hello, AWS Step Functions!") によって置き換えられます。

ResultPath を使用して、エラーと入力の両方を Catch に含める

Step Functions ステートマシンを使用してエラー条件を処理する チュートリアルでは、ステートマシンを使用してエラーを検出する方法を示します。場合によっては、元の入力をエラーとともに保持する場合があります。CatchResultPath を使用して、エラーを置き換えずに元の入力に含めます。

"Catch": [{ "ErrorEquals": ["States.ALL"], "Next": "NextTask", "ResultPath": "$.error" }]

前の Catch ステートメントでエラーが検出された場合は、状態入力の error ノードに結果が含まれます。例えば、次の入力を示します。

{"foo": "bar"}

エラー検出時の状態出力は次のようになります。

{ "foo": "bar", "error": { "Error": "Error here" } }

エラー処理の詳細については、以下を参照してください。