我想过滤 Map
步骤的每次迭代的输出,然后再将其收集到数组中。但是,当我为此使用 ResultSelector
时,我得到的是逐字结果而不是变量的内容。
CallWorkerLambda
中的每个 lambda 都返回一个包含元素 "output"
的字典。我只想获取这个元素(如果我不这样做,IO 管道会被返回消息的服务部分淹没)。为此,我在 "ResultSelector": "$.output"
中使用 Iterator
,然后在外部 "ResultPath": "$.output_array"
步骤中使用 Map
。
然而,我得到的结果数组看起来像 "output_array": ["$.output", "$.output", "$.output", ... ]
以下是步骤代码:
"ProcessPatch": {
"Type": "Map",
"Next": "Aggregate",
"InputPath": "$",
"ItemsPath": "$.taskdef",
"MaxConcurrency": 0,
"ResultPath": "$.output_array",
"Parameters": {
"Payload.$": "$$.Map.Item.Value",
"algo_lambda.$": "$.staticdata.algo_lambda",
"staticdata.$": "$.staticdata"
},
"OutputPath": "$",
"Iterator": {
"StartAt": "CallWorkerLambda",
"States": {
"CallWorkerLambda": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"FunctionName.$": "$.algo_lambda",
"Payload": {
"s.$": "$.Payload",
"staticdata.$": "$.staticdata"
}
},
"ResultSelector": "$.output",
"End": true
}
}
}
}
关于是什么导致它无法识别 $.variables
以及如何解决它的任何想法?
答案 0 :(得分:2)
ResultSelector 字段可让您创建键值对的集合,其中的值是静态的或从状态结果中选择的。 所以 ResultSelector 应该像这样使用:
"ResultSelector": {
"ClusterId.$": "$.output.ClusterId",
"ResourceType.$": "$.resourceType"
},
但在您的示例中,它缺少键值对:
"ResultSelector": "$.output"