[Lambda] python PIL library import 하는 법 (캐삽질기)
람다에서 기본 라이브러리를 제공하지 않는다.
코드라인에서 import PIL 이후 테스트를 해보면 해당 라이브러리를 찾을 수 없다는 에러가 난다.
(can not find module 'PIL' 어쩌구 저쩌구...)
로컬 개발환경에서는 그냥 커맨드 창에서 "pip install pillow(라이브러리명)" 하면 되는데,
람다에서는 도대체가 실체가 뭔지, 커맨드를 날릴 수도 없었다.
그래서 구글링...
람다에서 python 라이브러리를 import 하려면 크게 2가지 방법으로 나뉜다.
1.해당 라이브러리를 통째로 묶어서 업로드 한다.
2. 해당 라이브러리를 묶어서 layer로 만든 후 람다에서 layer를 추가한다.
위 두가지 사항에 대해서 상세히 기술해 보겠다. 특히 1번은 의외로 간단하나, 2번은 정말...ㅜㅜ 수많은 삽질을 하였다.
1번으로 구성시 우선적으로 알아두어야 할 것은, 라이브러리의 크기가 zip 파일 기준으로 4MB 이상이 된다면, aws에서 콘솔에서 편집기 기능이 disable된다. (하....이 의미는 콘솔에서 코드 수정 및 디버깅이 불가하다는 말이다...) 4MB 이하라면, 쉽게 업로드 후 사용할 수 있다.
[순서대로 해보세요]
1) library가 설치된 폴더를 찾는다.
2) 라이브러리를 폴더 통째로 zip으로 압축한다.
3) 해당 람다 함수를 열어 편집기 우측 상단에 "설정" 아이콘을 클릭 후 zip파일을 업로드 한다.
4) 코드에서 import 하여 테스트 해본다.
2번으로 구성시 에는 중요한 것이 있다.
가장 중요한 것은 람다는 리눅스 기반이기 때문에, windows에서 설치관 파일을 업로드 하면 layer가 동작하지 않을 수 있다. 가장 좋은 것은 aws의 cloud 9에서 람다와 동일한 환경과 세팅하여, 그 환경에서 pip install 을 하고 라이브러리를 zip으로 묶어 업로드 하는 방법을 추천한다.
(cloud9 관련해서는 별도 포스팅을 참고하세요)
[순서대로 해보세요]
1) python 폴더를 생성한다. (이거 정말 중요하다. 람다 layer에서 python 폴더를 바라본다. 엉뚱한 폴더로 하면 절대 알아먹질 못한다.)
2) 이 폴더 아래 라이브러리를 설치한다. 옆 명령어 대로 해보시길 바란다. (ex --> pip install -t ./python pillow )
3) python 폴더를 zip으로 압축한다. (ex --> zip -r layer.zip python)
4) 람다 -> 계층 -> 계층생성 후 layer.zip 이라는 파일을 다운받아 layer 생성 할 때 업로드 한다.
5) 4)번에서 생성된 layer를 함수에서 추가한다. (add a layer)
정상 테스트 결과는 아래와 같다. (no module named 'PIL' 사라짐)
람다 layer 캐삽질기, 끝~~~