Sytuacja kobiet w IT w 2024 roku
20.04.20213 min
Chris I.

Chris I.Senior Ruby on Rails DeveloperLoft

Stwórz swoją pierwszą funkcję serverless z AWS Lambda

Sprawdź, jak krok po kroku stworzyć funkcję serverless, korzystając przy tym z AWS Lambda.

Stwórz swoją pierwszą funkcję serverless z AWS Lambda

Długi czas ignorowałem temat serverless. Jednak gdy kolega pokazał mi sposób, w jaki model ten zredukował koszty infrastruktury jego startupu do zera, zwiększając jednocześnie jej prędkość, to stwierdziłem, że muszę się z tym zapoznać bliżej. A Lambda to serverless w wersji AWS. W artykule tym zajmiemy się deploymentem kodu w Lambdzie, aby lepiej wyjaśnić, jak to właściwie działa. Zaloguj się do swojej konsoli AWS i ruszaj ze mną!

Czym jest serverless


Serverless (w wersji AWS) to:

  • Uruchamianie kodu na żądanie 
  • przy użyciu wcześniej zdefiniowanego wyzwalacza 
  • Replikacja zasobów zamiast ich zwiększania 
  • i to bez administracji serwerem


Weźmy na przykład funkcję, która bierze dane z żądania HTTP, wykonuje obliczenia i zwraca odpowiednią odpowiedź. Jeśli mamy w takim przypadku 5000 różnych żądań HTTP jednocześnie, to nie ma żadnego problemu - AWS poradzi sobie z nimi w sposób współbieżny. 

Wszystko nabierze większego sensu, jak to pokażemy. 

Nasza funkcja Lambda

Nasza funkcja serverless weźmie dane z wejścia, pomnoży je przez 5 i zwróci odpowiedź. Do odbierania żądań, przekazania ich do Lambdy i zwrócenia outputu Lambdy posłuży nam API Gateway.

No to zaczynajmy!

Utwórz Lambdę

Przejdź do Lambda service w AWS, a potem kliknij “Create function”.

A teraz:

  • Wybierz “Author from scratch”
  • Wprowadź nazwę dla swojej funkcji. U mnie będzie to “myFunction”, ale Ty wpisz, co chcesz
  • Wybierz język programowania. Ja wybrałem “Python 3.7”
  • Wybierz “Create a new role with basic Lambda permissions”
  • I kliknij “Create function”.



Mamy teraz Lambdę z domyślnym kodem - musimy go tylko zaktualizować. Przejdź na dół do sekcji “Function code” i zaktualizuj poniższy kod. 

import json

def lambda_handler(event, context):

  initial_value = int( json.loads(event['body'])['value'] )
  new_value = str( initial_value * 5 )

  return {
          'statusCode': 200,
          'body': json.dumps( new_value )
  }


Powinno to wyglądać następująco:


Potem koniecznie kliknij “Save” w prawym górnym rogu. 

Testujemy naszą funkcję w Lambdzie

Lambda ma pewną wbudowaną funkcję. Musimy sprawdzić, czy nasza funkcja działa. Kliknij strzałkę w górnej części konsoli, która pokazuje drop-down menu, a następnie wybierz “Configure test events”. 


Nadaj nazwę naszemu żądaniu - ja nazwałem je “MyTestRequest”. Przekopiuj ten kod jako ciało żądania. 

{
  "body": "{\"value\": \"5\"}"
}


Specjalnie ustawiłem format w następnym przykładzie na taki sam, jaki ma żądanie przekazane z API Gateway. Powinno to wyglądać następująco: 


Kliknij “Create”.

A teraz kliknij przycisk uruchamiający test. Jeśli wszystko się powiedzie, to poniżej funkcji kodu zobaczysz pozytywną odpowiedź. A jeśli nie, to zatrzymaj się na chwilę i sprawdź, co mogło pójść nie tak.  

Tworzymy wyzwalacz Lambdy

Wyzwalacz mówi funkcji lambdy, kiedy ta ma się uruchomić. W naszym przypadku odpalimy Lambdę za każdym razem, kiedy API Gateway otrzyma żądanie HTTP. Kliknij “Add trigger”. 


Następnie wybierz “API Gateway”. Istnieje masa zdarzeń, których można użyć jako wyzwalaczy. Są to m.in. pliki załadowane do S3, rekordy wprowadzone do DynamoDB lub komenda dla Alexa. 


Wybierz “REST API” i ustaw “Security” na “Open”. Nigdy nie używaj “Open” w środowisku produkcyjnym. Ale my i tak usuniemy to API po jego utworzeniu. 


Kliknij “Add”.

Wyślij żądanie w sposób lokalny

Najpierw weź z konsoli swój “API endpoint” po kliknięciu “API Gateway”. 


Następnie wyślij żądanie curl

Tak to wygląda u mnie.

curl -XPOST -H '{"Content-Type: application/json"}' 
-d '{"value":"7"}' https://n...amazonaws.com/default/myFunction


I zwraca ono:

"35"


Udało nam się!

Podsumowanie

To, co tutaj przedstawiłem, to wierzchołek góry lodowej. Utworzyliśmy zaledwie jedną funkcję, a Lambda może uruchamiać lekkie modele uczenia maszynowego oraz całą aplikację webową. 

Główną korzyścią jest obsługa ogromnej ilości współbieżnych żądań właściwie bez zarządzania serwerem. Jest to również dość tanie - 0.20 dolara za milion żądań. 

Dajcie znać w komentarzu, co myślicie.


Oryginał tekstu w języku angielskim przeczytasz tutaj.

<p>Loading...</p>