Me gustaría filtrar la salida de cada iteración de un paso Map antes de recopilarla en una matriz. Sin embargo, cuando utilizo ResultSelector para este propósito, obtengo un resultado literal en lugar del contenido de la variable.

Cada lambda en CallWorkerLambda devuelve un diccionario con el elemento "output". Me gustaría tomar solo este elemento (si no lo hago, la canalización IO se abruma con las partes de servicio del mensaje devuelto). Con este fin, utilizo "ResultSelector": "$.output" dentro de Iterator, y luego "ResultPath": "$.output_array" en el paso Map externo.

Sin embargo, lo que obtengo como la matriz resultante se ve como "output_array": ["$.output", "$.output", "$.output", ... ]

A continuación se muestra el código de paso:

"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
          }
        }
      }
    }

¿Alguna idea sobre lo que hace que no reconozca $.variables y cómo solucionarlo?

0
Dima Lituiev 22 ene. 2021 a las 09:33

1 respuesta

La mejor respuesta

El campo ResultSelector le permite crear una colección de pares clave-valor, donde los valores son estáticos o se seleccionan del resultado del estado. Entonces ResultSelector debería usarse así:

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

Pero en su ejemplo, carece de pares clave-valor:

"ResultSelector": "$.output"
1
Pooya Paridel 22 ene. 2021 a las 07:27