本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
InputPath、参数和结果选择器
这些区域有:InputPath
、Parameters
和ResultSelector
在 JSON 流经工作流程时,字段提供了一种操作 JSON 的方法。InputPath
可以通过使用路径筛选 JSON 表示法来限制传递的输入(请参阅路径)。Parameters
字段使您可以传递键值对的集合,其中值是您在状态机定义中定义的静态值,或者是使用路径从输入中选择的值。这些区域有:ResultSelector
字段提供了一种以前操纵状态结果的方法ResultPath
已应用的。
Amazon Step Functions 首先应用 InputPath
字段,然后是 Parameters
字段。您可以先使用 InputPath
将原始输入筛选为所选内容,然后应用 Parameters
进一步操纵该输入,或添加新值。然后,您可以使用ResultSelector
字段来操纵状态的输出ResultPath
已应用的。
使用Step Functions 控制台中的数据流模拟器
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 存储数据并在中解析存储桶的 Amazon 资源名称 (ARN)。Payload
参数来获取存储桶名称和密钥值。或者,您也可以调整实现,以便在执行中传递较少的负载。有关更多信息,请参阅使用 Amazon S3 ARN 而不是传递大型有效负载。
结果选择器
使用ResultSelector
字段以前操纵状态的结果ResultPath
已应用的。这些区域有:ResultSelector
字段允许您创建键值对的集合,其中值为静态值或从状态的结果中选择。的输出ResultSelector
替换状态的结果并传递给ResultPath
.
ResultSelector
在以下状态中是可选字段:
例如,Step Functions 服务集成除了结果中的负载之外还会返回元数据。ResultSelector
可以选择结果的一部分并将它们与状态输入合并ResultPath
. 在此示例中,我们只想选择resourceType
和ClusterId
,然后将其与来自亚马逊 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"
}
}
然后,您可以选择resourceType
和ClusterId
使用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"
}
}