在 Step Functions 工作流程中操作参数 - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

在 Step Functions 工作流程中操作参数

管理状态和转换数据

Step Functions 最近添加了变量JSONata,用于管理状态和转换数据。

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

InputPathParametersResultSelector字段提供了一种在工作流程中移动时进行操作JSON的方法。 InputPath可以通过使用路径筛选JSON符号来限制传递的输入(参见使用JSONPath路径)。使用该Parameters字段,您可以使用静态值或使用路径从输入中选择的值来传递一组键值对。

ResultSelector 字段提供了一种在应用 ResultPath 状态之前操作状态结果的方法。

Amazon Step Functions 首先应用InputPath字段,然后应用字Parameters段。您可以先使用 InputPath 将原始输入筛选为所选内容,然后应用 Parameters 进一步操作该输入,或添加新值。然后,您可以在应用 ResultPath 状态之前使用 ResultSelector 字段来操作状态的输出。

InputPath

使用 InputPath 选择状态输入的一部分。

例如,假设状态输入包括以下内容。

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

您可以应用 InputPath

"InputPath": "$.dataset2",

对于前InputPath一个,以下JSON是作为输入传递的内容。

{ "val1": "a", "val2": "b", "val3": "c" }
注意

一条路径可以生成一系列值。考虑以下示例。

{ "a": [1, 2, 3, 4] }

如果您应用路径 $.a[0:2],结果如下。

[ 1, 2 ]

参数

本部分介绍您可以使用 Parameters 字段的不同方式。

键值对

使用 Parameters 字段创建作为输入传递的键值对集合。每个值可以是包含在状态机定义中的静态值,也可以是从输入或带有路径的 Context 对象中选择的。对于使用路径选择值的键值对,键名必须以 .$ 结尾。

例如,假设您提供以下输入。

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

要选择一些信息,您可以在状态机定义中指定这些参数。

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

给定之前的输入和Parameters字段,JSON这就是传递的。

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

除了输入之外,您还可以访问一个名为 Con JSON text 对象的特殊对象。Context 对象包含有关您的状态机执行的信息。请参阅 在 Step Functions 中从 Context 对象访问执行数据

连接的资源

Parameters 字段还可以将信息传递给连接的资源。例如,如果您的任务状态为编排 Amazon Batch 任务,则可以将相关API参数直接传递给该API服务的操作。有关更多信息,请参阅:

Amazon S3

如果您在各状态之间传递的 Lambda 函数数据可能增长到超过 262,144 字节,我们建议使用 Amazon S3 来存储数据,并实施以下方法之一:

或者,您也可以调整实施,以便在执行中传递较少的有效负载。

ResultSelector

在应用 ResultPath 之前,使用 ResultSelector 字段来操作状态的结果。ResultSelector 字段可用于创建键值对的集合,其中值为静态值或从状态的结果中选择。使用 ResultSelector 字段,您可以选择要将状态结果的哪些部分传递给 ResultPath 字段。

注意

使用 ResultPath 字段,您可以将 ResultSelector 字段的输出添加到原始输入中。

ResultSelector 是处于以下状态的可选字段:

例如,除了结果中的有效负载外,Step Functions 服务集成还会返回元数据。ResultSelector 可以选择结果的某些部分并使用 ResultPath 将其与状态输入合并。在此示例中,我们只想选择resourceTypeClusterId,然后将其与来自 Amazon EMR createCluster .sync 的状态输入合并。给定以下内容:

{ "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 选择 resourceTypeClusterId

"Create Cluster": { "Type": "Task", "Resource": "arn:aws:states:::elasticmapreduce:createCluster.sync", "Parameters": { <some parameters> }, "ResultSelector": { "ClusterId.$": "$.output.ClusterId", "ResourceType.$": "$.resourceType" }, "ResultPath": "$.EMROutput", "Next": "Next Step" }

使用给定的输入,使用 ResultSelector 会产生:

{ "OtherDataFromInput": {}, "EMROutput": { "ClusterId": "AKIAIOSFODNN7EXAMPLE", "ResourceType": "elasticmapreduce", } }

展平由数组组成的数组

如果状态机中的 Parallel 工作流程状态Map 状态工作流程。 状态返回由数组组成的数组,则可以使用 ResultSelector 字段将他们转换为一个平面数组。您可以将此字段包含在 Parallel 或 Map 状态定义中,以操纵这些状态的结果。

要扁平化数组,请在ResultSelector字段[*]中使用语法:,如下例所示。

"ResultSelector": { "flattenArray.$": "$[*][*]" }

有关演示如何展平数组的示例,请参阅以下教程中的第 3 步