AWS Lambda
AWS Lambda
Uruchamiaj kod bez zarządzania serwerami. Płać tylko za rzeczywisty czas wykonania - z dokładnością do milisekundy.
AWS Lambda to serwis serverless, który pozwala uruchamiać kod bez provisionowania i zarządzania serwerami. Wgrywasz funkcję (Python, Node.js, Java, Go, .NET, Ruby), definiujesz trigger (np. żądanie HTTP, nowy plik w S3) i Lambda robi resztę - skalowanie, patching, monitoring.
Lambda to jeden z filarów architektury serverless na AWS. Zamiast płacić za serwer 24/7, płacisz tylko za faktyczny czas wykonania kodu - z dokładnością do 1 milisekundy. Przy małym ruchu koszt wynosi dosłownie grosze. Lambda skaluje się automatycznie od 0 do tysięcy równoczesnych wywołań, bez żadnej konfiguracji z Twojej strony.
Typowy pattern: API Gateway przyjmuje żądanie HTTP ➔ wywołuje Lambda ➔ Lambda czyta/pisze do DynamoDB ➔ zwraca odpowiedź. Zero serwerów do zarządzania, zero patchy, zero przestojów.
AWS Lambda obsługuje ponad 10 bilionów wywołań miesięcznie. Serwisy takie jak Netflix, iRobot czy Coca-Cola używają Lambda jako fundamentu swoich architektur. Free Tier daje Ci 1 milion darmowych wywołań miesięcznie - na zawsze, nie tylko przez 12 miesięcy!
Aby zminimalizować cold starty, używaj Provisioned Concurrency dla krytycznych funkcji lub pisz funkcje w lekkich runtime'ach (Python, Node.js). Unikaj ciężkich frameworków (np. Spring Boot w Javie) - im mniejszy pakiet, tym szybszy start.
Cold starty Lambda w VPC moga sigac kilku sekund (poprawione od 2019, ale nadal odczuwalne). Max timeout to 15 minut, wiec Lambda nie nadaje sie do dlugich procesow. Limit /tmp to 10 GB, a pakiet wdrozeniowy max 250 MB (rozpakowany). Przy duzej skali pamietaj o limicie 1000 rownoczesnych wywolan (domyslnie) i kosztach wzrastajacych liniowo z ruchem.
AWS Lambda to serverless compute - piszesz kod, a AWS zarzadza cala infrastruktura. Platisz tylko za czas wykonania (z dokladnoscia do 1 ms) i liczbe wywolan. Lambda automatycznie skaluje sie od 0 do tysiecy rownoczesnych wykonan.
Napisz handler (funkcje)
Handler to punkt wejscia Twojej funkcji. W Python to: def handler(event, context). Event zawiera dane wejsciowe (np. body z API Gateway, rekord z S3). Context zawiera metadane: remaining time, request ID, log group. Funkcja moze zwrocic wartosc (synchronicznie) lub nic (asynchronicznie). Wspierane runtime: Python, Node.js, Java, .NET, Go, Ruby, a takze custom runtime przez Lambda Runtime API.
Spakuj i wdraz kod
Masz trzy opcje deployu: ZIP (do 50 MB skompresowany, 250 MB rozpakowany), Container Image (do 10 GB, Dockerfile z base image od AWS), lub SAM/CDK (IaC). Dla wiekszych dependencji uzywaj Lambda Layers - wspoldzielone biblioteki miedzy funkcjami (do 5 layers, lacznie 250 MB). Layer to ZIP z odpowiednia struktura katalogow (python/, nodejs/ itp.).
Skonfiguruj trigger (zrodlo wywolan)
Lambda moze byc wywolana przez: API Gateway (HTTP), S3 Events, DynamoDB Streams, SQS, SNS, EventBridge, CloudWatch Events, Kinesis, Cognito, Alexa i wiele wiecej. Kazdy trigger ma inny format event. Lambda moze byc wywolana synchronicznie (czekasz na odpowiedz), asynchronicznie (fire-and-forget z automatycznymi retries) lub przez poll-based source (SQS, Kinesis, DynamoDB Streams).
Cold Start - pierwsze wywolanie
Przy pierwszym wywolaniu (lub po okresie bezczynnosci) AWS musi: pobrac kod, uruchomic runtime, zainicjalizowac Twoj kod (import modulow, polaczenie z DB). To cold start - trwa od 100 ms (Python/Node.js) do 1-5 sekund (Java/.NET). Po cold start instancja jest "ciepla" i obsluguje kolejne wywolania bez inicjalizacji. Jedna instancja obsluguje jedno wywolanie naraz.
Wykonanie funkcji
Funkcja ma limit czasu (timeout) od 1 sekundy do 15 minut. Dostaje od 128 MB do 10,240 MB RAM (pamiec), a CPU skaluje sie proporcjonalnie - 1,769 MB = 1 vCPU. Ma dostep do /tmp (do 10 GB, ephemeral storage). Funkcja moze wykonywac HTTP requesty, operowac na plikach w /tmp, wywolywac inne serwisy AWS. Po zakonczeniu odpowiedz wraca do wywolujacego.
Odpowiedz i powtorki (retries)
Dla synchronicznych wywolan blad trafia od razu do klienta. Dla asynchronicznych Lambda automatycznie ponawia 2 razy (z opoznieniem). Po wyczerpaniu retries event trafia do Dead Letter Queue (SQS) lub On-Failure Destination (SQS, SNS, Lambda, EventBridge). Dla event source mapping (SQS, Kinesis) Lambda ponawia az do wygasniecia wiadomosci lub pomyslnego przetworzenia.
Lambda to potezne narzedzie, ale wymaga innego myslenia niz tradycyjne serwery. Oto kluczowe praktyki z produkcyjnych wdrozen serverless.
Minimalizuj cold starty
Trzymaj pakiet deploymentowy jak najmniejszy - usun niepotrzebne dependencje. Unikaj ciezkich frameworkow (Spring Boot na Lambda to cold starty 5-10s). Inicjalizuj polaczenia DB i klientow AWS POZA handlerem (w kodzie inicjalizacyjnym) - beda reuzywane miedzy wywolaniami. Dla Javy uzywaj GraalVM native image lub SnapStart (redukuje cold start do ~200ms). Python i Node.js maja najkrotsze cold starty.
PoczatkujacyProvisioned Concurrency - gdy cold start to nie opcja
Provisioned Concurrency utrzymuje N "cieplych" instancji gotowych do natychmiastowej odpowiedzi. Platisz za zarezerwowane instancje nawet jak nie sa uzywane (ok. $0.015/GB-godzine). Uzywaj dla: API z wymaganiem latency < 100ms, funkcji za API Gateway z SLA, krytycznych workflowow. Mozesz konfigurowac Application Auto Scaling aby zwiekszyc PC w godzinach szczytu i zmniejszyc w nocy.
ZaawansowanyPamiec = CPU - tuning wydajnosci
Lambda przydziela CPU proporcjonalnie do pamieci: 1,769 MB = 1 vCPU, 3,538 MB = 2 vCPU (ale watkowanie zalezy od kodu). Czesto zwiekszennie pamieci OBNIIZA koszty - funkcja wykonuje sie szybciej, a placisz za czas * pamiec. Uzywaj AWS Lambda Power Tuning (open-source od AWS) - testuje Twoja funkcje z rozna pamiecia i pokazuje optymalny stosunek koszt/wydajnosc.
ZaawansowanyLambda Layers - wspoldziel kod i dependencje
Layer to ZIP z bibliotekami dolaczany do funkcji w runtime. Uzywaj do: wspolnych bibliotek (np. AWS SDK w konkretnej wersji), niestandardowych runtime, wspolnego kodu pomiedzy funkcjami. Mozesz miec max 5 layers na funkcje. Layer musi miec odpowiednia strukture: python/lib/python3.x/site-packages/ dla Pythona, nodejs/node_modules/ dla Node.js. AWS udostepnia publiczne layers np. z Pandas/NumPy.
PoczatkujacyKatalog /tmp i Ephemeral Storage
Lambda ma /tmp z domyslnie 512 MB (rozszerzalny do 10 GB za dodatkowa oplata). Pliki w /tmp przetrwaja miedzy wywolaniami tej samej instancji (warm invocations) - mozesz cachowac dane. Ale nie polegaj na tym - Lambda moze stworzyc nowa instancje w kazdej chwili. Uzywaj /tmp do: tymczasowego przetwarzania plikow, cache bibliotek, rozpakowania archiwow przed procesowaniem.
PoczatkujacyZmienne srodowiskowe i Secrets
Konfiguruj funkcje przez environment variables (np. TABLE_NAME, API_URL, STAGE). Sa szyfrowane at-rest przez KMS. Dla sekretow (hasla, klucze API) uzyawaj AWS Secrets Manager lub SSM Parameter Store (SecureString) - pobieraj w kodzie inicjalizacyjnym i cachuj w zmiennej globalnej. Nie hardcoduj wartosci w kodzie. Uzywaj roznych environment variables per stage (dev/staging/prod).
PoczatkujacyScreenshoty z AWS Console
Wkrotce pojawia sie tu zrzuty ekranu pokazujace jak korzystac z AWS Lambda bezposrednio w konsoli AWS.
Do czego sluzy AWS Lambda?
API Backend (REST/GraphQL)
Twórz skalowalne API z API Gateway + Lambda. Każdy endpoint to osobna funkcja. Idealne dla mikrousług i aplikacji mobilnych. Płacisz tylko za faktyczne żądania.
Przetwarzanie eventów w czasie rzeczywistym
Reaguj na nowe pliki w S3 (np. generuj thumbnails), wiadomości w SQS, zmiany w DynamoDB Streams, logi z CloudWatch. Event-driven architecture bez serwera.
Automatyzacja i scheduled tasks
Cron joby przez EventBridge: czyszczenie starych zasobów, generowanie raportów, wysyłanie powiadomień, rotacja kluczy. Bez stałego serwera, bez kosztów gdy nie działa.
Przetwarzanie danych i ETL
Transformacja danych między serwisami: parsowanie CSV, konwersja formatów, wzbogacanie danych, agregacja logów. Lambda Step Functions pozwala orkiestrować złożone pipeline'y.
Co musisz wiedziec?
Funkcja Lambda
Twój kod + konfiguracja (runtime, timeout, pamięć, zmienne środowiskowe). Może być napisana w Python, Node.js, Java, Go, .NET, Ruby lub dowolnym języku przez custom runtime.
Trigger / Event Source
Zdarzenie wywołujące funkcję. Ponad 200 integracji: API Gateway (HTTP), S3 (nowy plik), SQS (wiadomość), DynamoDB Streams, EventBridge (scheduler), CloudWatch Logs, Cognito, IoT i wiele innych.
Cold Start
Opóźnienie przy pierwszym wywołaniu, gdy Lambda tworzy nowe środowisko wykonawcze (sandbox). Trwa 100ms-2s w zależności od runtime i rozmiaru pakietu. Kolejne wywołania (warm start) są szybsze.
Concurrency
Liczba równoczesnych instancji funkcji. Domyślny limit: 1000 na region (można zwiększyć). Reserved concurrency gwarantuje pulę, Provisioned concurrency eliminuje cold starty.
Layers
Warstwy z kodem współdzielonym między funkcjami: biblioteki, SDK, narzędzia. Max 5 warstw na funkcję, max 250 MB łącznie z kodem (unzipped).
Execution Role
Rola IAM przypisana do funkcji. Określa do jakich serwisów AWS Lambda ma dostęp (np. czytanie z S3, pisanie do DynamoDB, wysyłanie logów do CloudWatch).
Architektura: Serverless REST API z Lambda
Kompletne serverless API z API Gateway, Lambda i DynamoDB. Zero serwerow do zarzadzania, automatyczne skalowanie od 0 do tysiecy requestow na sekunde, platisz tylko za faktyczne uzycie.
Porownanie Lambda vs EC2 vs Fargate
| Cecha | Lambda | EC2 | Fargate |
|---|---|---|---|
| Model kosztow | Za wywolanie + czas | Za godzine (On-Demand/RI) | Za vCPU + pamiec/s |
| Cold start | 100ms-10s (VPC do 10s) | Brak (serwer dziala) | Brak (kontener dziala) |
| Max czas wykonania | 15 minut | Bez limitu | Bez limitu |
| Skalowanie | Automatyczne (ms) | Reczne lub ASG (minuty) | Automatyczne (sekundy) |
| Zlozonosc operacyjna | Minimalna | Wysoka (patching, AMI) | Srednia (task definitions) |
| Najlepsze dla | Event-driven, API, ETL | Staly ruch, GPU, specjalne OS | Kontenery, mikroserwisy |
Ile kosztuje AWS Lambda?
Żądania
Płacisz za liczbę wywołań funkcji. Pierwsze 1 milion/miesiąc GRATIS (na zawsze).
$0.20 za milion żądań (po Free Tier)
Czas wykonania (GB-s)
Płacisz za czas × przydzieloną pamięć. Im więcej RAM, tym więcej CPU. Rozliczanie co 1ms.
128 MB, 200ms = 0.025 GB-s ≈ ułamek grosza
Provisioned Concurrency
Opcjonalne: utrzymujesz ciepłe instancje, eliminując cold starty. Płacisz za gotowość + czas.
~$0.015/godz. za 1 instancję gotową
Free Tier
1 milion żądań + 400 000 GB-s MIESIĘCZNIE - za darmo, bez limitu czasowego. Wystarczy na większość projektów dev/test.
~3.2 mln sekund obliczeń przy 128 MB RAM
Przyklady AWS CLI
Utwórz funkcję Lambda
Tworzy nową funkcję z kodu ZIP, runtime Python 3.12
aws lambda create-function \
--function-name moja-funkcja \
--runtime python3.12 \
--role arn:aws:iam::123456789012:role/lambda-role \
--handler lambda_function.lambda_handler \
--zip-file fileb://function.zip
Wywołaj funkcję
Ręczne wywołanie Lambda z parametrami JSON
aws lambda invoke \
--function-name moja-funkcja \
--payload '{"name": "CloudManiak", "action": "test"}' \
--cli-binary-format raw-in-base64-out \
response.json && cat response.json
Sprawdź logi funkcji
Ostatnie logi z CloudWatch dla Twojej Lambda
aws logs tail /aws/lambda/moja-funkcja \
--since 1h \
--format short
Zaktualizuj kod funkcji
Wgraj nową wersję kodu bez zmiany konfiguracji
aws lambda update-function-code \
--function-name moja-funkcja \
--zip-file fileb://function-v2.zip
Quiz: AWS Lambda
Sprawdz czy dobrze rozumiesz podstawy. Kliknij odpowiedz — feedback pojawi sie od razu.
1. Jaki jest maksymalny timeout funkcji Lambda?
2. Czym jest Cold Start w Lambda?
3. Ile darmowych wywołań Lambda dostajesz w Free Tier?
4. Które źródło NIE może bezpośrednio triggerować Lambda?
Czesto uzywane razem z AWS Lambda
Czytaj więcej o AWS Lambda
Chcesz poznac AWS Lambda w praktyce?
Darmowy kurs "AWS od podstaw" pokazuje jak uzywac AWS Lambda krok po kroku. Teoria + praktyka od zera.