在 Step Functions 中使用 ResultPath 指定状态输出 - AWS Step Functions

在 Step Functions 中使用 ResultPath 指定状态输出

管理状态和转换数据

本页指的是 JSONPath。Step Functions 最近添加了变量和 JSONata 来管理状态和转换数据。

了解如何使用变量传递数据使用 JSONata 转换数据

状态的输出可以是其输入的副本、其生成的结果(例如,Task 状态的 Lambda 函数的输出)或其输入和结果的组合。使用 ResultPath 可控制传递到状态输出的上述两种内容的组合。

以下状态类型可以生成结果且包含 ResultPath:

使用 ResultPath 可将任务结果与任务输入组合,或可选择二者之一。提供给 ResultPath 的路径控制将传递到输出的信息。

注意

ResultPath 仅限于使用引用路径,这会限制其范围,因此该路径必须仅标识 JSON 中的单一节点。请参阅 Amazon States Language 中的 引用路径

使用 ResultPath 将输入替换为任务结果

如果未指定 ResultPath,则默认行为与 "ResultPath": "$" 相同。该状态会将整个状态输入替换为任务结果。

# State Input { "comment": "This is a test", "details": "Default example", "who" : "Step Functions" } # Path "ResultPath": "$" # Task result "Hello, Step Functions!" # State Output "Hello, Step Functions!"
注意

ResultPath 用于包含结果内容与输入,然后再将其传递到输出。但是,如果未指定 ResultPath,则默认操作为替换整个输入。

丢弃结果并保留原始输入

如果将 ResultPath 设置为 null,则该状态会将原始输入传递给输出。该状态的输入有效载荷将直接复制到输出中,而不考虑任务结果。

# State Input { "comment": "This is a test", "details": "Default example", "who" : "Step Functions" } # Path "ResultPath": null # Task result "Hello, Step Functions!" # State Output { "comment": "This is a test", "details": "Default example", "who" : "Step Functions" }

使用 ResultPath 包含结果与输入

如果您为 ResultPath 指定一条路径,则状态输出将合并状态输入和任务结果:

# State Input { "comment": "This is a test", "details": "Default example", "who" : "Step Functions" } # Path "ResultPath": "$.taskresult" # Task result "Hello, Step Functions!" # State Output { "comment": "This is a test", "details": "Default example", "who" : "Step Functions", "taskresult" : "Hello, Step Functions!" }

还可以将结果插入输入的子节点。将 ResultPath 设置为以下内容。

"ResultPath": "$.strings.lambdaresult"

如果使用以下输入:

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

任务结果将作为输入中 strings 节点的子节点插入。

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

状态输出现在包含原始输入 JSON 与作为子节点的结果。

使用 ResultPath 将输入中的节点更新为结果

如果您为 ResultPath 指定一个现有节点,则任务结果将替换该现有节点:

# State Input { "comment": "This is a test", "details": "Default example", "who" : "Step Functions" } # Path "ResultPath": "$.comment" # Task result "Hello, Step Functions!" # State Output { "comment": "Hello, Step Functions!", "details": "Default example", "who" : "Step Functions" }

使用 ResultPath 在 Catch 中包含错误和输入

在某些情况下,您可能希望保留原始输入与错误。在 ResultPath 中使用 Catch 可包含错误与原始输入,而不是替换它。

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

如果上一 Catch 语句捕获错误,则它将在状态输入的 error 节点中包含结果。例如,对于以下输入:

{"foo": "bar"}

捕获错误时,状态输出为以下内容。

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

有关错误处理的更多信息,请参阅以下内容: