[AWS] python 라이브러리 lambda layer 패키징
배경
- 간단한 내용은 lambda 함수를 작성하고 있는데, python에서는 늘 라이브러리가 필요하다. 특히 DB 드라이버같은 경우.
- 라이브러리가 포함된 함수 전체를 zip파일로 올리고는하지만 amazon linux2 환경인 lambda와 충돌나는 경우가 많다. docker를 써도 충돌나는 경우가 있다. 파이썬 진짜 미쳤음.
개요
- 필요 라이브러리를 모아 설치하고 ‘lambda layer’로 생성한다.
- amazon linux2 환경의 EC2 인스턴스 상에서 구축하여 충돌을 미연에 방지한다..
구축 환경
ec2 (amazon linux 2023)
1. EC2 인스턴스에서 OpenSSL 설치
sudo dnf install -y openssl openssl-devel
2. Python 3.10 소스 다운로드
cd /usr/src
sudo curl -O https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tgz
sudo tar xzf Python-3.10.12.tgz
cd Python-3.10.12
3. Python 3.10 빌드
OpenSSL 경로를 정확히 지정하여 Python 빌드. OpenSSL이 제대로 설치된 후에 다음 명령을 실행
sudo ./configure --enable-optimizations --with-openssl={/usr/include/openssl}
openssl 경로반드시 파악하여(which openssl) 경로 작성해야 에러 안남.
4. Python 빌드 및 설치
sudo make altinstall
5. Python 3.10 확인 \& SSL 모듈 확인
python3.10 --version
python3.10 -m ssl
6. 가상환경 생성 및 psycopg2-binary
설치
python3.10 -m venv psycopg2-env
source psycopg2-env/bin/activate
pip install --upgrade pip # pip을 최신 버전으로 업데이트
pip install psycopg2-binary
7. 레이어 디렉토리 구조 생성
AWS Lambda 레이어를 만들기 위한 디렉토리 구조를 설정. 반드시 /python 내부에 있어야함
mkdir -p layer/python/lib/python3.10/site-packages
cp -r psycopg2-env/lib/python3.10/site-packages/* layer/python/lib/python3.10/site-packages
8. 레이어 압축
cd layer
zip -r psycopg2_layer.zip python
9. AWS CLI를 사용하여 레이어 업로드
aws lambda publish-layer-version \
--layer-name psycopg2-binary \
--zip-file fileb://psycopg2_layer.zip \
--compatible-runtimes python3.10 \
--license-info "MIT" \
--region ap-northeast-2
or S3에 파일 업로드
aws s3 cp psycopg2-layer.zip s3://{BUCKET_NAME}/stat/psycopg2-layer.zip