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.