AWS lambda에서 외부 패키지 사용하기

realBro·2023년 7월 13일
0

Layer publish 방법

AWS Lambda에서 외부 패키지를 사용하려면 여러가지 방법이 있다.
1. 코드와 함께 업로드
2. layer에 등록 후 사용
3. docker 사용
등등....

아래 내용은 layer에 등록해서 사용하는 방법에 대한 내용이다.

우선 가상환경을 만들어주고(뭐든 상관없음), 가상환경을 활성화 한다.

python -m venv venv
source venv/bin/activate
mkdir -p layer/python/lib/python3.8/site-packages
pip install -r requirements.txt --target layer/python/lib/python3.8/site-packages

설치할 폴더를 만들어 주고 requirements.txt 에 필요한 버전들을 기입후 패키지 설치. 아래의 python version은 본인의 lambda runtime의 맞게 변경해야함.

mkdir -p layer/python/lib/python3.8/site-packages
pip install -r requirements.txt --target layer/python/lib/python3.8/site-packages

이후 압축을 진행

cd layer/
zip -r layer.zip .

해당 압축파일의 크기가 70메가 이하면 바로 등록이 가능하다.

aws lambda publish-layer-version \
    --layer-name temp-layer-name \
    --description "description of layer" \
    --zip-file fileb://layer.zip \
    --compatible-runtimes python3.8

그 이상일 경우에는 s3에 먼저 올린 다음 s3 키로 layer를 등록해야한다.

aws s3 cp ./layer.zip s3://my-bucket/prefix/
aws lambda publish-layer-version \
    --layer-name temp-layer-name \
    --description "description of layer" \
    --content S3Bucket=my-bucket,S3Key=prefix/layer.zip \
    --compatible-runtimes python3.8

특히나 opencv의 평소처럼 opencv-python 으로 install 하면 다음과 같은 에러를 만나는데, 그럴땐 opencv-python-headless로 설치를 해주어야 한다.

[ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_function': libGL.so.1: cannot open shared object file: No such file or directory

추가적으로 어떤 에러가 나오는지는 기억 안나지만 psycopg2의 경우에도 psycopg2-binary로 설치를 해주어야 제대로 동작한다.

requirements.txt example

opencv-python-headless==4.x.x.xx
psycopg2-binary==2.x.x

Lambda에 Layer 추가

등록후 해당 이미지상 위치에 있는 Layers 클릭


해당 이미지에서 사용자 지정 계층, 올린 layer 선택 & 버전 선택 후 추가하면 끝!

0개의 댓글