Wchodząc w technologiczny świat Serverless i rozwiązań typu FaaS (Function-as-a-Service) możemy dostać olśnienia i poczuć efekt WOW. W szczególności jeśli wcześniej mieliśmy do czynienia z złożonymi platformami, których wdrożenie wymagało skoordynowanej pracy wielu zespołów. Ale jak to ? To teraz mogę wdrożyć swój kawałek kodu i za pomocą paru kliknięć lub komend i będzie on dostępny publicznie ? Nie muszę już konfigurować żadnych wirtualek czy sieci ? A no tak! Wdrożenie prostej wirtualnej funkcji do chmury faktycznie wydaje się banalnie proste. Ale niewiele trudniejsze jest też wdrożenie klasycznej aplikacji serwerowej na VM w chmurze. Wszystko rozbija się tutaj o skalę projektu. Równie trudne, jeśli nawet nie trudniejsze może okazać się wdrożenie złożonego systemu opartego o np. funkcję Lambda. Wiele współczesnych systemów opartych o architekturę mikroserwisów, składa się z dziesiątek lub nawet setek luźno połączonych usług. Taki sam system oparty o funkcję, prawdopodobnie byłby jeszcze bardziej granualny i składałby się być może z tysięcy funkcji. Nadal jesteś tak samo optymistyczny myśląc o wdrożeniu chodźby małej funkcjonalności w takim systemie ? Pewnie już wyobrażasz sobie ten chaos, który towarzyszy zarządzaniu tak dużym funkcyjnym codebasem. Na szczęście nie musi to wyglądać wcale tak dramatycznie. Wraz z rozwojem rozwiązań typu FaaS na rynku zaczęły się pojawiać również narzędzie wspierające tworzenie platform w oparciu o ten model. Jednym z takich narzędzi jest właśnie Serverless Framework. W tym blog-poście chciałbym przybliżyć Ci to narzędzie, nie wchodząc za bardzo w szczegóły (o szczegółach porozmawiamy w kolejnych wpisach z tej serii). Omówimy sobie pokrótce czym jest Serverless Framework oraz jakie możliwości daje on nam, deweloperom
Czym jest Serverless Framework ?
Serverless Framework to narzędzie open-source dostarczające interfejs CLI, dzięki któremu możemy konfigurować, budować i wdrażać nasze serverlesowe funkcje. Serverless Framework zapewnia znormalizowany sposób organizacji naszych funkcji oraz usług cloudowych, z których owe funkcje korzystają. Jednym plikiem konfiguracyjnym jesteśmy w stanie zdefiniować konfigurację naszych funkcji oraz zasobów takich jak bazy danych czy storage, a następnie za pomocą jednej komendy stworzyć całą infrastrukturę w chmurze i zainstalować na niej nasze rozwiązanie.
Brzmi to trochę abstrakcyjnie, ale właśnie takie jest. Serverless Framework dostarcza właśnie taką warstwę abstrakcji, dzięki, której w wygodny sposób możemy zarządzać cyklem życia naszej serverlessowej platformy. Warto zaznaczyć tutaj, że narzędzie to jest oparte o podejście cloud agnostic. Oznacza to, że nie jest silnie związane z konkretnym dostawcą chmury. Mamy możliwość wykorzystanie tego frameworka do zarządzania FaaS-ami takimi jak AWS Lambda, Google Cloud Functions, Azure Functions i wieloma innymi bardziej niszowymi rozwiązaniami.
Infrastructure as Code w wydaniu Serverless Framework
Infrastructure as Code jest to popularne podejście/paradygmat w szczególności w dziedzinie cloud. Założeniem IaC jest zdefiniowanie całej infrastruktury w postaci kodu, bądź pliku konfiguracyjnego. Jaki jest tego cel ? Po pierwsze mamy możliwość wersjonowania naszej infrastruktury za pomocą GITa. Dzięki temu w repozytorium kodu posiadać możemy pełną historię zmian naszej infrastruktury, a co za tym idzie mamy możliwość przywrócenia stanu infrastruktury z dowolnego momentu. Nie muszę już chyba wspominać o tym, że system kontroli wersji umożliwia nam również kolaboracje nad kodem z innymi członkami zespołu.
Drugim plus stosowania IaC jest bezproblemowa możliwość replikacji środowiska. Możemy w prosty sposób tworzyć kopie naszych środowisk w nieskończoność. Pozwala to nam idealnie odwzorować nasze środowiska deweloperskie i testowe z środowiskiem produkcyjnym. Dzięki temu wprowadzenie zmian w infrastrukturze produkcyjnej będziemy mogli w dobry sposób przetestować wcześniej na pre-produkcji. Dostajemy więc tutaj możliwość testowalności i łatwiejsze wprowadzanie zmian.
W Serverless Frameworku infrastrukturę definiujemy w pliku serverless.yml. Ten plik konwertowany jest na natywne rozwiązanie IaC danego dostawcy chmurowego. W przypadku AWS jest to Cloud Formation. W przypadku AWS właśnie jesteśmy wstanie za pomocą SF zdefiniować całkiem sporo zasobów m.in. DynamoDb, bucket S3, Cognito Identity Pool, oraz oczywiście samą Lambdę. W przypadku innych dostawców, niestety nie mamy tak dużej możliwości definicji zasobów. Serverless Framework jest jednak sukcesywnie rozwijany, więc być może ten stan rzeczy się zmieni w przyszłości.
Serverless Framework nie jest jednak pełnoprawnym narzędziem do budowania infrastruktury w Cloud. Lista komponentów, które możemy zdefiniować za pomocą tego narzędzie są ograniczone do usług bezpośredni związanych z usługami FaaS. Niemniej jednak SF może być świetnym uzupełnieniem bardziej rozbudowanych narzędzi takich jak Terraform czy natywnych usług IaC dostawcy chmurowego.
Dewelopment z Serverless Framework
Jeśli chodzi o codzienną pracę z funkcjami to Serverless Framework potrafi w tym aspekcie w dużym stopniu ułatwić życie dewelopera. Ręczne podgrywanie każdej zmiany w kodzie do chmury byłoby udręką. Na szczęście dzięki CLI od SF mamy możliwość zrobienia tego w bardzo szybki i prosty sposób. Upgrade kodu na przykładową Lambdę w określonym środowisku można ograniczyć do wykonania pojedynczego polecenia. Oczywiście w dojrzałym produkcyjnym systemie nie będziesz zapewne wykonywał deploymentu ze swojego lokalnego środowiska. Takie finalne polecenie deploymenut może być przykładowo ostatnim krokiem twojego pipeline wdrożeniowego
Na tym jednak możliwości się nie kończą. Wykorzystując Serverless Framework mamy możliwość uruchomienia naszej funkcji lokalnie i testowanie jej tak jak gdyby była uruchomiona z API Gateway. Hot reload kodu jest tutaj również dostępny. Wszystko to zasługa pluginu serverless-offline, który jest rozwijany przez community związane z Serverless Framework. Na ten moment taki plugin jest dostępny tylko dla AWS.
Zastanawiasz się nad wykorzystaniem innych usług takich jak S3 czy DynamoDB. Otóż te usługi również jesteśmy w stanie emulować lokalnie. Wszystko to za sprawą pluginów do Serverless Framework. Community zgromadzone wokół tego narzędzia jest bardzo aktywne i stanowi o sile tego narzędzia. Sami sprawdźcie jak wiele rozwiązań jest dostępnych właśnie w postaci rozszerzeń do Serverless Framework
Podsumowanie
To tyle jeśli chodzi o wprowadzenie. Mam nadzieję, że chodź trochę zachęciłam Cię do przetestowania tego narzędzia. W kolejnych wpisach z tej serii przeprowadzę Cię prze pełną konfiguracje do pracy z AWS, a na koniec przeanalizujemy sobie prosty projektu pokazujący podstawowe możliwości jakie daje Serverless Framework.