使用 ResultSelector in Map / Iterator in AWS step function : $.variable name is taking literally

using ResultSelector in Map / Iterator in AWS step function : $.variable name is taken literally

我想在 Map 步骤的每次迭代中过滤输出,然后再将其收集到数组中。但是,当我为此目的使用 ResultSelector 时,我得到的是逐字结果而不是变量的内容。

CallWorkerLambda returns 中的每个 lambda 都是一个包含元素 "output" 的字典。我只想采用这个元素(如果我不这样做,IO 管道会被返回消息的服务部分淹没)。为此,我在 Iterator 中使用 "ResultSelector": "$.output",然后在外部 Map 步骤中使用 "ResultPath": "$.output_array"

但是,我得到的结果数组看起来像 "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 的原因以及如何解决它有什么想法吗?

ResultSelector 字段允许您创建键值对的集合,其中的值是静态的或从状态的结果中选择的。 所以 ResultSelector 应该这样使用:

"ResultSelector": {
    "ClusterId.$": "$.output.ClusterId",
    "ResourceType.$": "$.resourceType"
  },

但在您的示例中它缺少键值对:

"ResultSelector": "$.output"