InputPath、参数和 ResultSelector - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

InputPath、参数和 ResultSelector

ParametersResultSelector字段提供了一种在InputPath JSON 在工作流程中移动时对其进行操作的方法。 InputPath可以通过使用路径过滤 JSON 表示法来限制传递的输入(参见路径)。Parameters 字段使您可以传递键值对的集合,其中值是您在状态机定义中定义的静态值,或者是使用路径从输入中选择的值。该ResultSelector字段提供了一种在应用状态之前操作ResultPath状态结果的方法。

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

提示

使用 Step Functions 控制台中的数据流模拟器来测试 JSON 路径语法,更好地了解如何在状态内操作数据,并查看如何在状态之间传递数据。

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字段创建作为输入值值值值值值值值值值值值值值值值值值值值值值值值值值值值值值值 每个键值对的值可以是您在状态机定义中包含的静态值,也可以是使用路径从输入或上下文对象中选择的值。对于使用路径选择值的键值对,键名必须以 .$ 结尾。

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

{ "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" } },

除了输入之外,您还可以访问一个特殊的 JSON 对象,称为上下文对象。上下文对象包含有关状态机执行的信息。请参阅 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" } }

然后,您可以ClusterId使用ResultSelector以下方法选择resourceType和:

"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": { "ResourceType": "elasticmapreduce", "ClusterId": "AKIAIOSFODNN7EXAMPLE" } }