AWS lambda
를 이용해서 API를 만들고 있는데,
기존에 프로젝트를 만들때는 터미널창에서 바로 패키지를 설치하여 사용할 수 있지만
lambda의 경우 패키지 설치를 할 터미널창이 없기 때문에 Layer
를 추가해줘야한다.
기본적으로 제공되는 패키지가 있긴 하지만, 제공되지 않는 패키지의 경우 Layer 추가 없이 사용하면
Cannot find module ~
라는 에러가 발생할거다!
AWS Lambda Layer
는 Lambda 함수에서 공통으로 사용되는 코드, 라이브러리, 의존성 등을 관리하는 데 사용되는 기능입니다. 여러 Lambda 함수에서 동일한 코드나 라이브러리를 반복해서 포함시키는 대신에 Layer를 사용하여 중복을 최소화하고 코드를 재사용할 수 있습니다. 이를 통해 코드를 더 깔끔하게 유지하고 효율적으로 관리할 수 있습니다.
설명을 검색해보니까 이렇게 나오는데, 쉽게 말해서 패키지를 설치하는 대신 패키지를 따로 다운받아서 Layer에 등록 해 주는 방식으로 사용 하는 것 같당
일단 나는 평소에 Node.js 를 이용해서 소스코드를 작성하다가
이번 기회에 Python을 이용해서 API를 작성하게 되었다.
따라서, 기존에 사용하던 npm
방식으로 패키지를 다운받는게 아니라 python 패키지 설치 방법인 pip
를 이용해서 패키지를 다운받아야 했다!!!
일단 본인 PC에 pip가 설치되었는지 확인하고 싶다면 cmd창을 열고 pip3
명령을 입력하면 된다.
이렇게 나오면 설치되어있는거임!
만약 이렇게 안나오면 python을 다운받아주면 된다.
참고로, python 3.4 이후 버전부터는 pip가 파이썬과 같이 자동으로 설치 된다고 하니
이미 python이 있는데 pip 정보가 나오지 않는 경우 기존에 설치했던 python을 삭제하고
새로운 버전으로 다운 받아주면 된당.
이제 python 설치 경로에 접속해서 다운받아주면 되는데,
해당 버튼을 눌러주면 된다.
이미지 출처 : 파이썬 코딩 도구 설치하기(Windows)
setup파일이 나오면 클릭 하고,
하단에 있는 체크박스를 모두 체크 후 Install Now 버튼을 눌러주면 된다.
이제 설치하고 cmd창을 연 뒤에 pip3
명령어를 입력하면 설치 완료 된 모습을 확인 할 수 있다!
이제 cmd창을 이용해서 패키지를 설치 해 주면 되는데,
나는 lambda를 이용해서 mySQL을 연동 해 줄것이기 때문에 pymysql
패키지를 설치 하려고 한다.
참고로 pip
를 이용해 패키지를 설치 할 경우 python이라는 디렉터리를 생성 한 뒤에 그 안에 패키지를 설치 해 줘야 한다!
바탕화면에서 python 디렉터리 생성 후 그 디렉터리 내로 이동 (cd python)해서 설치 해줘도 되고,
그냥 바탕화면에 있는 상태에서 설치와 동시에 디렉터리를 생성해줘도 된다.
나는 후자의 방법으로 설치해줬다.
일단 본인이 설치하고자 하는 경로로 이동 후 (나는 바탕화면에서 그대로)
pip install pymysql -t python
해당 명령을 cmd 창에 입력 해 주면 된다.
성공적으로 설치됨과 동시에
바탕화면에 python 디렉터리도 생성된것을 볼 수 있다.
내부로 접속해보면 다음과같이 총 2개의 디렉터리가 생성된것을 확인 할 수 있다!
패키지 설치까지는 완료 되었으나, lambda layer
에 등록하기 위해서는 zip 형식의 파일로 묶어줘야 하기 때문에
zip -r pymysql.zip ./python
아까 열어둔 cmd창에 해당 명령을 입력해주면,
python 폴더 내에 있는 파일들을 pymysql.zip
이라는 이름으로 묶어준다.
(참고로 zip 파일은 python 폴더가 아닌 바탕화면에 생성됨)
이렇게 하면 패키지 설치는 끝났으니 계층에 등록하고, lambda 함수에 연결 해 주기만 하면 된다.
이제 본격적으로 등록하기!
참고로, Lambda 함수는 이미 만들어 둔 상태인걸 가정하고 연결!
함수가 없으면 생성 버튼 눌러서 만들어주면 된당
AWS Lambda에 접속 후 계층
을 클릭 해 준다.
다음으로 계층 생성
버튼 클릭
계층 이름을 지정 해 주고 아까 생성된 pymysql.zip
파일을 업로드 해 준다.
호환 아키텍처는 x86_64
로 지정 후 런타임은 python으로 설정해주면 된다.
이제 생성버튼 클릭!
여기까지하면 layer 생성은 완료 된거고 연결만 해주면 된다.
그리고 본인이 만든 함수 접속 후 Layers
를 클릭 해 준다.
Add a layer
클릭
사용자 지정 계층 선택 후 아까 생성한 Layer인 pymysqlLayer
를 클릭 해 준다.
버전까지 설정 후 추가 해 준다.
그럼 계층이 추가된걸 확인 할 수 있음
import pymysql
import json
이제 이런식으로 import해서 사용하면 된다.
위에서 말했듯이, 기본적으로 제공되는 모듈이 있고 아닌 모듈이 있다.
일단 적용 해 보고 Cannot fine module
에러가 나면 패키지를 설치해서 레이어를 추가 해 주면 될 것 같당
참고로 json이나 os는 기본 제공 되는듯