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

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

为您的州配置输入和输出

每个州都根据收到的输入做出决定或采取行动。在大多数情况下,它会将输出传递给其他状态。在 Workflow Studio 中,您可以在 “表单” 面板的 “输入” 和 “输出” 选项卡中配置状态筛选和操作其输入输出数据的方式。配置输入和输出时,使用 “信息” 链接访问上下文帮助。


        输入、输出和帮助面板

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

将输入配置为状态

每个状态都以 JSON 的形式接收来自先前状态的输入。如果要过滤输入,可以使用 Inspec tor 中 “输入” 选项卡InputPath下的 “输入” 选项卡来选择此项。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 ]

ParallelMap并且Pass流量状态在其 “输入” 选项卡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" } }

要选择部分信息并传递带有静态值的其他键值对,可以在并行状态的 “输入” 选项卡下的 “参数” 字段中指定以下内容。

{ "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 输出,可以在将其传递到下一个状态之前对其进行过滤。有几个滤波器可用,每个滤波器对输出的影响不同。每种状态可用的输出过滤器列在 Inspec tor 器的 “输出” 选项卡下。对于任务状态,您选择的任何输出筛选器都将按以下顺序处理:

  1. ResultSelectorResultSelector用于操纵状态的结果。您可以使用部分结果构造新的 JSON 对象。

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

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


          输出选项

使用 ResultSelector

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

  • 任务状态,即状态浏览器的 “动作” 面板中列出的所有状态。

  • 在 “状态” 浏览器的 “流程” 面板中映射状态。

  • 平行状态,位于 “状态” 浏览器的 “” 面板中。

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

注意

要指定参数在结果中使用路径引用 JSON 节点,参数名称必须以结尾.$

示例 1

在此示例中,您使用ResultSelector来操作来自亚马逊 EMRCreateCluster 状态的 Amazon EMR CreateCluster API 调用的响应。以下是亚马逊 EMRCreateCluster 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是以下状态的可选输出过滤器:

  • 任务状态,即状态浏览器的 “动作” 面板中列出的所有状态。

  • 在 “状态” 浏览器的 “流程” 面板中映射状态。

  • 平行状态,位于 “状态” 浏览器的 “” 面板中。

  • 在 “状态” 浏览器的 “流程” 面板中传递状态。

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 函数的结果。该州 F orm 模式的 “输出” 选项卡下显示了此 API 调用的响应示例。


            输出面板

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

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

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

由于OutputPath过滤器是最后一个生效的输出过滤器,因此如果您使用其他输出过滤器,例如ResultSelectorResultPath,则应相应地修改默认$.PayloadOutputPath过滤器。