AWS Lambda, Docker로 테스트하기 (with Python)
게시일 : 2019년 08월 27일
# AWS
# Lambda
# Layer
# Python
AWS Lambda를 사용하기 전 Docker로 테스트하는 법을 알아본다.
docker-lambda라는 유용한 도커 이미지가 존재한다.
docker-lambda에서 빌드형과 실행형, 두 가지 컨테이너를 활용할 수 있다.
1. 빌드형 컨테이너
lambci/lambda:build-XXXX 형식으로 언어별로 image를 제공한다.
복잡한 코드를 작성하는 경우, 직접 라이브러리를 설치하고 코드 실행을 확인하는 용도로 적합하다.
docker run --name test-lambda -it lambci/lambda:build-python3.6 bash
컨테이너 정보
python에 대한 정보
2. 실행형 컨테이너
lambci/lambda:XXXX 형식으로 언어별로 image를 제공한다.
폴더 구성
실행할 py파일과 Layer로 사용될 폴더를 구성해준다.
Python의 경우, Layer에 포함될 추가 라이브러리들은 /opt/python에 위치해야 한다.
AWS 상에서 Layer를 생성할 때는 zip파일을 사용하지만, docker에서는 설치된 그대로를 활용한다.
# lambda 실행을 위한 폴더 내에서
mkdir -p opt/python
# 필요한 패키지 설치
pip install 패키지 -t opt/python # ubuntu 환경
참고 : 사용중인 OS환경에 따라서 라이브러리가 Lambda에서 실행되지 않을 수 있으므로
빌드형 컨테이너에서 한 폴더에 모두 저장한 후 그 폴더를 활용하는 것이 안전하다.
폴더 확인
lambda_func.py 코드
import json
import requests
def lambda_handler(event, context):
return {'statusCode':200, 'body':json.dumps(event['body'])}
실행 결과
# docker run --rm -v 폴더:/var/task -v 폴더/opt:/opt 이미지 py파일.함수 테스트JSON
docker run --rm -v ~/lambda_layer:/var/task -v ~/lambda_layer/opt:/opt
lambci/lambda:python3.6 lambda_func.lambda_handler '{"body":"Trigger Event"}'
- /var/task는 함수 코드 py 파일이 담긴 폴더와 연결한다.
- 테스트 데이터는 ‘{ JSON }’ 형식으로 args로 전달한다. 양 끝에 ‘ ‘를 반드시 포함
이 python 폴더를 zip파일로 압축해서 Layer로 생성할 수 있다.
~/lambda_layer/opt
➜ zip -r lambda-layer-1.zip python
References
: