将多个输入传递到 AWS Step Function 中的 Map State
Pass multiple inputs into Map State in AWS Step Function
我正在尝试使用 AWS Step Functions 通过 Lambda 触发对非常大的 S3 文件的操作。为此,我调用了一个阶跃函数,其输入包含文件的 S3 键和该文件的字节范围(每个并行迭代将对文件的不同部分进行操作)。输入看起来像
{
"job-spec": {
"file": "some_s3_key",
"array": [
"0-100",
"101-200",
"201-300", ...
]
}
}
我的 Step 函数非常简单,获取该输入并将其映射出来,但是我似乎无法同时将文件和数组作为我的 lambda 的输入。这是我的步进函数定义
{
"Comment": "An example of the Amazon States Language using a map state to process elements of an array with a max concurrency of 2.",
"StartAt": "Map",
"States": {
"Map": {
"Type": "Map",
"ItemsPath": "$.job-spec",
"ResultPath": "$.array",
"MaxConcurrency": 2,
"Next": "Final State",
"Iterator": {
"StartAt": "My Stage",
"States": {
"My Stage": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"FunctionName": "arn:aws:lambda:us-east-1:<>:function:some-lambda:$LATEST",
"Payload": {
"Input.$": "$.array"
}
},
"End": true
}
}
}
},
"Final State": {
"Type": "Pass",
"End": true
}
}
}
如上所述,它抱怨说 job-spec
不是 ItemsPath
的数组。如果我将其更改为 $.job-spec.array
,我会得到我在 lambda 中寻找的 array
,但缺少 key
。我尝试用 |
将两者连接在一起,但我在 Step Functions
中遇到了可以传递多少数据的限制
本质上我希望每个 python lambda 获取文件密钥,并从数组中获取一个条目
看起来 Parameters
值可以用于此,但我不太理解语法的正确性
终于能够正确地使用语法。
"ItemsPath": "$.job-spec.array",
"Parameters": {
"byte_array.$": "$$.Map.Item.Value",
"file.$": "$.job-spec.file"
},
似乎 Parameters
可用于为每个阶段创建自定义输入。 $$
正在访问舞台的上下文,而不是实际的输入。似乎 ItemsPath
获取数组并将其放入稍后可以使用的上下文中。
我正在尝试使用 AWS Step Functions 通过 Lambda 触发对非常大的 S3 文件的操作。为此,我调用了一个阶跃函数,其输入包含文件的 S3 键和该文件的字节范围(每个并行迭代将对文件的不同部分进行操作)。输入看起来像
{
"job-spec": {
"file": "some_s3_key",
"array": [
"0-100",
"101-200",
"201-300", ...
]
}
}
我的 Step 函数非常简单,获取该输入并将其映射出来,但是我似乎无法同时将文件和数组作为我的 lambda 的输入。这是我的步进函数定义
{
"Comment": "An example of the Amazon States Language using a map state to process elements of an array with a max concurrency of 2.",
"StartAt": "Map",
"States": {
"Map": {
"Type": "Map",
"ItemsPath": "$.job-spec",
"ResultPath": "$.array",
"MaxConcurrency": 2,
"Next": "Final State",
"Iterator": {
"StartAt": "My Stage",
"States": {
"My Stage": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"FunctionName": "arn:aws:lambda:us-east-1:<>:function:some-lambda:$LATEST",
"Payload": {
"Input.$": "$.array"
}
},
"End": true
}
}
}
},
"Final State": {
"Type": "Pass",
"End": true
}
}
}
如上所述,它抱怨说 job-spec
不是 ItemsPath
的数组。如果我将其更改为 $.job-spec.array
,我会得到我在 lambda 中寻找的 array
,但缺少 key
。我尝试用 |
将两者连接在一起,但我在 Step Functions
本质上我希望每个 python lambda 获取文件密钥,并从数组中获取一个条目
看起来 Parameters
值可以用于此,但我不太理解语法的正确性
终于能够正确地使用语法。
"ItemsPath": "$.job-spec.array",
"Parameters": {
"byte_array.$": "$$.Map.Item.Value",
"file.$": "$.job-spec.file"
},
似乎 Parameters
可用于为每个阶段创建自定义输入。 $$
正在访问舞台的上下文,而不是实际的输入。似乎 ItemsPath
获取数组并将其放入稍后可以使用的上下文中。