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

Прекарах известно време в оценка на функциите на Step за машина за планиране, която се опитваме да изградим. Първоначалното ми разбиране е, че:

Ще изградим стъпковата функция като поредица от ламбда функции, които ще бъдат извиквани последователно. За да задействам стъпковата функция да се изпълнява веднъж всяка вечер, бих създал правило за събитие CloudWatch. Имам обаче няколко въпроса:

а. Как бихме променили изхода, върнат от първа ламбда функция, на вход към втора ламбда функция. Можем ли да направим това в елемент "Pass"? Виждам, че елементът Pass има полета ResultPath, Result, но не мога да разбера как бих приложил това, ако изходът на първата ламбда функция е напълно различен от входа на втората ламбда функция. Или е препоръчителна практика да напишете различните ламбда функции (във стъпкова функция), така че да не могат да се използват никъде другаде?

b. Как общността се справя с контрола на източника за стъпкови функции? Препоръчва се практиката да се проверява в генерирания изходен код за стъпковите функции в контрола на източника?


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


Отговори (1)


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

Няма да кажа, че това е препоръчителна практика. Всъщност не намерих препоръчителни практики по този въпрос. Този метод обаче работи в моя случай и ако някаква Task реализация (било то Lambda или Activity) се споделя между множество държавни машини, тогава тези държавни машини са достатъчно сходни, че техният модел на данни е много подобен (по този начин Lambda работи и за двете държавни машини).

Б) Структурата на държавната машина е част от проекта, така че се управлява заедно с останалата част от кода. Използвайки YAML в шаблони за формиране на облак, неговият JSON може лесно да бъде вграден като многоредов низ. В моя случай той също е вътре в Fn::Sub, така че ARN на ресурси (Lambda, Activities) могат да бъдат автоматично зададени при внедряване.

person Marcin Sucharski    schedule 08.05.2018