翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Step Functions ワークフロー ResultPath で を使用して状態出力を指定する
状態の出力は、入力のコピー、生成される結果 (例: Task
状態の Lambda 関数からの出力)、またはその入力と結果の組み合わせです。ResultPath
を使用して、上記のうち、状態出力に渡す組み合わせを制御します。
次の状態タイプでは、結果を生成できます。また、ResultPath:
を含むことができます。
ResultPath
を使用して、タスク結果とタスク入力を組み合わせるか、またはこれらのいずれかを選択します。ResultPath
に指定したパスで、出力に渡す情報を制御します。
注記
ResultPath
は参照パス の使用に制限されており、スコープは 内の 1 つのノードのみを識別できるように制限されますJSON。Amazon ステートメント言語の リファレンスパス を参照してください。
これらの例は、Lambda を使用する Step Functions ステートマシン状態の作成 チュートリアルに記述されているステートマシンおよび Lambda 関数に基づきます。上記のチュートリアルを実行し、出力をテストするには、ResultPath
フィールドにさまざまなパスを入力します。
ResultPath を使用して:
ヒント
Step Functions コンソールのデータフローシミュレータ
ResultPath を使用して入力を結果に置き換える
ResultPath
を指定しない場合、デフォルトの動作は、"ResultPath": "$"
を指定した場合と同様になります。上記の場合、入力全体を結果に置き換えるように状態に指示されるため、状態入力は、タスク結果によって生じる結果によって完全に置き換えられます。
次の図は、ResultPath
によって、入力がタスクの結果に完全に置き換えられる様子を表します。
で説明されているステートマシンと Lambda 関数を使用しLambda を使用する Step Functions ステートマシン状態の作成、サービス統合タイプを Lambda 関数AWS SDKの統合に変更します。これを行うには、次の例に示すように、 Task
状態の Resource
フィールドに Lambda 関数の Amazon リソースネーム (ARN) を指定します。統合を使用すると AWS SDK、Task
状態結果にメタデータなしで Lambda 関数の出力のみが含まれるようになります。
{
"StartAt":"CallFunction",
"States":{
"CallFunction": {
"Type":"Task",
"Resource":"arn:aws:lambda:us-east-2:123456789012:function:HelloFunction",
"End": true
}
}
}
次に、次の入力を渡します。
{ "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!"
ヒント
この結果は、Step Functions コンソール
ResultPath
が状態で指定されていない場合、または "ResultPath":
"$"
が設定されている場合、状態の入力は、Lambda 関数の結果に置き換えられます。また、状態の出力は次のとおりです。
"Hello, AWS Step Functions!"
注記
ResultPath
は、結果の内容を入力に含むために、出力に渡す前に使用します。ただし、ResultPath
が指定されていない場合、デフォルトで入力全体が置き換えられます。
結果を破棄し、元の入力を保持する
ResultPath
を null
に設定すると、元の入力が出力に渡されます。"ResultPath": null
を使用すると、状態の入力ペイロードは、結果に関係なく、出力に直接コピーされます。
次の図は、null ResultPath
が入力を直接出力にコピーする方法を示しています。
ResultPath を使用して入力に結果を含める
次の図は、ResultPath
を使用して結果を入力に含める方法を示します。
Lambda を使用する Step Functions ステートマシン状態の作成 チュートリアルで述べられているステートマシンおよび 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ノードの値をタスク結果の値で更新する方法を示しています。
Lambda を使用する Step Functions ステートマシン状態の作成 チュートリアルのステートマシンおよび 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 ステートマシンを使用してエラー条件を処理する チュートリアルでは、ステートマシンを使用してエラーを検出する方法を示します。場合によっては、元の入力をエラーとともに保持する場合があります。Catch
の ResultPath
を使用して、エラーを置き換えずに元の入力に含めます。
"Catch": [{ "ErrorEquals": ["States.ALL"], "Next": "NextTask", "ResultPath": "$.error" }]
前の Catch
ステートメントでエラーが検出された場合は、状態入力の error
ノードに結果が含まれます。例えば、次の入力を示します。
{"foo": "bar"}
エラー検出時の状態出力は次のようになります。
{ "foo": "bar", "error": { "Error": "
Error here
" } }
エラー処理の詳細については、以下を参照してください。