Как передавать данные между лямбда-функциями в функции Step?

Я потратил некоторое время на оценку функций Step для механизма планирования, который мы пытаемся построить. Мое первоначальное понимание таково:

Мы построим пошаговую функцию как серию лямбда-функций, которые будут вызываться последовательно. Чтобы запускать пошаговую функцию один раз каждую ночь, я бы создал правило события CloudWatch. Однако у меня есть пара вопросов:

а. Как бы мы изменили выходные данные, возвращаемые первой лямбда-функцией, на входные данные второй лямбда-функции. Можем ли мы сделать это в элементе «Pass»? Я вижу, что элемент Pass имеет поля ResultPath, Result, но я не могу понять, как бы я это реализовал, если вывод первой лямбда-функции полностью отличается от ввода второй лямбда-функции. Или рекомендуется писать различные лямбда-функции (в пошаговой функции) так, чтобы их нельзя было использовать где-либо еще?

б. Как сообщество обрабатывает исходный код для пошаговых функций? Рекомендуется ли проверять сгенерированный исходный код для пошаговых функций в системе управления версиями?


person Ajit Goel    schedule 08.05.2018    source источник


Ответы (1)


A) Вы можете использовать состояние Pass, но оно очень ограничено (и вы получите тот же эффект, используя InputPath в состоянии Task). Можно добавить дополнительное состояние Task, которое преобразует состояние выполнения во ввод следующего Task. В любом случае я бы предложил разработать функции Lambda, чтобы иметь возможность просто читать данные выполнения как есть (чтобы он просто извлекал из них необходимые поля, игнорировал другие и выдавал ошибку, если требуемое поле отсутствует).

Не скажу, что это рекомендованная практика. На самом деле я не нашел никаких рекомендуемых практик по этому поводу. Однако этот метод работает в моем случае, и если какая-либо реализация Task (будь то Lambda или Activity) используется несколькими конечными автоматами, то эти конечные автоматы достаточно похожи, что их модель данных очень похожа (таким образом, Lambda работает для обоих конечных автоматов).

Б) Структура конечного автомата является частью проекта, поэтому она версируется вместе с остальной частью кода. Используя YAML в шаблонах Cloud Formation, его JSON можно легко встроить в виде многострочной строки. В моем случае он также находится внутри Fn::Sub, поэтому ARN ресурсов (Lambda, Activities) могут быть автоматически установлены при развертывании.

person Marcin Sucharski    schedule 08.05.2018