Słowem wstępu, chciałem jeszcze opisać kilka rzeczy związanych z AWS Lambda – API Gateway, narzędzie do Visual Studio jak i analizator i logger. Jednak to nie ma sensu, w sensie, to nie są rzeczy stricke związane z AWS Lambda. Nie potrzebujemy (no oprócz API Gateway) ich by korzystać z Lambdy. Dlatego też zdecydowałem, że posty na tematy wyżej wymienione powstaną, ale już nie jako część serverless. Ale jako osobne, pełnoprawne posty dotyczące pewnie chmury. A tak to tym postem kończę mini serię o AWS i zabieramy się za następnego dostawcę! :)

Za pomocą AWS możemy na różne sposoby tworzyć AWS Lambda – wszystko zależy od tego w jakim języku pracujemy mamy rożne opcje dostępne. Kod też za bardzo skomplikowany nie jest. Jedynie nasza wyobraźnia nas ogranicza. Oczywiście jest kilka spraw w AWS które proste nie są z punktu widzenia laika – API Gateway, IAM Role, itp. Jednak te rzeczy z czasem powinny być bardziej zrozumiałe. Lub po prostu należy usiąść i przeczytać całą dokumentację. Każdy sposób jest dobry. Mając już stworzone funkcje co my z nimi możemy zrobić? To jest dobre pytanie. W szczególności, że AWS dostarcza bardzo dużo rzeczy i szkoda by była, gdyby nie dało się tego jakoś wszystkiego połączyć!

Na szczęście AWS dostarcza nam dwa rozwiązania z których możemy skorzystać. Mniej lub bardziej skomplikowane. Pierwszym jest AWS Step Functions drugim AWS CloundFormation.

AWS Step Functions

AWS Step Functions to nic innego jak proste maszyny stanu które możemy uruchamiać wielokrotnie. AWS daje nam możliwość zdefiniowania procesu za pomocą JSON który mówi na przykład, żeby wykonać AWS Lambdę i jak ona zwróci wartości OK to wtedy wykonać kolejną AWS Lambdę a jak błąd to zakończyć działanie.

Takie coś możemy zdefiniować w ten sposób:

{
  "Comment": "Hello World Example",
  "StartAt": "Hello",
  "States": {
    "Hello": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
      "Catch": [
        {
          "ErrorEquals": ["NoAnswer"],
          "End": true
        },
        {
          "ErrorEquals": ["OK"],
          "Next": "World"
        }
      ],
      "End": true
    },
    "World": {
      "Type": "Pass",
      "Result": "HelloWorld!",
      "End": true
    }
  }
}

Co wygeneruje następująca maszynę stanu:

AWS Step Functions: Maszyna stanów
AWS Step Functions: Maszyna stanów

Takie maszyny mogą być dużo bardziej złożone. Możemy na przykład stworzyć maszynkę, która oczekuje na plik, następnie plik poddawany jest wykryciu twarzy i dla każdej twarzy wykonywana jest operacja sprawdzenia uczucia – jeżeli ktoś jest zadowolony to wysyłamy maila, jeżeli ktoś nie jest, to generujemy zdjęcie z jego twarzą w śmiesznej sytuacji itp. Przy czym każda tych operacji to osobna funkcja.

Fajne jest to, że edytor pomaga nam wybrać funkcje (są podpowiedzi). Jednak jest to jedynie możliwe w trakcie tworzenia maszyny stanu. Po jej utworzeniu nie ma możliwości jej edycji i trzeba tworzyć nową w oparciu o już istniejącą.

Ogólnie AWS Step Functions umożliwia nam łączenie istniejących funkcji i aktywności (osoby rodzaj kodu/aplikacji) w całość dając wrażenie aplikacji lub przynajmniej zamkniętego przepływu jakiś operacji. Przy czym wiele AWS Step Functions może wykorzystywać jedną i tę samą funkcję.

AWS CloudFormation

AWS CloudFormation to już jest bardziej zaawansowany koncept i ma tyle wspólnego z AWS Lambda, że umożliwia ich deklarowanie. Ogólnie AWS CloudFormation to nic innego jak narzędzie do tworzenia szablonów aplikacji i usług z jakich te aplikacje będą korzystać oraz zdefiniowania przepływu pracy. Umożliwia on nam stworzenie definicji wszystkich naszych funkcji, określenia w jak mają się nazywać, skąd mamy brać kod źródłowy, jaka metoda to hendler i co ma się wydarzyć po wykonaniu funkcji.

Narzędzie to służy do zarządzania zasobami i relacjami oraz konfiguracją zasobów AWS. Dzięki czemu mamy jeden wspólny szablon dla całej aplikacji i wiemy, że tworząc go jesteśmy wstanie zareplikować aplikację, wręcz można kontrolować wersję każdego z naszych rozwiązań i w razie co cofnąć się do deploymnetu który działał.

AWS CloudFormation: Schemat aplikacji
AWS CloudFormation: Schemat aplikacji

Jednak korzystanie z tego narzędzia wymaga już trochę zrozumienia jak działa AWS, co jest wymagane i jak można co łączyć. Ale dzięki niemu jesteśmy wstanie określić aplikację, która umożliwi sprawdzenie pogody w której jedyną rzeczą jaką my napiszemy to funkcje lub HTML. Reszta to budowanie z klocków.

Oczywiście wszystkie takie diagramy możne zdefiniować z kodu za pomocą JSON lub YAML. Reprezentacja UI to tylko reprezentacja zapisu JSON lub YAML.  Na przykład tutaj znajdziecie przekładową aplikację, która jest zdefiniowana w szablonie AWS CloudFormation a do tego ma zaimplementowane dwie funkcje.

Koncept ten mi się bardzo podoba, szkoda tylko, że trzeba przy nim wiedzieć naprawdę sporo o AWS by coś stworzyć.

Podsumowanie

Pokazałem dwa narzędzia które są dostępne w AWS do tego by tworzyć rozwiązania w oparciu o AWS Lambda. AWS Step Functions umożliwia tworzenie prostych przepływów prac/maszyny stanu, która łączy istniejące funkcje w jedną całość. AWS CloudFormation zaś umożliwia tworzenie bardziej złożonych rozwiązań w tym także definicji AWS Lambda.

Fajne jest to, że narzędzia pokazują, iż funkcje to nic innego jak building blocks, coś co możemy wziąć i wykorzystać tam, gdzie chcemy i jak chcemy. Mamy funkcję konwertującą png na jpg to taką funkcję możemy wykorzystywać w wielu naszych aplikacjach. Tak jak paczki nuget czy npm czy yarn.

Polecam się pobawić zarówno AWS Step Functions jak i AWS CloudFormation. To jest jedyny sposób nauczenia się i zobaczenia co to robi. Sucha teoria lub opis raczej na nic się zdadzą :)

1 KOMENTARZ

Comments are closed.