将输入传递给 Step Function 中的迭代器及其输出,同时保持迭代器输出
Passing input to Iterator in Step Function along to its output while keeping iterator output
我有一个进入并行 lambda 的 Step Function 状态机,一旦所有并行 lambda 都完成,就会执行一个最终的 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": "$.my_list",
"Parameters": {
"list_item.$": "$$.Map.Item.Value",
"input_1.$": "$.input_1",
"input_2.$": "$.input_2"
},
"MaxConcurrency": 2,
"Next": "Final",
"Iterator": {
"StartAt": "Parallel Step",
"States": {
"Parallel Step": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"FunctionName": "arn:aws:lambda:us-east-1:<>:function:parallel-lambda:$LATEST",
"Payload": {
"Input.$": "$"
}
},
"OutputPath": "$.Payload",
"End": true
}
}
}
},
"Final": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"FunctionName": "arn:aws:lambda:us-east-1:<>:function:final-lambda:$LATEST",
"Payload": {
"Input.$": "$"
}
},
"End": true
}
}
}
并行 lambda 的输出类似于
{'statusCode': 200, 'n-successes': n_successes}
现在我的 Final
lambda 的输入正在获取这些输出的列表。我确实想要。但是有没有办法将进入并行 lambda 的一些输入传递到最终的 lambda。
理想情况下,我最终的 lambda 输入应该是这样的
{'input_1': input_1_val,
'input_2': input_2_val,
'parallel_outputs': [{'statusCode': 200, 'n-successes': 5}, ...]
我知道我可以在我的并行 lambda 输出中传递它,但是在输出列表中重复多次相同的输入值似乎效率低下
看来您需要使用 $.ResultPath 而不是 $.OutputPath
见AWS Docs: Use ResultPath to Include the Result with the Input
我有一个进入并行 lambda 的 Step Function 状态机,一旦所有并行 lambda 都完成,就会执行一个最终的 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": "$.my_list",
"Parameters": {
"list_item.$": "$$.Map.Item.Value",
"input_1.$": "$.input_1",
"input_2.$": "$.input_2"
},
"MaxConcurrency": 2,
"Next": "Final",
"Iterator": {
"StartAt": "Parallel Step",
"States": {
"Parallel Step": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"FunctionName": "arn:aws:lambda:us-east-1:<>:function:parallel-lambda:$LATEST",
"Payload": {
"Input.$": "$"
}
},
"OutputPath": "$.Payload",
"End": true
}
}
}
},
"Final": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"FunctionName": "arn:aws:lambda:us-east-1:<>:function:final-lambda:$LATEST",
"Payload": {
"Input.$": "$"
}
},
"End": true
}
}
}
并行 lambda 的输出类似于
{'statusCode': 200, 'n-successes': n_successes}
现在我的 Final
lambda 的输入正在获取这些输出的列表。我确实想要。但是有没有办法将进入并行 lambda 的一些输入传递到最终的 lambda。
理想情况下,我最终的 lambda 输入应该是这样的
{'input_1': input_1_val,
'input_2': input_2_val,
'parallel_outputs': [{'statusCode': 200, 'n-successes': 5}, ...]
我知道我可以在我的并行 lambda 输出中传递它,但是在输出列表中重复多次相同的输入值似乎效率低下
看来您需要使用 $.ResultPath 而不是 $.OutputPath
见AWS Docs: Use ResultPath to Include the Result with the Input