Как передать данные между лямбда-функциями в функции Step? - PullRequest
0 голосов
/ 08 мая 2018

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

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

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

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

1 Ответ

0 голосов
/ 08 мая 2018

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

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

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

...