Lambda@Edge i wzorce sterowane zdarzeniami
Uruchomią funkcje w lokalizacjach brzegowych CloudFront oraz połączą Lambda z SQS, SNS, DynamoDB Streams i Kinesis na potrzeby architektur sterowanych zdarzeniami.
Lambda@Edge i wzorce sterowane zdarzeniami to bezpłatna lekcja Cloud & IT Cert Prep na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cloud & IT Cert Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.
Czym jest Lambda@Edge?
Lambda@Edge umożliwia uruchamianie funkcji Lambda w lokalizacjach brzegowych CloudFront na całym świecie — bliżej użytkowników końcowych — zamiast w centralnym Regionie. Pozwala to dostosowywać żądania i odpowiedzi HTTP przy dodatkowym opóźnieniu na poziomie CDN wynoszącym poniżej milisekundy. Funkcje Lambda@Edge są wdrażane globalnie i wywoływane przy każdym zdarzeniu trafienia lub chybienia pamięci podręcznej CloudFront, dzięki czemu idealnie nadają się do lekkich zadań związanych z modyfikowaniem żądań.
Cztery punkty wyzwalania CloudFront
Lambda@Edge może przechwytywać ruch w czterech punktach cyklu życia żądania CloudFront:
- Viewer Request: uruchamiane, gdy CloudFront otrzymuje żądanie od przeglądarki (użytkownika), przed sprawdzeniem pamięci podręcznej
- Origin Request: uruchamiane, gdy CloudFront przekazuje żądanie po chybieniu pamięci podręcznej do źródła
- Origin Response: uruchamiane, gdy źródło zwraca odpowiedź, przed zapisaniem jej w pamięci podręcznej
- Viewer Response: uruchamiane przed zwróceniem odpowiedzi przez CloudFront do przeglądarki
Ograniczenia Lambda@Edge w porównaniu ze zwykłą Lambdą
Lambda@Edge ma bardziej rygorystyczne limity niż zwykła Lambda: maksymalnie 128 MB pamięci (zdarzenia viewer), 1 GB (zdarzenia origin), maksymalnie 5 sekund czasu oczekiwania (viewer) oraz 30 sekund (origin). Funkcje muszą być utworzone w regionie us-east-1 i wdrożone na brzegu za pośrednictwem CloudFront. Brak obsługi VPC, zmiennych środowiskowych i warstw Lambda. Ograniczenia te oznaczają, że Lambda@Edge jest przeznaczona do lekkich transformacji, a nie do intensywnego przetwarzania.
Typowe zastosowania Lambda@Edge
Lambda@Edge sprawdza się w przypadku: testów A/B (przepisywanie adresów URL do różnych ścieżek źródłowych na podstawie plików cookie), uwierzytelniania (weryfikowanie tokenów JWT na brzegu przed przekazaniem żądania do źródła), modyfikowania nagłówków HTTP (dodawanie nagłówków bezpieczeństwa, takich jak HSTS, CSP i X-Frame-Options), normalizacji adresów URL (przekierowanie z www na wersję bez www lub wymuszenie końcowych ukośników) oraz personalizacji (serwowanie różnych treści na podstawie kraju użytkownika z nagłówka CloudFront-Viewer-Country).
// Viewer Request: Add security headers
exports.handler = async (event) => {
const response = event.Records[0].cf.response;
response.headers['strict-transport-security'] = [{
key: 'Strict-Transport-Security',
value: 'max-age=63072000; includeSubdomains; preload'
}];
response.headers['x-frame-options'] = [{
key: 'X-Frame-Options',
value: 'DENY'
}];
return response;
};CloudFront Functions a Lambda@Edge
CloudFront Functions to niezwykle lekkie funkcje JavaScript uruchamiane wyłącznie na etapach żądania i odpowiedzi przeglądarki, z limitem czasu wykonania wynoszącym 2 ms i znacznie niższym kosztem. W prostych zastosowaniach (przepisywanie adresów URL, modyfikowanie nagłówków, normalizacja klucza pamięci podręcznej) CloudFront Functions są preferowane względem Lambda@Edge, ponieważ działają szybciej i kosztują mniej. Lambda@Edge należy używać, gdy potrzebny jest dostęp do wywołań sieciowych, większych ładunków lub punktów wyzwalania żądania i odpowiedzi źródła.
Architektura sterowana zdarzeniami z Lambdą
Architektura sterowana zdarzeniami łączy usługi za pomocą zdarzeń — komunikatów reprezentujących coś, co się wydarzyło. W AWS Lambda jest podstawowym konsumentem zdarzeń: odbiera zdarzenia z SQS, SNS, DynamoDB Streams, Kinesis, S3, EventBridge i innych usług. Każde zdarzenie wywołuje wykonanie funkcji Lambda, co pozwala systemom reagować asynchronicznie i niezależnie, bez ścisłego powiązania. Ten wzorzec zapewnia luźne powiązanie, niezależne skalowanie i izolację błędów.
Lambda jako konsument SQS
Lambdę można skonfigurować jako mapowanie źródła zdarzeń dla SQS. Lambda odpytuje kolejkę, pobiera do rozmiaru partii komunikatów (do 10 000 w przypadku kolejek standardowych i 10 w przypadku FIFO) i wywołuje funkcję raz dla każdej partii. Jeśli funkcja zakończy się błędem, cała partia jest zwracana do kolejki. Należy skonfigurować okno partii, aby przed wywołaniem zaczekać na większą liczbę komunikatów i poprawić przepustowość. Dla źródłowej kolejki SQS należy używać DLQ w przypadku komunikatów, które wielokrotnie kończą się niepowodzeniem.
aws lambda create-event-source-mapping \
--function-name 'OrderProcessor' \
--event-source-arn 'arn:aws:sqs:us-east-1:123456789012:OrderQueue' \
--batch-size 10 \
--maximum-batching-window-in-seconds 5Lambda z DynamoDB Streams
DynamoDB Streams przechwytuje każdą zmianę na poziomie elementu (INSERT, MODIFY, REMOVE) jako uporządkowaną sekwencję zdarzeń. Lambda odczytuje strumień za pomocą mapowania źródła zdarzeń z opcją TRIM_HORIZON (rozpoczęcie od najstarszych danych) lub LATEST (rozpoczęcie od najnowszych danych). Lambda przetwarza rekordy w kolejności w obrębie partycji. Nieudane partie blokują dalsze przetwarzanie tej samej partycji do czasu rozwiązania problemu — należy użyć opcji bisect on error, aby dzielić nieudane partie i izolować problematyczne rekordy.
aws lambda create-event-source-mapping \
--function-name 'StreamProcessor' \
--event-source-arn 'arn:aws:dynamodb:us-east-1:123456789012:table/Orders/stream/...' \
--starting-position TRIM_HORIZON \
--batch-size 100 \
--bisect-batch-on-function-errorLambda z Kinesis Data Streams
Lambda przetwarza rekordy Kinesis podobnie jak rekordy DynamoDB Streams — jedno równoczesne wykonanie na shard. Najważniejsze opcje konfiguracji obejmują współczynnik równoległości (do 10 równoczesnych wywołań Lambda na shard, z równoległym przetwarzaniem podpartii) oraz zwiększoną dystrybucję (dedykowana przepustowość 2 MB/s na shard dla konsumenta Lambda). Opcje te znacznie zwiększają przepustowość strumieni o dużym natężeniu bez zwiększania liczby shardów.
EventBridge jako router zdarzeń
Amazon EventBridge to zalecana magistrala zdarzeń do łączenia usług AWS i aplikacji niestandardowych. Zdarzenia trafiają do magistrali, a reguły filtrują je według wzorca i kierują do celów, w tym Lambda, SQS, Step Functions i innych usług. EventBridge całkowicie oddziela producentów zdarzeń od konsumentów — żadna ze stron nie zna drugiej. Domyślna magistrala zdarzeń odbiera zdarzenia z usług AWS; dla zdarzeń aplikacji należy utworzyć niestandardową magistralę zdarzeń.
aws events put-rule \
--name 'OrderPlacedRule' \
--event-pattern '{"source": ["com.myapp.orders"], "detail-type": ["OrderPlaced"]}' \
--state ENABLED
aws events put-targets \
--rule 'OrderPlacedRule' \
--targets 'Id=LambdaTarget,Arn=arn:aws:lambda:us-east-1:123456789012:function:InventoryUpdater'Wzorzec fan-out: SNS do wielu funkcji Lambda
Typowym wzorcem sterowanym zdarzeniami jest fan-out: jedno zdarzenie uruchamia wiele równoległych potoków przetwarzania. Należy opublikować zdarzenie w temacie SNS, a wiele subskrypcji funkcji Lambda zareaguje na nie niezależnie. Na przykład zdarzenie złożenia zamówienia może zostać rozdzielone na: funkcję Lambda wysyłającą wiadomość e-mail z potwierdzeniem, funkcję Lambda aktualizującą stan magazynowy oraz funkcję Lambda powiadamiającą magazyn. Każdy konsument działa niezależnie i skaluje się oddzielnie — żaden pojedynczy konsument nie może blokować pozostałych.
Szybkie sprawdzenie
Sprawdź swoją wiedzę na temat zagadnień z egzaminu AWS Solutions Architect (SAA-C03) omówionych w tej lekcji.
Podsumowanie lekcji
W tej lekcji poznano: Lambda@Edge, która uruchamia funkcje w lokalizacjach brzegowych CloudFront i oferuje cztery punkty wyzwalania (żądanie/odpowiedź przeglądarki oraz żądanie/odpowiedź źródła) do zadań takich jak uwierzytelnianie, przepisywanie adresów URL i modyfikowanie nagłówków; CloudFront Functions, które są tańszą i zapewniającą mniejsze opóźnienia alternatywą w przypadku prostych transformacji na etapie przeglądarki; oraz wzorce sterowane zdarzeniami wykorzystujące SQS, DynamoDB Streams, Kinesis, EventBridge i fan-out SNS, które umożliwiają tworzenie luźno powiązanych architektur, w których Lambda reaguje na zdarzenia w czasie rzeczywistym. W następnej części omówimy kolejki SQS Standard i FIFO.
Często zadawane pytania
Czy lekcja „Lambda@Edge i wzorce sterowane zdarzeniami” jest bezpłatna?
Tak — pełny tekst „Lambda@Edge i wzorce sterowane zdarzeniami” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cloud & IT Cert Prep, przejdź na CoddyKit PRO. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.
Co nauczysz się w „Lambda@Edge i wzorce sterowane zdarzeniami”?
Uruchomią funkcje w lokalizacjach brzegowych CloudFront oraz połączą Lambda z SQS, SNS, DynamoDB Streams i Kinesis na potrzeby architektur sterowanych zdarzeniami. Ćwiczysz Cloud & IT Cert Prep z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Cloud & IT Cert Prep?
Nie wymagamy żadnego doświadczenia. Cloud & IT Cert Prep w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Lambda@Edge i wzorce sterowane zdarzeniami”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Cloud & IT Cert Prep?
Tak. Każda lekcja Cloud & IT Cert Prep zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Funkcje Lambda: środowiska uruchomieniowe, wyzwalacze i handlery
- Współbieżność, ograniczanie i zarezerwowana współbieżność
- Warstwy Lambda i pakiety wdrożeniowe
- Lambda@Edge i wzorce sterowane zdarzeniami