AWS Step Functions

AWS Step Functions

Wszyscy uwielbiamy funkcje Lambda. Prawda? Wszyscy? No… W tyle głowy tli mi się jednak myśl, że czasem potrzeba czegoś więcej. Czegoś, co pozwoli na zarządzanie i koordynację wielu funkcji Lambda w oparciu o jakiś workflow na przykład. Potrzebujemy użyć warunków, funkcji pracujących równolegle? Możemy jako takiego orkiestratora wykorzystać kolejną Lambdę. Możemy użyć, pojawiającego się jeszcze na egzaminach associate, SWF – Simple Workflow Service. W 2016 roku podczas re:Invent ukazały się jednak światu AWS Step Functions. Na co nam pozwalają? Na zarządzanie wywołaniami funkcji Lambda. A każda Lambda jest odpowiedzialna za konkretną czynność i skaluje się niezależenie od pozostałych.

Czym jest taka Step Function? Składa się z dwóch elementów. Z tasków (czynności) i maszyny stanów. Dziś, w pierwszej części serii o AWS Step Functions, prosty przykład.

Jak?

Przykład, którym się zajmiemy, to prosta funkcja wywołująca Lambdę. Jej zadaniem będzie połączenie stringów zawartych w tablicy, w jeden łańcuch znaków, który zwrócimy z naszej step function. Kod naszej Lambdy w Pythonie jest banalny:

Nazwijmy naszą Lambdę np. CombineStrings, utwórzmy ją i zapamiętajmy jej arn.

W konsoli AWS wchodzimy do Step Functions, tworzymy nową fukncję wybierając Templates i Hello world

Naszym oczom powinny ukazać sie dwa okna. Po lewej stronie kod napisany w Amazon States Language, a po prawej diagram przedstawiający działanie funkcji. Zajmijmy się kodem, który definiuje tak naprawdę maszynę stanów. 

Stany mogą przyjmowac różne wartości. W przykładzie widzimy Pass, który po prostu przekazuje dane z jednego miejsca w drugie, ale możliwe są inne wartości:

  • Task – umozliwia wykonanie czynności,
  • Choice – decyzja pomiędzy wieloma czynnościami,
  • Wait – zapewnia opóźnienie pomiędzy wykonaniami,
  • Parallel – uruchamia równolegle kilka czynności,
  • Succeed / Fail – zatrzymuje wykonanie ze statusem Fail  lub Success.

My użyjemy stanu Task. Jako czynnośc możemy wykorzystać funkcje Lambda lub activities. My użyjemy naszej Lambdy, zamieniamy więc kod na poniższ

Przeanalizujmy. Na początku mamy komentarz. Dobrze jest opisać co dana funkcji robi. W linii 3 określamy stan, od którego funkcja zaczyna działanie. W naszym przypadku jest to stan z etykietą JoinStrings. W linii 4 zaczynają się stany. W naszym przypadku mamy tylko jeden stan, którego zadaniem jest wywołanie naszej Lambdy. Za pomocą ResultPath ustawiamy „ścieżkę”, która zwróci nam dane.

W tym momencie nasza „maszyna stanów” powinna się utworzyć.

Wybieramy naszą maszynę 

wpisujemy dane do przetworzenia i uruchamiamy ją.

Jeżeli wszystko poszło dobrze, naszym oczom powinien ukazać się raport o powodzeniu operacji.

W raporcie dostępne są także dane wejściowe do naszej funkcji (Input), jak i dane zwracane (Output).

Działa? Działa. Przykład bardzo prosty i mało życiowy. Na początek jednak wystarczy. Pokazuje jak zacząć korzystać z AWS Step Functions.

Kiedy?

Na przykład wtedy, kiedy mamy rozstrzygnąć czy wywołujemy Lambdę A czy Lambdę B. Także gdy chcemy wykonać jakąś akcję po jakimś czasie lub o określonym czasie. Możemy także na przykład wywołać równolegle dwie funkcjie Lambda lub przekazać dane z jednej Lambdy do drugiej.

Co dalej?

Step functions są jednym z ciekawszych klocków z kompletu serverless. W jednym z kolejnych wpisów postaram się pokazać coś bardziej skomplikowanego. Warto jednak już teraz zapoznać się chociaż z dostępnymi w konsoli AWS szablonami.

i zerknąć na opis Amazon States Language.


One thought on “AWS Step Functions

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

%d bloggers like this: