Я пытаюсь создать рабочий процесс AWS StepFunctions , где у меня есть задача Lambda , за которой следует задача ECS / Fargate .
Lambda принимает идентификатор в качестве входных данных и выводит некоторые данные в форме JSON, которая используется задачей ECS, которая выполняет сценарий Python в своей среде контейнера. В StepFunctions я хотел бы выполнить следующий поток:
{ id: 1234 } -> [Lambda] -> { id: 1234, data: {...} }
{ id: 1234, data: {...} } -> [ECS] -> { id: 1234, result: "bar"}
Для справки приведен пример конфигурации задачи ECS: https://docs.aws.amazon.com/step-functions/latest/dg/sample-project-container-task-notification.html
Я не могу найти способ передать структурированную JSON input
Задачу ECS контейнеру, выполняющему задачу.
Вот что я нашел до сих пор:
- Я могу передать отдельные поля ввода JSON в контейнер с помощью JSONPath, чтобы выбрать отдельные поля ввода и установить их в качестве переменных среды. Но если я назначу весь объект
input
($
) переменной среды, то произойдет сбой во время выполнения с ошибкой сериализации ([Object] cannot be converted to a string
). - Я могу создать промежуточную лямбду, которая принимает введите и преобразует ее в JSON строку, которая хранится в единственном значении ключа в
output
, затем назначьте это единственное строковое значение ключа переменной среды задачи ECS и проанализируйте ее. Тем не менее, это требует добавления всей дополнительной задачи и нескольких секунд времени выполнения + стоимость.
Вот некоторые вещи, которые я не могу сделать:
- Кажется, в
boto3
нет механизма для получения input
существующей задачи ECS. Я могу получить input
из неназначенного Activity, или я могу получить ввод всего выполнения. Но не существует API для простого ввода данных существующей работающей Задачи, хотя у меня есть Жетон Задачи. - Я не могу изменить исходную лямбду для вывода JSON в виде строки. Я использую этот результат в нескольких местах (параллельные задачи), а другими задачами являются лямбда-выражения, которые используют указанные c подполя
output
в качестве input
.
Что такое предназначение механизм передачи структурированного объекта JSON, определенного как input
, в задачу в контейнер выполнения задачи ECS / Fargate?