serverless

Serverless functions z platformą Netlify

Z artykułu dowiesz się:

  1. Czym jest serverless
  2. Jakie są wady i zalety tego rozwiązania
  3. Jak działa serverless na netlify
  4. Jak napisać i opublikować swoją pierwszą funkcje

Czym jest serverless? 

Model serverless to stosunkowo nowy rodzaj usługi w chmurze dzięki któremu my developerzy bez konfigurowania jakiegokolwiek serwera, systemu operacyjnego możemy tworzyć logikę do rozwiązania danego problemu. Za konfigurację oraz sam serwer fizyczny odpowiada dostawca takich usług np. Amazon, Google. Sama nazwa może być nieco myląca, ponieważ serwer fizyczny istnieje, chodzi tutaj bardziej o nie potrzebę ingerencji developera w zarządzanie serwerem/serwerami. 

Teraz powiedzmy sobie o zaletach jakie niesie za sobą to rozwiązane. Wymienioną już i chyba największą zaletą jest brak jakiejkolwiek potrzeby konfiguracji serwera z naszej strony co może nie raz zaoszczędzić dużo czasu. Niekiedy zaletą jest również cena, ponieważ na większości serwisów płacimy za faktyczne użycie przez nas zasobów. Kod naszego serveless jest zapisany w funkcjach, co pozwala na modułowe budowanie różnych aspektów w zależności od naszej potrzeby, pozwala nam to również na dostosowanie skalowania projektu. 

Dobra, w takim razie jest to idealne rozwiązanie? Odpowiedź brzmi nie, wszystko ma swoje plusy i minusy, w tym przypadku też tak jest. Rozwiązanie to jest jeszcze świeżym i ciągłe rozwijającym się, niepozbawionym błędów na serwisach. Ważną uwagą jest stosowanie różnych rozwiązań przez różne serwisy, co oznacza ze nie przeprowadzimy deploymentu na dwóch serwisach w taki sam sposób oraz nie migrujemy naszych funkcji z jednej strony na drugą od tak. Niekiedy brak możliwości samodzielnej konfiguracji serwera może okazać się minusem. 

Netlify – jedne z serwisów oferujący serverless

Skoro już wiemy czym jest serveless czas na praktyczne zapoznanie się z tematem, użyjemy w tym celu serwis hostingowy Netlify który ma w swojej ofercie także serverless (AWS Lambda). Mamy tutaj też wiele pomocnych narzędzi do pracy z serveless functions

Tak więc zaczynajmy! Do tworzenia naszej funkcji będziemy używać paczki, która pomoże w zarządzaniu funkcjami i testowania ich, zaczniemy od zainicjowania projektu poprzez  

npm init

Gdy już projekt npm będzie skonfigurowany instalujemy paczkę poleceniem 

npm i netlify-lambda 

Dokumentacje znajdziecie tutaj: https://github.com/netlify/netlify-lambda. Teraz do paczki musimy dodać dwa skrypty. Pierwszy nazywany “lambda-serve” będzie odpalał lokalny serwer, na którym będziemy mogli testować napisane funkcje, przydatne w debugowaniu. Drugi skrypt będzie służył do kompilacji funkcji, to ta ich wersja będzie odpalana na serwerze nazwiemy go “lambda-build”. Nasz plik package.json powinien wyglądać teraz tak 

Gdy już to zrobiliśmy, w folderze tworzymy folder z nazwą functions, to tu będziemy trzymać kod funkcji. Uwaga, każda funkcja musi znajdować się w osobnym pliku. W głównym folderze będzie potrzebny też plik konfiguracyjny pod nazwą netlify.toml. Umieszczamy w nim nazwę folderu do buildu. 

Teraz przystępujemy do napisania naszej funkcji w folderze functions, tworzymy nowy plik js, ja już to zrobiłem. Moja funkcja będzie odsyłać string “Hello world”. Template naszej funkcji powinien wyglądać następująco.

exports.handler = function(event ,context, callback){ 

} 

Każda funkcja musi eksportować metodę handler. Mamy tutaj trzy argumenty przez nią przyjmowane. Pierwszym z nich jest event, zawiera on informacje o requescie do funkcji, najczęściej używany do obsługi metody POST, dzięki niemu dostajemy się do danych przesłanych do funkcji (event.body), zawiera również nagłówki zapytania. Drugi z argumentów czy context zawiera kontekst w jakim funkcja została wywołana, czyli np. Informacje o użytkowniku. Ostatni argument callback to funkcja, która ma zwrócić tzw. response czyli to co dostanie użytkownik po wywołaniu funkcji. 

Skoro już wszystko wiemy możemy zabrać się do pisania funkcji! 

exports.handler = function(event ,context, callback){ 
  callback(null, { 
    statusCode: 200, 
    body:"Hello World" 
  }) 
} 

Wyjaśnienie: pierwszym argumentem jakim przyjmuje callback jest błąd, który zwróci, jeżeli coś pojdzie nie tak, nie będzie nam to potrzebne. Następnie mamy już prawidłową odpowiedz zawierającą status odpowiedzi oraz dane. 

Skoro mamy już gotową funkcje, przeprowadźmy teraz na niej test, w tym celu odpalamy komendę npm run lambda-serveStało się parę rzeczy, a Mianowice został stworzony folder o nazwie lambda(taka jaka została podana w konfiguracji) oraz w środku niej plik js z skompilowaną funkcji, ten kod będziemy chcieli umieścić na netlify

W konsoli widzimy też na jakim porcie pracuje lambda server, domyślnie jest to 9000. Teraz za pomocą programu do wysyłania requestów np. Postman lub insomniaNasze funkcje będą pod adresem 

 http://localhost:9000/ + nazwafunckji 

Jak widzimy wszystko działa poprawnie. Dobra teraz czas, aby umieścić naszą funkcje na netlify! Wyłączmy nasz serwer lokalny oraz przeprowadźmy ostateczny build poleceniem npm run lambda-buildDeployment przeprowadzimy poprzez githuba, ponieważ a każdym razem, gdy będziemy pushować zmiany poprzez gita wszystko będzie się automatycznie aktualizowało, jest to bardzo wygodne. Mała uwaga: stwórzmy plik .gitignore w którym umieścimy dwie linijki, node_modules oraz functions, ponieważ nie potrzebujemy tego na serwerze. 

Zabieramy się za stworzenie nowego repozytorium poprzez sekwencję komend

git init 

git add . 

git commit –m “Initial” 

Lokalnie repozytorium już istnieje, teraz musimy połączyć to z githubem. W tym celu tworzymy nowe repozytorium na github.com. 

github - tworzenie repozytorium

Dostajemy teraz dwie komendy dzięki którym połączymy lokalne repozytorium z tym znajdującym się na serwisie. Kopiujemy je do konsoli. 

instrukcja githuba do wgrywania repozytorium

Przechodzimy już do netlify, do strony https://app.netlify.com, jeżeli jeszcze nie masz to załóż konto. Klikamy w zielony przycisk w prawym rogu “New site from Git”. W pierwszym kroku wybieramy GitHub’a jako hosting naszego kodu. Wyskoczy nam okienko, w którym musimy się uwierzytelnić. 

dodawanie strony

Wybieramy repozytorium, które wcześniej stworzyliśmy 

kreator dodawnia strony

I na sam koniec klikamy na samym dole Deploy site. Udało się! Możemy teraz między innymi zmienić adres naszej strony, odwoływać się do funkcji poprzez netlify oraz używać zmiennych środowiskowych.

panel głowny netlify

Na początek zaglądajmy do zakładki functions. Jest tam widoczna stworzona przez nas funkcja 

główna zakładka funckji netlify

Po kliknięciu na nią pokaże nam się endpoint do odwołań oraz konsola do debugowania. 

konsola netlify wybieranie funkcji

Skoro mamy już endpoint, wypróbujmy go poprzez insomnię 

konsola netlify

Wszystko działa tak jak należy 😊. Warto jeszcze wspomnieć o paru ustawieniach. Wchodząc w settings, możemy zmienić Site nameco zmieni też adres strony, nazwa jest dowolna (jeżeli nie jest zajęta). 

Warto tez wspomnieć o ograniczeniach na darmowy host, jednak są one wystarczające do mniejszych potrzeb, sami zobaczcie. 

panel netlify

Zmienne środowiskowe są ważnym aspektem, jeżeli chcemy ukryć jakieś dane typu klucze API przez światem zewnętrznym. Możemy je ustawić w Settings>Build&Deploy i scrolujemy w dół aż to Environment. W funkcjach możemy je wyciągnąć z obiektu process.env + nazwa zmiennej.

Podsumowanie 

Serverless to na pewno bardzo ciekawe rozwiązanie, i zachęcam do zagłębiania się w temacie, ponieważ może okazać się ze za parę lat będzie to jeden z ważniejszych aspektów w waszej firmie. Netlify jest tylko jednym z wielu topowych usługodawców tego typu.