Lambda에서 컨테이너 이미지를 사용하는 방법에는 세가지가 있으며, Python을 기준으로 설명한다.
- Lambda용 AWS 기본 이미지 사용
- 언어 runtime 지정됨
- 운영체제: Amazon Linux 2(Python 3.8 ~), Amazon Linux(Python 3.7)
- 런타임 인터페이스 클라이언트/에뮬레이터 포함
- 사용자 지정 런타임용 AWS 기본 이미지 사용
- 사용자가 runtime 설정
- 운영체제: Amazon Linux 또는 Amazon Linux 2
- 런타임 인터페이스 에뮬레이터 포함
- Lambda 호환을 위해 런타임 인터페이스 클라이언트를 포함 시켜야함
- AWS 이미지가 아닌 별개 이미지 사용
- 런타임, 운영체제 모두 사용자 지정
- 로컬 테스트를 하려면 런타임 인터페이스 에뮬레이터를 포함 시켜야함 (선택)
- Lambda 호환을 위해 런타임 인터페이스 클라이언트를 포함 시켜야함 (필수)
위의 세가지 방법 중, 런타임과 운영체제를 모두 자유롭게 지정할 수 있는 3번째 방법으로 진행하려고 한다.
AWS 이미지가 아닌 도커 이미지를 사용해서 Lambda 함수 배포
💡 Prerequisites
- AWS CLI ver2, Docker, Python 설치
- 이미지를 올릴 ECR 레포지토리
이미지 빌드
- 프로젝트 디렉토리 생성
mkdir test-lambda
cd test-lambda
- 실행 코드 작성 - lambda_function.py
import sys
def handler(event, context):
return 'Hello from AWS Lambda using Python' + sys.version + '!'
- (optional)requirements.txt 작성
boto3==1.28.55
- Dockerfile 작성
# Use a slim version of the base Python image to reduce the final image size
FROM python:3.11-slim
# Define custom function directory
ARG FUNCTION_DIR="/function"
RUN mkdir -p ${FUNCTION_DIR}
COPY . ${FUNCTION_DIR}
# Set working directory to function root directory
WORKDIR ${FUNCTION_DIR}
# Install the runtime interface client
RUN pip install awslambdaric
# Install requirements.txt
RUN pip install -r requirements.txt
# Set runtime interface client as default command for the container runtime
ENTRYPOINT [ "/usr/local/bin/python", "-m", "awslambdaric" ]
# entrypoint 실행시 argument로써 전달
CMD [ "lambda_function.handler" ]
- 이미지 빌드
docker build --platform linux/amd64 -t docker-image:test .
ECR 레포지토리에 이미지 push
- ECR 로그인
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.ap-northeast-2.amazonaws.com
- 이미지 푸시
docker tag docker-image:test 111122223333.dkr.ecr.ap-northeast-2.amazonaws.com/<repository name>:test docker push 111122223333.dkr.ecr.ap-northeast-2.amazonaws.com/<repository name>:test
Lambda 함수 생성
- 람다함수 실행 역할 없으면 생성 필요
https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-awscli.html#with-userapp-walkthrough-custom-events-create-iam-role - ECR 이미지를 사용하는 람다함수 생성
aws lambda create-function \
--function-name test-lambda \
--package-type Image \
--code ImageUri=111122223333.dkr.ecr.us-east-1.amazonaws.com/<repository name>:test \
--role arn:aws:iam::111122223333:role/lambda-excution-role
- 람다실행
aws lambda invoke --function-name test-lambda response.json
# response.json
{
"ExecutedVersion": "$LATEST",
"StatusCode": 200
}
참고: https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/python-image.html#python-image-instructions
'Amazon AWS > Lambda' 카테고리의 다른 글
| Lambda 이용해서 Cloudwatch Error 로그를 Slack으로 알림 보내기 (0) | 2023.09.07 |
|---|---|
| FastAPI, Request Body를 Class 없이 그대로 사용하기 (0) | 2023.01.08 |
| AWS Lambda에서 파이썬 모듈 추가하기 (0) | 2022.12.11 |