내 런타임은 python 3.9이지만 버전이 달라도, 사용하고싶은 패키지가 달라도 따라하면 안될 이유가 없다!
lambda 자체에 sql을 다루는 패키지들은 설치 되어있을 줄 알았지만 다음과 같은 에러를 마주했다.
패키지를 설치하고 싶은 경우 lambda layer을 이용하면 해결할 수 있다.
AWS docs에 lambda layer에 대한 설명을 보면,
Lambda layer은 Lambda 함수와 함께 사용할 수 있는 라이브러리 및 기타 종속성을 패키징하는 편리한 방법을 제공합니다. 계층을 사용하면 업로드된 배포 아카이브의 크기가 줄어들고 코드를 더 빠르게 배포할 수 있습니다.
layer로 간단히 보면 2가지 기능을 할 수 있는데,
첫번째는 pip로 설치해야하는 라이브러리를 lambda 함수에 추가하는 것과
두번째는 여러 lambda 함수에서 공통으로 사용하는 함수를 패키징하는 기능이다.
layer를 적용하면 lambda 코드를 더 작게 만들 수 있고, 배포 시간이 단축된다.
AWS Lambda는 Amazon Linux에서 실행된다. 따라서 다른 OS에서 zip 파일을 만들면 패키지가 적용되지 않을 수 있다.
docker를 설치하고 cmd에 다음 명령어를 입력해 ubuntu 컨테이너를 실행한다.
docker run -it ubuntu:20.04
cli로 진입하고 다음 명령어를 입력해 ubuntu 패키지를 업데이트한다.
apt update
파이썬 설치전, 파이썬 설치를 위한 설치를 한다
apt install software-properties-common -y
add-apt-repository ppa:deadsnakes/ppa
패키지 파일을 zip으로 압축하기 위한 zip 설치
apt install zip -y
lambda 런타임에 맞는 파이썬 버전을 설치해야한다!
pip도 같이 설치해준다.
apt install python3.9 -y
apt install python3-pip -y
아래 명령어를 입력하고 layer 디렉토리가 만들어졌는지 확인해보자
mkdir -p layer/python/lib/python3.9/site-packages
아래 명령어를 입력해서 pymysql를 설치한다. 저 부분만 바꾸면 다른 패키지를 설치할 수 있다!
python3.9 -m pip install pymysql -t layer/python/lib/python3.9/site-packages/
layer 디렉토리로 이동한 후,
cd layer
zip파일로 만들어 준다. 꼭 layer 디렉토리 안이여야 함!!
zip -r mypackage.zip *
위의 순서대로 명령어를 따라치다보면 mypackage.zip 파일이 만들어졌을것이다.
그 파일을 이제 lambda에 적용해보자!
ctrl+D를 눌러 ubuntu에서 빠져나오고 docker ps로 container id를 알아낸다.
docker ps -a
위에서 알아낸 container id를 아래 13a9부분에 대입한다!
(비밀인데 대충 container id 앞 4~5자리만 입력해도 됨..!)
docker cp 13a9:/layer/mypackage.zip .
계층 - 계층 생성을 누른다
업로드를 눌러 아까 복사한 mypackage.zip을 업로드하고 생성을 눌러준다.
아까 에러가 났었던 lambda 함수로 들어가서 코드 맨 아래에 Add a layer 버튼을 누른다
사용자 지정 계층을 선택하고 위에서 생성한 계층과 버전을 선택한뒤 추가를 누르면 끝!!!
(버전은 처음이면 1이 뜨고, 수정사항이 있을 때마다 1씩 올라간다.)
AWS Lambda docs
docker로 layer .zip파일 만드는 과정
ubuntu에 python3.9 설치하기
layer 생성하기
cryptograph 문제 해결
자세한 글 감사합니다!ㅎㅎ