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

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

InputPath、参数和结果选择器

这些区域有:InputPathParametersResultSelector字段提供了一种在 JSON 流经工作流程时操纵 JSON 的方法。InputPath可以通过使用路径筛选 JSON 表示法来限制传递的输入(请参阅Paths)。Parameters 字段使您可以传递键值对的集合,其中值是您在状态机定义中定义的静态值,或者是使用路径从输入中选择的值。这些区域有:ResultSelector字段提供了一种方法来处理状态的结果ResultPath已应用。

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

提示

使用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

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

键值对

使用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 存储数据并在Payload参数来获取存储桶名称和密钥值。或者,您也可以调整实现以在执行中传递较少的负载。有关更多信息,请参阅使用 Amazon S3 ARN,而不是传递大型有效负载

ResultSelector

使用ResultSelector字段来操作状态的结果ResultPath已应用。这些区域有:ResultSelector字段允许您创建键值对的集合,其中值为静态值或从状态结果中选择。的输出ResultSelector替换状态的结果并传递给ResultPath

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

例如,Step Functions 服务集成除了返回结果中的有效负载之外的元数据。ResultSelector可以选择结果的部分,并将它们与状态输入合并为ResultPath。在本例中,我们想要仅选择resourceTypeClusterId,并将其与来自亚马逊 EMR 创建集群的状态输入合并。同步。给定以下权限:

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

然后,您可以选择resourceTypeClusterId,使用ResultSelector

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