Warstwy Lambda i pakiety wdrożeniowe
Spakują współdzielone zależności do wielokrotnego użytku w warstwach Lambda oraz będą zarządzać pakietami wdrożeniowymi dla dużych środowisk uruchomieniowych.
Warstwy Lambda i pakiety wdrożeniowe to bezpłatna lekcja Cloud & IT Cert Prep na CoddyKit. To lekcja 3 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.
Problem zależności w Lambda
Pakiety wdrożeniowe Lambda muszą być samodzielne — wszystkie zależności (biblioteki, SDK, pliki binarne) muszą znajdować się w archiwum ZIP. Rozmiar pakietu szybko rośnie: funkcja analityczna w języku Python korzystająca z NumPy, Pandas i SciPy może przekroczyć 200 MB po rozpakowaniu. Każda aktualizacja kodu funkcji wymaga ponownego przesłania całego pakietu, w tym niezmienionych bibliotek. Warstwy Lambda rozwiązują ten problem, oddzielając współdzielone zależności od kodu funkcji.
Czym jest warstwa Lambda?
Warstwa Lambda to archiwum ZIP zawierające biblioteki, niestandardowe środowiska uruchomieniowe, dane lub pliki konfiguracyjne. Warstwy są przechowywane oddzielnie od kodu funkcji i montowane w środowisku wykonywania funkcji w lokalizacji /opt. Wiele funkcji może współdzielić tę samą warstwę — wystarczy zaktualizować ją raz, aby każda korzystająca z niej funkcja odniosła korzyści. Każda funkcja Lambda może mieć maksymalnie 5 warstw, a łączny rozmiar rozpakowanych plików musi być mniejszy niż 250 MB.
Tworzenie i publikowanie warstwy
Aby utworzyć warstwę, należy umieścić zależności w prawidłowej strukturze katalogów dla danego środowiska uruchomieniowego (np. python/lib/python3.12/site-packages/ w przypadku Pythona), skompresować je do pliku ZIP i opublikować. Po opublikowaniu warstwa otrzymuje ARN wersji. Tego ARN należy użyć podczas dołączania warstwy do funkcji. Przy każdej aktualizacji warstwy tworzona jest nowa wersja. Funkcje nadal korzystają z wersji, z którą zostały skonfigurowane, dopóki nie zaktualizuje ich Pan/Pani jawnie.
# Build layer for Python
mkdir -p layer/python
pip install pandas numpy -t layer/python/
cd layer && zip -r ../my-data-layer.zip python/
# Publish the layer
aws lambda publish-layer-version \
--layer-name 'DataScienceLayer' \
--zip-file fileb://my-data-layer.zip \
--compatible-runtimes python3.12 python3.11Dołączanie warstw do funkcji
Warstwy należy dodawać do funkcji za pomocą parametru --layers podczas tworzenia lub aktualizowania funkcji. Lambda montuje wszystkie dołączone warstwy w lokalizacji /opt przed uruchomieniem funkcji. Pakiety Pythona w katalogu /opt/python są automatycznie dostępne w ścieżce Pythona, a moduły Node.js w katalogu /opt/nodejs/node_modules są automatycznie odnajdywane. Kod funkcji może używać import lub require do wczytywania pakietów z warstwy tak, jakby były zainstalowane lokalnie.
aws lambda update-function-configuration \
--function-name 'DataProcessor' \
--layers \
'arn:aws:lambda:us-east-1:123456789012:layer:DataScienceLayer:3' \
'arn:aws:lambda:us-east-1:123456789012:layer:UtilsLayer:1'Publiczne warstwy udostępniane przez AWS
AWS publikuje oficjalne warstwy, z których można korzystać bez tworzenia własnych. Przykłady obejmują warstwę AWS Lambda Powertools (rejestrowanie strukturalne, śledzenie i flagi funkcji), warstwy ze sterownikami baz danych oraz warstwę AWS Parameters and Secrets Lambda Extension do lokalnego buforowania wartości z SSM/Secrets Manager. Dostawcy zewnętrzni, tacy jak Datadog i New Relic, również publikują publiczne warstwy ze swoimi agentami monitorowania. Dostępne publiczne warstwy można sprawdzić w Serverless Application Repository oraz w konsoli Lambda.
Rozszerzenia Lambda za pośrednictwem warstw
Rozszerzenia Lambda działają jako oddzielne procesy obok kodu funkcji, w tym samym środowisku wykonywania. Reagują na zdarzenia cyklu życia Lambda (init, invoke, shutdown), aby wykonywać takie zadania jak zbieranie danych telemetrycznych, skanowanie pod kątem bezpieczeństwa lub buforowanie konfiguracji. Rozszerzenia są dystrybuowane jako warstwy Lambda. AWS udostępnia rozszerzenie CloudWatch Lambda Insights oraz rozszerzenie AWS AppConfig, a dostawcy oferują niestandardowych agentów monitorowania w postaci rozszerzeń.
Formaty pakietów wdrożeniowych: ZIP a kontener
Lambda obsługuje dwa formaty wdrożeniowe:
- ZIP (do 50 MB po kompresji, 250 MB po rozpakowaniu): szybkie przesyłanie, obsługa warstw, zgodność ze wszystkimi środowiskami uruchomieniowymi.
- Obraz kontenera (do 10 GB): przechowywany w Amazon ECR, wykorzystuje standardowe narzędzia Docker, nie obsługuje warstw i jest idealny w przypadku bardzo dużych zależności (modeli ML, dużych plików binarnych).
Obrazy kontenerów muszą implementować Lambda Runtime Interface (z użyciem obrazów bazowych udostępnianych przez AWS), aby Lambda wiedziała, jak wywołać handler.
# Dockerfile for a Lambda container image
FROM public.ecr.aws/lambda/python:3.12
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY app.py .
CMD ['app.lambda_handler']Proces pracy z obrazem kontenera
Budowanie i wdrażanie obrazu kontenera Lambda przebiega zgodnie ze standardowym procesem pracy z kontenerami: obraz należy zbudować za pomocą docker build, przesłać do Amazon ECR, a następnie podczas tworzenia lub aktualizowania funkcji Lambda podać URI obrazu. Obrazy kontenerów są niezmienne — każdy tag obrazu odpowiada konkretnej wersji funkcji. Lambda buforuje obrazy kontenerów w swojej infrastrukturze, dlatego kolejne zimne starty po pierwszym są szybsze.
# Build and push to ECR
docker build -t my-lambda-function .
aws ecr get-login-password | docker login --username AWS \
--password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com
docker tag my-lambda-function \
123456789012.dkr.ecr.us-east-1.amazonaws.com/my-repo:latest
docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-repo:latestWersjonowanie i aliasy
Wersje Lambda są niezmiennymi migawkami kodu i konfiguracji funkcji. Przy każdym opublikowaniu wersji Lambda zamraża pakiet wdrożeniowy, zmienne środowiskowe i warstwy. Aliasy to nazwane wskaźniki do konkretnych wersji — alias prod może wskazywać wersję 5, a staging wersję 6. Można również używać aliasów ważonych, aby kierować określony procent ruchu do nowej wersji podczas wdrożeń kanarkowych (np. 10% do v6 i 90% do v5).
# Publish a version and create/update an alias
aws lambda publish-version --function-name 'DataProcessor'
# Returns version number, e.g., "Version": "7"
aws lambda update-alias \
--function-name 'DataProcessor' \
--name 'prod' \
--function-version '7' \
--routing-config 'AdditionalVersionWeights={"6": 0.1}'Wersjonowanie i wycofywanie warstw
Warstwy również są wersjonowane. Po opublikowaniu nowej wersji warstwy istniejące funkcje nadal korzystają z przypiętej wersji, dopóki nie zostaną zaktualizowane. Dzięki temu można bezpiecznie zaktualizować współdzieloną warstwę bez jednoczesnego zakłócania działania wszystkich funkcji — nową wersję można wdrażać stopniowo. Z czasem warto wycofywać stare wersje warstw, aby ograniczyć zajętość pamięci i nakład pracy związany z utrzymaniem. Lambda zachowuje wersje warstw nawet po ich usunięciu z konsoli, dopóki nie odwołuje się do nich żadna funkcja.
Wybór między warstwami a obrazami kontenerów
Warstw należy używać, gdy łączny rozmiar po rozpakowaniu mieści się w limicie 250 MB, zależności mają być współdzielone przez wiele funkcji i potrzebne są szybkie iteracje (jednokrotna aktualizacja warstwy przynosi korzyści wszystkim funkcjom). Obrazów kontenerów należy używać, gdy zależności przekraczają 250 MB, potrzebne są niestandardowe pakiety bazowego systemu operacyjnego, istnieją już procesy pracy z Dockerem lub konieczne jest dołączenie dużych zasobów (modeli ML, baz referencyjnych). Obrazy kontenerów nie są zgodne z warstwami Lambda, ale zapewniają większą elastyczność.
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: warstwy Lambda, które pakują współdzielone zależności oddzielnie od kodu funkcji, zmniejszając rozmiar pakietu i umożliwiając ponowne użycie w wielu funkcjach; obrazy kontenerów (do 10 GB za pośrednictwem ECR), które są właściwym wyborem, gdy zależności przekraczają limit 250 MB dla ZIP lub gdy używane są już procesy pracy z Dockerem; oraz wersjonowanie i aliasy, które umożliwiają tworzenie niezmiennych wydań i wdrożeń kanarkowych z podziałem ruchu według wag. W następnej części omówimy Lambda@Edge i wzorce sterowane zdarzeniami.
Często zadawane pytania
Czy lekcja „Warstwy Lambda i pakiety wdrożeniowe” jest bezpłatna?
Tak — pełny tekst „Warstwy Lambda i pakiety wdrożeniowe” 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 „Warstwy Lambda i pakiety wdrożeniowe”?
Spakują współdzielone zależności do wielokrotnego użytku w warstwach Lambda oraz będą zarządzać pakietami wdrożeniowymi dla dużych środowisk uruchomieniowych. Ć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 3 z 4.
Ile czasu zajmuje lekcja „Warstwy Lambda i pakiety wdrożeniowe”?
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