구조 차이

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

비교 정리