Python Version Update & Lambda Layer 적용

GREEN FIELD·2023년 1월 9일
0

AWS Lambda version 업데이트 후기

팀에서 쓰는 AWS Lambda의 Python version이 3.6 or 3.7이었는데 이를 3.8 이상 버전으로 업데이트해야 했다. 간단할 거라 생각했지만 좀 애먹어서 이를 공유하려 한다.

문제 1. Lambda Layer 참조

특정 account에서 Lambda Layer를 관리하고 있고 다른 계정에서 이 Layer를 참조해야 했다.
Lambda Permission에 Layer를 참조하도록 추가해주었는데도 눈 뜬 장님 마냥 참조를 못해서 짜증날 쯤
Layer를 소유한 계정에서 일일이 허락을 해줘야한다는 걸 알게 되었다(cli, api로만 지원). 아래의 명령으로 permission을 추가해야 함.

aws lambda add-layer-version-permission    --layer-name MessageVendorLayer    --version-number 1    --statement-id sharingWithOneAccount    --principal 123456789012    --action lambda:GetLayerVersion

https://www.oreilly.com/library/view/learn-aws-serverless/9781789958355/20854bed-c5c3-448e-a097-bf0bb5e6cdd2.xhtml#:~:text=To%20share%20a%20layer%20between,do%20it%20with%20Lambda%20functions.

문제 2. numpy와 python 버전 호환

Lambda에서 Python version만 3.9로 올리니, 기존 Layer를 참조하는데 계속 아래 같은 에러가 나왔다.

IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!

Importing the numpy c-extensions failed. This error can happen for
different reasons, often due to issues with your setup.

찾아보니 numpy와 python의 버전 호환이 되지 않아 발생하는 에러이더라.

pip install numpy --upgrade

이렇게 모듈만 업그레이드해줄 수도 있지만 파이썬 버전 자체가 낮다면 이마저도 안될 것이다.

python 가상환경에 익숙하지 않아서 매번 할 때마다 고생한다. 내가 설치한 python 버전을 믿을 수 없이 정말 그 버전인지 믿을 수 없는 지경에 이르렀다.

결론부터 말하자면 내가 python 3.9라고 생각했던 venv가 3.9 버전이 아니었고, 구 버전 파이썬에서 pip install numpy를 한 numpy는 해당 버전에 호환되는 최신 버전을 받았던 것이다. 하지만 그 버전은 파이썬 3.9와 호환이 되지 않았던 것.

버전 호환이 의심된다면

pip list

를 해서 내가 받은 모듈의 버전과 환경이 호환되는지 먼저 확인하자.

원하는 버전의 파이썬 가상환경을 activate 시킨 다음. 모듈을 다운로드 하고.
그 가상 환경의 모듈이 설치되는 디렉토리를 찾아보자! (나의 경우는 /opt/Python-3.9.6/env/lib/python3.9/site-packages)
그리고 그 디렉토리를 zip 하여 lambda layer에 올려주면 된다.

Cloud9에서 Lambda Layer 빌드하기

Cloud9은 클라우드 기반의 IDE로 이번에 써봤는데 간단한 작업하기에 편한 것 같다.

Cloud9으로 작업 환경을 띄우고 아래 링크를 참고해서 원하는 버전의 파이썬을 받고 가상 환경을 실행한다.

https://tecadmin.net/install-python-3-9-on-amazon-linux/

그리고 위에 적은 것처럼 모듈을 설치한 디렉토리를 잘 찾아가서 해당 디렉토리를 python 폴더에 넣어서 zip 해서 올려주면 된다. (폴더명으로 위치를 찾는 것 같다.)

https://towardsaws.com/how-to-deploy-python-packages-for-aws-lambda-with-layers-acb70e75a3df

aws lambda publish-layer-version --layer-name <layer 이름> --zip-file fileb://<zip 파일명.zip> --compatible-runtimes python3.9

0개의 댓글