Lambda 함수 (zip) + Layer (zip)
├── app.py └── python/
└── pymysql/
코드와 라이브러리가 분리됨
Docker 이미지 (하나로 합침)
├── app.py
├── pymysql/
└── Lambda Runtime
코드, 라이브러리, 런타임이 전부 하나의 이미지 안에 있음
# 1. Layer 만들기
mkdir -p python
pip install pymysql -t python/
zip -r pymysql-layer.zip python/
aws lambda publish-layer-version \\
--layer-name pymysql-layer \\
--zip-file fileb://pymysql-layer.zip \\
--compatible-runtimes python3.12 \\
--region ap-northeast-2
# 2. 함수 코드 zip
zip function.zip app.py
# 3. 함수 생성
aws lambda create-function \\
--function-name my-function \\
--runtime python3.12 \\
--handler app.handler \\
--role arn:aws:iam::<ACCOUNT_ID>:role/<ROLE_NAME> \\
--zip-file fileb://function.zip \\
--region ap-northeast-2
# 4. Layer 연결
aws lambda update-function-configuration \\
--function-name my-function \\
--layers arn:aws:lambda:ap-northeast-2:<ACCOUNT_ID>:layer:pymysql-layer:1 \\
--region ap-northeast-2
# 5. 코드 수정 시
zip function.zip app.py
aws lambda update-function-code \\
--function-name my-function \\
--zip-file fileb://function.zip \\
--region ap-northeast-2
# 1. 파일 준비
# app.py, requirements.txt, Dockerfile 작성
# 2. ECR 리포지토리 생성
aws ecr create-repository \\
--repository-name my-function \\
--region ap-northeast-2
# 3. ECR 로그인
aws ecr get-login-password --region ap-northeast-2 | \\
docker login --username AWS --password-stdin <ACCOUNT_ID>.dkr.ecr.ap-northeast-2.amazonaws.com
# 4. 빌드 & 푸시
docker build -t my-function .
docker tag my-function:latest <ACCOUNT_ID>.dkr.ecr.ap-northeast-2.amazonaws.com/my-function:latest
docker push <ACCOUNT_ID>.dkr.ecr.ap-northeast-2.amazonaws.com/my-function:latest
# 5. 함수 생성
aws lambda create-function \\
--function-name my-function \\
--package-type Image \\
--code ImageUri=<ACCOUNT_ID>.dkr.ecr.ap-northeast-2.amazonaws.com/my-function:latest \\
--role arn:aws:iam::<ACCOUNT_ID>:role/<ROLE_NAME> \\
--region ap-northeast-2
# 6. 코드 수정 시
docker build -t my-function .
docker tag my-function:latest <ACCOUNT_ID>.dkr.ecr.ap-northeast-2.amazonaws.com/my-function:latest
docker push <ACCOUNT_ID>.dkr.ecr.ap-northeast-2.amazonaws.com/my-function:latest
aws lambda update-function-code \\
--function-name my-function \\
--image-uri <ACCOUNT_ID>.dkr.ecr.ap-northeast-2.amazonaws.com/my-function:latest \\
--region ap-northeast-2