Jak przekazać dane z funkcji Lambda do… funkcji Lambda

Jak przekazać dane z funkcji Lambda do… funkcji Lambda

W czasach gdy zewsząd dociera do nas słowo serverless, w końcu zdamy sobie sprawę co tak naprawdę ono znaczy i ile może nam oszczędzić pieniędzy (nie tylko w tzw. compute, ale także w tworzeniu naszych rozwiązań). Sercem serverless w AWS jest Lambda. W żywych organizmach nie występują dwa serca, ale w naszej programistycznej praktyce szybko spotkamy się z tym problemem. Będziemy mieli dwa lub więcej serc i będziemy chcieli je połączyć. Staniemy wtedy przed kilkoma problememi, między innymi tym, jak przekazać dane z jednej funkcji Lambda do innej funkcji Lambda.

Pisałem już kilka razy o AWS Step Functions. Zarówno o podstawach jak i trochę głębiej. W skrócie, pozwala ona na łączenie różnych usług AWS w jedną całość. I przesyłanie danych pomiędzy nimi. Także w zasobach samego AWS możecie znaleźć fajny tutorial, jak taką maszynę stanów stworzyć. StepFunctions przydadzą nam się w naszym „problemie”.

Scenariusz

Nie będziemy tworzyli żadnego rozwiązania rocket science. Wrzucimy po prostu jakiś ciąg znaków do funckji Lambda. Następnie go zmienimy i przekażemy do innej Lambdy. Tam ponownie go zmienimy.

Można to zrobić na przykład poprzez wywołanie jednej funkcji Lambda z drugiej. Można także posłużyć się usługą SNS lub SQS. My zrobimy to jednak za pomocą AWS StepFunctions.

Lambdy

Obie funkcje będą do siebie bardzo podobne. Do każdej z nich przekażemy ciąg znaków, do którego dodamy Lambda 1 lub Lambda 2. Jak tworzyć funkcje Lambda pokazywałem już kilka razy. Nie będę więc przechodził po kolei przez wszystkie opcje.

Obie funkcje utworzone w Pythonie.

Kod pierwszej Lambdy to

a drugiej

Założenie jest takie, że wywołujemy Lambdę 1 i przekazujemy do niej

zwracamy z niej

a wynik idzie do Lambdy nr 2, z której powinniśmy otrzymać

Macie utworzone obie funkcje? Jeżeli tak to przechodzimy do

StepFunction

StepFunctions pozwalają na bardzo proste połączenie naszych funckji Lambda w całość i przekazanie danych pomiędzy nimi.

Twrzymy więc nową StepFunction. Jako *State machine definition* wklejamy poniższy kod. Pamiętać tylko trzeba o poprawieniu ARN na prawidłowe.

Powinniśmy otrzymać workflow jak na obrazku poniżej.

Klikamy w button Start execution. W polu input – Optional wpisujemy nasze dane, które chcemy przekazać do funkcji Lambda. W naszym przypadku może to być np.:

Klikamy jeszcze raz Start execution i po chwili, jeżeli nie mieliśmy nigdzie błędu, nasza StepFunction zakończy działanie.

Jeżeli klikniemy w Step1 to po prawej stronie wyświetlą się szczegóły tego kroku.

Widać do zostało przekazane jako Input i co do nas wróciło. To samo dla kroku drugiego.


Koniec?

Tak. Przekazanie danych pomiędzy dwiema funkcjami Lambda jest naprawdę bardzo proste. Zobaczyliśmy jak można wykorzystać do tego StepFunctions.

Comments are closed.