AWS Step Functions
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

InputPath、ResultPath 和 OutputPath 示例

Fail 状态之外的任何状态都可以包含 InputPathResultPathOutputPath。这使您可以在 JSON 流经工作流程时使用路径筛选 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-cn: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 指示状态机将 Lambda 函数的结果插入名为 lambdaresult、作为原始状态机输入中 data 节点的子级的节点中。如果没有进一步处理 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 将筛选状态输入(现在包含 Lambda 函数的结果),以便它仅将 data 节点传递到状态输出。

有关更多信息,请参阅 Step Functions 中的输入和输出处理