Передача ввода в Iterator в Step Function вместе с его выводом при сохранении вывода итератора - PullRequest
0 голосов
/ 11 декабря 2019

У меня есть конечный автомат с функцией шага, который запускается в параллельные лямбды, и после того, как все параллельные лямбды выполнены, выполняется последняя лямбда

Пример определения

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

Выход параллельной лямбды - что-то вроде

{'statusCode': 200, 'n-successes': n_successes}

. Прямо сейчас вход в мою Final лямбду получает список этих выходов. Который я хочу. Но есть ли способ передать некоторые входные данные, которые пошли в параллельную лямбду, в конечную лямбду?

В идеале мой последний ввод лямбды должен выглядеть примерно так:

{'input_1': input_1_val,
 'input_2': input_2_val,
 'parallel_outputs': [{'statusCode': 200, 'n-successes': 5}, ...]

Я знаю, что ямог бы передать его в моем параллельном выводе лямбды, но это кажется неэффективным, чтобы одни и те же входные значения повторялись так много раз в списке вывода

1 Ответ

1 голос
/ 11 декабря 2019

Похоже, вам нужно использовать $ .ResultPath вместо $ .OutputPath

см. Документы AWS: используйте ResultPath для включения результата во входные данные

...