Przeszliśmy przez kilka różnych chmur i sposobów tworzenia funkcji – czy to będzie AWS Lambda i C# czy Azure i JavaScript. Każda z tych technologii ma inny zestaw narzędzi, inne API, inne UI oraz co najważniejsze inną strukturę kodu. Każda ma też różne wymagania co do tego co będzie dostępne na zewnątrz. Azure daje nam HTTP endpoint, ale AWS już API Gateway. Czasami po prostu wiedza jaką musimy zdobyć by coś tam zdeployować jest po prostu zbyt kosztowana. Czasami jakaś prosta abstrakcja nad tym wszystkim by nam się przydała. I na szczęście mamy coś takiego dostępnego – Serverless Framework.

Serverless framework ujednolica nam CLI, daje abstrakcje definiowania usług i zasobów oraz udostępnia proste schematy aplikacji. Ogólnie kod naszej funkcji będzie wyglądał dosłownie tak samo jak wygląda teraz – to się nie zmienia, to co wymaga Azure, to co wymaga AWS czy Google wciąż jest takie same. To co się zmienia to w jaki sposób my deployujemy nasza aplikację.

Serverless framework instalujemy za pomocą npm lub yarn:

npm install -g serverless

Następnie możemy stworzyć projekt nowy/szablon za pomocą komendy:

serverless create --template google-nodejs --path my-service
serverless create --template azure-nodejs --path my-service
serverless create --template aws-nodejs --path my-service
serverless create --template aws-csharp --path my-service

Fajne jest to, że można tworzyć rozwiązanie w C# dla AWS. Szkoda, że jeszcze nie można dla Azure. Ale to tylko szablon, sami możemy podobny stworzyć sobie jak chcemy :) Psss dla maniaków F#, sprawdźcie aws-fsharp :D Albo ogólnie, dostępne wszystkie szablony:

serverless create --help

Warto zwrócić uwagę na dokumentacje – nawet spoko jest rozbudowana i dużo można z niej wyczytać, choć czasami lepiej jest coś w niej wyszukać niż klikać aż się znajdzie.

To co powyższe komendy stworzą to plik naszej funkcji oraz plik serverless.yaml w którym to będziemy definiować nasze zasoby oraz opis funkcji. W zależności od providera będą tutaj się znajdowały różne elementy. Dokumentacja pomoże nam tutaj niezmiernie (serio), ale też jest przydatna widza na temat danej chmury.

To co jednak mamy następnie dostępnego to sposoby deployowania naszej aplikacji. W tym celu trzeba trzeba doinstalować paczki do projektu (w zależności od providera):

npm i --save serverless-azure-functions
npm install --save serverless-google-cloudfunctions

AWS jest dostępny domyślnie (jakby inaczej ;)).

Biorąc pod uwagę poprawną konfigurację środowiska i providera to deployment naszej funkcji wygląda mniej więcej tak:

serverless deploy

A uruchomienie funkcji tak:

servlerss invoke --function name_function

I to jest NIEZALEŻNE od providera. Więc to co daje nam serverless framework to piękną abstrakcję na konfigurację i deployment naszych funkcji. Do tego przychodzi on z szeregiem przykładów (nie licząc tych prostych jak hello-world) które już teraz możemy wykorzystać. Zarówno możemy tam znaleźć przykłady jak skonfigurować inne zasoby jak i jak w AWS Lambda zrobić sobie RESTowe API. Najlepsze jest to, że serverless.yaml dla AWS kompilowany jest do AWS CloudFormation o czym już wspominałem

Podsumowanie

Serverless Framework rozwija się niesamowicie. Jeszcze do niedawna norma było ponad 50 pushów na githubie, teraz jest ich około 25 dziennie. Czyli codziennie ktoś nad tym pracuje! A to już coś o tym świadczy. Do tego chłopaki wprowadzają nowe providery, mają całkiem niezłą dokumentację i naprawdę ułatwiają nam opisywanie i deployowania naszego rozwiązania serverless.

Polecam sprawdzić framework, może się okazać, że będzie nam z jego pomocą dużo łatwiej pisać i deployować funkcje. Oraz zachęcam jak przy każdym Open Sourcowym projekcie do wsparcia autorów – czy to szablonami czy też przykładami albo dokumentacją, albo poprawianiem bugów. Jakakolwiek pomoc zawsze jest mile widziana!

Korzystaliście już z serverless frameowrk? Czy post was zachęcił do spróbowania? Co myślicie o ujednoliceniu deploumentu, opisu zasobów i konfiguracji za pomocą yaml?

3 KOMENTARZE

  1. Korzystam na codzien na produkcji, smiga bardzo fajnie i przyjemnie. Mamy 7 roznych lambd. Bardzo fajnie integruje sie z flow programistycznym az nie czuc ze gdzies tam jest ‘chmura’. Jedyne minusy to w przypadku AWS, cloud formation …. ale to nie wina serverless.

    • ooo jakie sa minusy? tak szczerze, z ciekawosci

      I kurka jestes pierwsza osoba ktora korzysta z tego framworka a ktora znam! i jak, szczerze? przydaje sie?

      • Sprawuje sie bardzo dobrze, jedyny minus to tak jak napisalem Cloud formation amazonu ktore jest upierdliwe strasznie.

        Minusy serverlessa w nowej wersji jest ich naprawde malo i to po prostu dziala :) Jak na razie nie doszukalem sie za wielu.

        Glownie robimy lambdy albo bedace cron jobami albo listenerami do SNS

Comments are closed.