本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
ResultPath
状态的输出可以是其输入的副本、其生成的结果(例如,Task
状态的 Lambda 函数的输出)或其输入和结果的组合。使用 ResultPath
可控制传递到状态输出的上述两种内容的组合。
以下状态类型可以生成结果且包含 ResultPath:
使用 ResultPath
可将任务结果与任务输入组合,或可选择二者之一。提供给 ResultPath
的路径控制将传递到输出的信息。
这些示例基于创建使用 Lambda 的 Step Functions 状态机教程中描述的状态机和 Lambda 函数。演练此教程并通过在 ResultPath
字段中尝试不同的路径来测试不同的输出。
可使用 ResultPath 执行以下操作:
使用 Ste p Functions 控制台中的数据流模拟器
用于 ResultPath 将输入替换为结果
如果没有指定 ResultPath
,则默认行为是已指定 "ResultPath": "$"
。由于这将指示状态将整个输入替换为结果,因此状态输入将由来自任务结果的结果完全替换。
下图显示了 ResultPath
如何将输入完全替换为任务的结果。

使用中描述的状态机和 Lambda 函数创建使用 Lambda 的 Step Functions 状态机,将 Lambda 函数的服务集成类型更改为Amazon SDK 集成。为此,请在Task
状态Resource
字段中指定 Lambda 函数的 Amazon Resource Name (ARN) 的 Amazon Resource Name (ARN)。使用Amazon 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!"
如果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
节点的值被状态输出中的 Lambda 函数:的结果"Hello, AWS
Step Functions!"
所取代。"This is a test of the input and output
of a Task state."
ResultPath 用于在 a 中同时包含错误和输入Catch
使用 Step Functions 状态机处理错误情形教程演示如何使用状态机捕获错误。在某些情况下,您可能希望保留原始输入与错误。在 Catch
中使用 ResultPath
可包含错误与原始输入,而不是替换它。
"Catch": [{ "ErrorEquals": ["States.ALL"], "Next": "NextTask", "ResultPath": "$.error" }]
如果上一 Catch
语句捕获错误,则它将在状态输入的 error
节点中包含结果。例如,对于以下输入:
{"foo": "bar"}
捕获错误时,状态输出为以下内容。
{ "foo": "bar", "error": { "Error": "
Error here
" } }
有关错误处理的更多信息,请参阅以下内容: