aws 람다에서 사용할 계층을 만들며 고생한 것을 정리한 것입니다.
윈도우 환경에서 개발중인데, 일부 패키지들은 OS에 따라 구성이 다르기때문에 Lambda에서 사용할 수 없습니다.
이 문제를 해결하기 위한 Docker 사용 등 다른 방법도 있지만 AWS Lambda와 환경이 같은 Cloud9을 이용해서 layer에 사용할 패키지를 설치하는게 가장 깔끔하겠다고 생각해서 이 방법으로 진행했습니다.
Cloud9 세팅
AWS Cloud9 환경 생성
기본 세팅으로 생성해줍니다.
Cloud9 IDE 실행
터미널 창 열기
필요한 파이썬 버전 설치
파일 내려받기
wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz
저는 파이썬3.12.0 버전을 사용했고, 필요한 버전으로 변경해서 사용하면 됩니다.
필요한 버전 파일 확인은 여기서.
https://www.python.org/ftp/python/
파일 추출
tar xvf Python-3.12.0.tgz
설치
cd Python-*/
./configure --enable-optimizations
sudo make altinstall
1 파이썬 디렉토리로 이동
2 최적화
3 기존 설치 버전을 덮어쓰지 않고 설치
시간이 좀 걸립니다.
설치 확인
python3.12 -V
정상적으로 설치되었다면 버전을 확인할 수 있습니다.
패키지 설치
가상 환경 생성
cd ..
mkdir packaging
cd packaging
python3.12 -m venv layer_package
1 디렉토리 이동
2 packaging 디렉토리 생성
3 디렉토리 이동
4 가상 환경 생성
가상 환경 활성화
source layer_package/bin/activate
패키지 설치
pip install firebase-admin
필요한 패키지를 설치합니다.
저는 lambda에서 fcm을 보내기 위해 firebase-admin을 설치했습니다.
firebase-admin의 경우 호환성 관련 에러로 인해 특정 패키지를 다운그레이드 해줬습니다.
pip install cryptography==3.4.8
가상 환경 비활성화
deactivate
패키지 압축
mkdir python
cp -r layer_package/lib/python3.12/site-packages/* python/
zip -r lambda_layer.zip python
1 디렉토리 생성
2 패키지 아카이브
3 압축
다운로드
명령줄로 layer를 만들어 줄 수있지만, 그냥 다운로드 받아서 콘솔에서 업로드 해주었습니다.
끝.
도움되셨다면 하트 눌러주세요!

참고한 글 목록
https://awstip.com/create-aws-lambda-layers-using-cloud-9-694895903ca5 - 전체적인 방법
https://github.com/pyca/cryptography/issues/9060 - 호환성 에러 관련