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

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

为您的州配置输入和输出

每个州都根据收到的输入做出决定或执行操作。在大多数情况下,它然后将输出传递给其他状态。在 Workflow Studio 中,您可以配置状态在输入输出的选项卡换页面板。使用Info链接可在配置输入和输出时访问上下文帮助。


        输入、输出和帮助面板

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

将输入配置为状态

每个州以 JSON 形式接收来自以前状态的输入。如果要筛选输入,则可以使用InputPath输入Inspector来选择这个。这些区域有:InputPath是一个字符串,从$,它标识了一个特定的 JSON 节点。这些被称为引用路径,然后他们跟着 JsonPath 语法。


          输入选项

要过滤输入:

  • 选择使用过滤输入InputPath.

  • 输入有效InputPath.

您的InputPath过滤器将添加到您的工作流程中。

示例 1

对于此示例,状态输入包括以下内容:

{ "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状态:

{ "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. 对于任务状态,您选择的任何输出筛选器都将按以下顺序处理:

  1. ResultSelector使用ResultSelector来操纵状态的结果。您可以使用部分结果构建新的 JSON 对象。

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

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


          输出选项

使用 ResultSelector

ResultSelector是适用于以下状态的可选输出过滤器:

  • 任务状态,这些都是列在操作State 浏览器的面板。

  • 映射状态,在State 浏览器的面板。

  • 并行状态,在State 浏览器的面板。

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

注意

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

示例 1

在本示例中,您使用ResultSelector操纵来自亚马逊 EMR 的响应 CreateCluster API 调用亚马逊 EMRCreateCluster状态。以下是亚马逊 EMR 的结果CreateClusterAPI 调用:

{ "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是适用于以下状态的可选输出过滤器:

  • 任务状态,这些都是列在操作State 浏览器的面板。

  • 映射状态,在State 浏览器的面板。

  • 并行状态,在State 浏览器的面板。

  • 传递状态,在State 浏览器的面板。

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

示例

以下是对给定任务状态的输入:

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

任务状态的结果如下:

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 文本内的节点。

示例

Lambda Invoke API 调用除了负载之外还会返回元数据,这是 Lambda 函数的结果。此 API 调用的响应示例显示在输出州的选项卡换页模式。


            输出面板

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

Lambda Invoke 任务结果示例和$.Payload 输出path 将以下 JSON 作为输出传递:

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

由于OutputPath过滤器是最后一个生效的输出过滤器,如果您使用额外的输出过滤器,例如ResultSelector要么ResultPath,您应修改默认设置$.Payload OutputPath相应地过滤。