为状态配置输入和输出 - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

为状态配置输入和输出

每个状态都根据接收的输入做出决定或执行操作。在大多数情况下,该状态会将输出传递到其他状态。在 Workflow Studio 中,可以在 Inspector 面板的输入输出选项卡中配置状态如何筛选和操作其输入和输出数据。配置输入和输出时,使用信息链接访问上下文帮助。


        输入、输出和帮助面板

有关 Step Functions 如何处理输入和输入的详细信息,请参阅 Step Functions 中的输入和输出处理

配置状态的输入

每个状态都以 JSON 形式接收来自前一个状态的输入。如果要筛选输入,可以使用 Inspector 面板中输入选项卡下的 InputPath 筛选条件。InputPath 是一个以 $ 开头的字符串,用于标识特定 JSON 节点。它们被称为引用路径,它们遵循 JsonPath 语法。


          输入选项

要筛选输入,请进行以下操作:

  • 选择 “筛选输入” InputPath。

  • JsonPathInputPath筛选器输入有效的值。例如,$.data

InputPath 筛选条件将添加到您的工作流中。

例 示例 1:在工作流工作室中使用 InputPath 过滤器

假设状态的输入包含以下 JSON 数据。

{ "comment": "Example for InputPath", "dataset1": { "val1": 1, "val2": 2, "val3": 3 }, "dataset2": { "val1": "a", "val2": "b", "val3": "c" } }

要应用InputPath过滤器,请选择 “筛选输入” InputPath,然后输入相应的参考路径。如果您输入 $.dataset2.val1,则以下 JSON 将作为输入传递给状态。

{"a"}

参考路径也可以选择值。如果您引用的数据是 { "a": [1, 2, 3, 4] },并且您应用引用路径 $.a[0:2] 作为 InputPath 筛选条件,则结果如下。

[ 1, 2 ]

ParallelMapPass 流状态在其输入选项卡下还有一个名为 Parameters 的输入筛选选项。此过滤器在过滤 InputPath 器之后生效,可用于构造由一个或多个键值对组成的自定义 JSON 对象。每对的值可以是静态值,可从输入中选择,也可通过路径从Context 对象中选择。

注意

要指定参数使用引用路径指向输入中的 JSON 节点,请使用 .$ 作为参数名称的结尾。

例 示例 2:为 Parallel 状态创建自定义 JSON 输入

假设以下 JSON 数据是一个 Parallel 状态的输入。

{ "comment": "Example for Parameters", "product": { "details": { "color": "blue", "size": "small", "material": "cotton" }, "availability": "in stock", "sku": "2317", "cost": "$23" } }

要选择该输入的一部分并传递带有静态值的附加键值对,可以在 Parallel 状态的输入选项卡下的参数字段中指定以下内容。

{ "comment": "Selecting what I care about.", "MyDetails": { "size.$": "$.product.details.size", "exists.$": "$.product.availability", "StaticValue": "foo" } }

结果将是以下 JSON 数据。

{ "comment": "Selecting what I care about.", "MyDetails": { "size": "small", "exists": "in stock", "StaticValue": "foo" } }

配置状态的输出

每个状态都会生成 JSON 输出,可以在将其传递到下一个状态之前对其进行筛选。有几个筛选条件可用,每个筛选条件对输出的影响都不一样。每种状态可用的输出筛选条件列在 Inspector 面板的输出选项卡下。对于 Task 状态,您选择的任何输出筛选条件都将按以下顺序处理:

  1. ResultSelector:使用此筛选条件来操纵状态的结果。您可以使用部分结果构造一个新的 JSON 对象。

  2. ResultPath:使用此筛选条件选择要传递到输出的状态输入和任务结果的组合。

  3. OutputPath:使用此筛选条件筛选 JSON 输出,用于选择将结果中的哪些信息传递到下一个状态。


          输出选项

使用 ResultSelector

ResultSelector 是用于以下状态的可选输出筛选条件:

  • Task 状态,即状态浏览器操作选项卡中列出的所有状态。

  • Map 状态,在状态浏览器的选项卡中。

  • Parallel 状态,在状态浏览器的选项卡中。

ResultSelector 可用于构造由一个或多个键值对组成的自定义 JSON 对象。每对值可以是静态值,也可以通过路径从状态的结果中选择。

注意

要指定参数使用路径引用结果中的 JSON 节点,请使用 .$ 作为参数名称的结尾。

例 使用 ResultSelector 过滤器的示例

在此示例中,您可以使用ResultSelector操作亚马逊 EMR CreateCluster API 调用对亚马逊 EMR 状态的响应。CreateCluster以下是 Amazon EMR CreateCluster API 调用的结果。

{ "resourceType": "elasticmapreduce", "resource": "createCluster.sync", "output": { "SdkHttpMetadata": { "HttpHeaders": { "Content-Length": "1112", "Content-Type": "application/x-amz-JSON-1.1", "Date": "Mon, 25 Nov 2019 19:41:29 GMT", "x-amzn-RequestId": "1234-5678-9012" }, "HttpStatusCode": 200 }, "SdkResponseMetadata": { "RequestId": "1234-5678-9012" }, "ClusterId": "AKIAIOSFODNN7EXAMPLE" } }

要选择部分信息并传递带有静态值的附加键值对,请在状态的 “输出” 选项卡下的ResultSelector字段中指定以下内容。

{ "result": "found", "ClusterId.$": "$.output.ClusterId", "ResourceType.$": "$.resourceType" }

使用 ResultSelector 会产生以下结果。

{ "result": "found", "ClusterId": "AKIAIOSFODNN7EXAMPLE", "ResourceType": "elasticmapreduce" }

使用 ResultPath

状态的输出可以是其输入的副本、其生成的结果或其输入和结果的组合。使用 ResultPath 可控制传递到状态输出的上述两种内容的组合。有关更多 ResultPath 的用例,请参阅 ResultPath

ResultPath 是用于以下状态的可选输出筛选条件:

  • Task 状态,即状态浏览器的操作选项卡中列出的所有状态。

  • Map 状态,在状态浏览器的选项卡中。

  • Parallel 状态,在状态浏览器的选项卡中。

  • Pass 状态,在状态浏览器的选项卡中。

ResultPath 可用于将结果添加到原始状态输入中。指定的路径表示添加结果的位置。

例 使用 ResultPath 过滤器的示例

假设以下是一个 Task 状态的输入。

{ "details": "Default example", "who": "Amazon Step Functions" }

该 Task 状态的结果为以下内容。

Hello, Amazon Step Functions

您可以通过应用 ResultPath 并输入指示在何处添加结果的参考路径,来将此结果添加到该状态的输入中,例如 $.taskresult

借助此 ResultPath,以下是作为状态输出传递的 JSON。

{ "details": "Default example", "who": "Amazon Step Functions", "taskresult": "Hello, Amazon Step Functions!" }

使用 OutputPath

OutputPath 筛选条件可用于筛选出不需要的信息,并且仅传递所需的 JSON 部分。OutputPath 是一个以 $ 开头的字符串,用于标识 JSON 文本中的节点。

例 使用 OutputPath 过滤器的示例

Lambda 调用 API 调用除了有效负载外,还会返回元数据,这是 Lambda 函数的结果。此 API 调用的响应示例显示在状态的输出选项卡下。


              输出面板

您可以使用 OutputPath 筛选掉其他元数据。默认情况下,通过 Workflow Studio 创建的 Lambda Invoke 状态OutputPath筛选器的值为。$.Payload此默认值会删除额外的元数据,并返回相当于直接运行 Lambda 函数的输出。

Lambda 调用任务结果示例和输出筛选条件的 $.Payload 值将以下 JSON 数据作为输出传递。

{ "foo": "bar", "colors": [ "red", "blue", "green" ], "car": { "year": 2008, "make": "Toyota", "model": "Matrix" } }
注意

由于 OutputPath 筛选条件是最后一个生效的输出筛选条件,因此如果您使用 ResultSelectorResultPath 之类的其他输出筛选条件,则应相应地修改 OutputPath 筛选条件的 $.Payload 默认值。