Lambda 계층 및 배포 패키지
공유 종속 항목을 재사용 가능한 Lambda 계층으로 묶고 대규모 런타임을 위한 배포 패키지를 관리합니다.
Lambda 계층 및 배포 패키지은(는) CoddyKit의 무료 AWS Solutions Architect 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AWS Solutions Architect 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AWS Solutions Architect 강의에는 총 4개의 강의가 포함되어 있습니다.
Lambda의 의존성 문제
Lambda 배포 패키지는 자체적으로 완결되어야 하므로 모든 의존성(라이브러리, SDK, 바이너리)을 ZIP에 포함해야 합니다. 이 때문에 패키지 크기가 빠르게 커집니다. 예를 들어 NumPy, Pandas, SciPy를 사용하는 Python 데이터 과학 함수는 압축을 해제했을 때 200 MB를 초과할 수 있습니다. 함수 코드를 업데이트할 때마다 변경되지 않은 라이브러리를 포함한 전체 묶음을 다시 업로드해야 합니다. Lambda 레이어는 공유 의존성을 함수 코드에서 분리하여 이 문제를 해결합니다.
Lambda 레이어란 무엇인가요?
Lambda 레이어는 라이브러리, 사용자 지정 런타임, 데이터 또는 구성 파일이 포함된 ZIP 아카이브입니다. 레이어는 함수 코드와 별도로 저장되며 /opt의 함수 실행 환경에 탑재됩니다. 여러 함수가 동일한 레이어를 공유할 수 있으므로 레이어를 한 번만 업데이트하면 이를 사용하는 모든 함수에 변경 사항이 적용됩니다. 각 Lambda 함수에는 최대 5개의 레이어를 연결할 수 있으며, 압축을 해제한 전체 크기는 250 MB 미만이어야 합니다.
레이어 생성 및 게시
레이어를 생성하려면 런타임에 맞는 디렉터리 구조로 종속 항목을 패키징합니다(예: Python의 경우 python/lib/python3.12/site-packages/). 그런 다음 ZIP으로 압축하여 게시합니다. 게시가 완료되면 레이어에 버전 ARN이 부여됩니다. 함수에 레이어를 연결할 때 이 ARN을 참조합니다. 레이어를 업데이트할 때마다 새 버전이 생성되며, 함수를 명시적으로 업데이트하기 전까지 함수는 구성된 버전을 계속 사용합니다.
# 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.11함수에 레이어 연결
함수를 생성하거나 업데이트할 때 --layers 매개 변수를 사용하여 레이어를 추가합니다. Lambda는 함수가 시작되기 전에 연결된 모든 레이어를 /opt에 탑재합니다. /opt/python 아래의 Python 패키지는 자동으로 Python 경로에 포함되며, /opt/nodejs/node_modules 아래의 Node.js 모듈은 자동으로 검색됩니다. 함수 코드는 레이어 패키지가 로컬에 설치된 것처럼 import 또는 require를 사용하여 가져올 수 있습니다.
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'AWS 제공 공개 레이어
AWS는 직접 빌드하지 않고도 사용할 수 있는 공식 레이어를 게시합니다. 예로는 구조화된 로깅, 추적, 기능 플래그를 제공하는 AWS Lambda Powertools 레이어, 데이터베이스 드라이버 레이어, SSM/Secrets Manager 값을 로컬에 캐시하는 AWS Parameters and Secrets Lambda Extension 레이어가 있습니다. Datadog 및 New Relic과 같은 타사 공급업체도 모니터링 에이전트용 공개 레이어를 게시합니다. 사용 가능한 공개 레이어는 Serverless Application Repository와 Lambda 콘솔에서 확인하십시오.
레이어를 통한 Lambda 확장 프로그램
Lambda Extensions는 동일한 실행 환경에서 함수 코드와 함께 별도의 프로세스로 실행됩니다. 확장 프로그램은 Lambda 수명 주기 이벤트(init, invoke, shutdown)에 연결하여 원격 측정 데이터 수집, 보안 검사, 구성 캐싱 등의 작업을 수행합니다. 확장 프로그램은 Lambda 레이어로 배포됩니다. AWS는 CloudWatch Lambda Insights 확장 프로그램과 AWS AppConfig 확장 프로그램을 제공하며, 공급업체는 확장 프로그램 형태의 사용자 지정 모니터링 에이전트를 제공합니다.
배포 패키지 형식: ZIP과 컨테이너 비교
Lambda는 두 가지 배포 형식을 지원합니다.
- ZIP(압축 시 최대 50 MB, 압축 해제 시 250 MB): 업로드가 빠르고 레이어를 지원하며 모든 런타임에서 작동합니다.
- 컨테이너 이미지(최대 10 GB): Amazon ECR에 저장되고 표준 Docker 도구를 사용하며 레이어는 지원하지 않습니다. 매우 큰 종속 항목(ML 모델, 대규모 바이너리)에 적합합니다.
컨테이너 이미지는 Lambda가 핸들러를 호출하는 방법을 알 수 있도록 Lambda Runtime Interface를 구현해야 합니다(AWS에서 제공하는 기본 이미지를 사용).
# 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']컨테이너 이미지 작업 흐름
Lambda 컨테이너 이미지를 빌드하고 배포하는 과정은 표준 컨테이너 작업 흐름을 따릅니다. docker build로 빌드하고, Amazon ECR에 푸시한 다음, Lambda 함수를 생성하거나 업데이트할 때 이미지 URI를 참조합니다. 컨테이너 이미지는 변경할 수 없습니다 deprecate?
# 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:latest버전 관리 및 별칭
Lambda 버전은 함수 코드와 구성의 변경할 수 없는 스냅샷입니다. 버전을 게시할 때마다 Lambda는 배포 패키지, 환경 변수 및 레이어를 고정합니다. 별칭은 특정 버전을 가리키는 이름이 지정된 포인터입니다. 예를 들어 prod는 버전 5를, staging은 버전 6을 가리킬 수 있습니다. 또한 가중치 기반 별칭을 사용하여 카나리 배포를 위해 트래픽의 일정 비율을 새 버전으로 라우팅할 수 있습니다(예: v6에 10%, v5에 90%).
# 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}'레이어 버전 관리 및 사용 중단
레이어에도 버전이 부여됩니다. 새 레이어 버전을 게시해도 기존 함수는 업데이트하기 전까지 고정된 버전을 계속 사용합니다. 따라서 공유 레이어를 안전하게 업데이트하면서 모든 함수를 동시에 중단하지 않고 새 버전을 점진적으로 배포할 수 있습니다. 이후에는 저장 공간과 유지 관리 부담을 줄이기 위해 이전 레이어 버전의 사용을 중단하십시오. 콘솔에서 레이어 버전을 삭제하더라도 이를 참조하는 함수가 없어질 때까지 Lambda는 해당 레이어 버전을 보존합니다.
레이어와 컨테이너 이미지 중 선택하기
압축을 해제한 전체 크기가 250 MB 미만이고, 여러 함수에서 종속 항목을 공유하며, 빠르게 반복해서 개발하고 싶다면(레이어를 한 번 업데이트하면 모든 함수에 적용) 레이어를 사용하십시오. 종속 항목이 250 MB를 초과하거나, 사용자 지정 기본 OS 패키지를 사용해야 하거나, 기존 Docker 작업 흐름이 있거나, 대규모 자산(ML 모델, 참조 데이터베이스)을 포함하려면 컨테이너 이미지를 사용하십시오. 컨테이너 이미지는 Lambda 레이어와 호환되지 않지만 더 높은 유연성을 제공합니다.
빠른 확인
이 레슨에서 다룬 AWS Solutions Architect (SAA-C03) 개념을 이해했는지 확인해 보십시오.
레슨 요약
이 레슨에서는 다음을 배웠습니다. Lambda 레이어는 공유 종속 항목을 함수 코드와 별도로 패키징하여 패키지 크기를 줄이고 여러 함수에서 재사용할 수 있게 합니다. 컨테이너 이미지는 ECR을 통해 최대 10 GB까지 사용할 수 있으며, 종속 항목이 250 MB ZIP 제한을 초과하거나 Docker 작업 흐름을 이미 사용 중일 때 적합합니다. 또한 버전 관리 및 별칭을 사용하면 변경할 수 없는 릴리스를 제공하고 가중치에 따른 트래픽 분할로 카나리 배포를 수행할 수 있습니다. 다음으로 Lambda@Edge와 이벤트 기반 패턴을 살펴보겠습니다.
자주 묻는 질문
“Lambda 계층 및 배포 패키지” 강의는 무료인가요?
네 — “Lambda 계층 및 배포 패키지” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AWS Solutions Architect 강의 전체를 잠금 해제할 수 있습니다. AWS Solutions Architect 강의에는 총 4개의 강의가 포함되어 있습니다.
“Lambda 계층 및 배포 패키지”에서 뭘 배우나요?
공유 종속 항목을 재사용 가능한 Lambda 계층으로 묶고 대규모 런타임을 위한 배포 패키지를 관리합니다. 브라우저에서 직접 실행하는 실습 코드로 AWS Solutions Architect을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
AWS Solutions Architect을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 AWS Solutions Architect은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“Lambda 계층 및 배포 패키지” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 AWS Solutions Architect 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 AWS Solutions Architect 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Lambda 함수: 런타임, 트리거 및 핸들러
- 동시성, 스로틀링 및 예약된 동시성
- Lambda 계층 및 배포 패키지
- Lambda@Edge 및 이벤트 기반 패턴