在 AWS 步骤函数中的 Map / Iterator 中使用 ResultSelector : $.variable 名称按字面意义

时间:2021-01-22 06:33:45

标签: aws-step-functions

我想过滤 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 以及如何解决它的任何想法?

1 个答案:

答案 0 :(得分:2)

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

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

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

"ResultSelector": "$.output"