AWS Lambda Layers 생성에서 연결까지 깔끔하게 설명

소개



파이썬을 다루는 전제 기사입니다.

Layers(레이어)란?



가이드에 따르면

레이어는 라이브러리, 사용자 지정 런타임 또는 기타 종속성이 포함된 ZIP 아카이브입니다. 레이어를 사용하여 함수 라이브러리를 사용할 수 있습니다.

라이브러리와 같이 공통으로 사용하는 모듈을 Layer로 설정하면 배포 패키지에 라이브러리를 포함할 필요가 없습니다.
즉, Lambda에서 타사 라이브러리 및 모듈을 사용할 때 레이어에 저장하고 각 Lambda 함수에서 호출하여 사용하는 것과 같은 방법을 사용할 수 있습니다.

노트



・람다에서 한번에 이용할 수 있는 레이어는 5개까지
· 압축 해제 후 배포 패키지 크기 제한 250MB

디렉토리 구성



Lambda 실행 환경의 경로는/opt  디렉토리이므로,
Layer의 디렉토리 구성은/opt/python/Layer입니다.

레이어 자체의 패키지 구성은 이런 느낌.
python
├ layer.py (共通処理などコードも入れられます。common的に扱える)
├ Crypto (外部ライブラリその1)
├ psycopg2 (外部ライブラリその2)
├ sqlalchemy (外部ライブラリその3)
…etc

레이어 만들기



로컬로 작성해 봅니다.

라이브러리를 위치 지정으로 pip install한다.
$ pip install pycryptodome -t .

그리고 zip
$ zip -r  ../python .

AWS에서 Layer를 생성합니다.



위에서 순서대로
・이름(필수)
・설명(없어도 가능)
· 업로드 (방금 만든 zip 선택)
・호환성이 있는 런타임 - 옵션(잊어버리는 경향이 있으므로 주의)
· 라이센스 - - 옵션 (없음 가능)

만들기를 클릭하여 레이어를 만듭니다.

Lambda 함수에 연결



이제 Lambda 함수에 레이어를 연결합니다.

레이어를 연결하려는 Lambda 함수에서 "디자이너"를 선택하고,
"레이어 추가"를 선택.



[레이어 선택]에서 [사용자 정의 레이어]를 클릭하여 만든 레이어를 선택합니다.
그런 다음 "버전"을 설정하고 "추가"를 클릭하면 완료됩니다.

Lambda에서 호출할 때 import하고 호출합니다.
import layer

흔한 실수



· Lambda는 Amazon Linux에서 실행되므로,
pip install한 환경에 따라서는 실행 에러가 되는 라이브러리도 있습니다.

· AWS에 업로드한 Layer는 버전별로 다운로드할 수도 있습니다.
그리고 Layer가 늘어나면 디렉토리에서, 이런 느낌으로 관리하는 일도 있을까 생각합니다.
test_layer
├ python
    ├ layer.py 
    ├ Crypto 

이 경우 그대로 압축을 풀고 수정하여 zip하기 쉽지만,
그대로 zip하면 부모 디렉토리도 압축해 버려 업로드 후의 전개시에 디렉토리 계층과 매치하지 않게 되므로
작성했을 때와 같이 내용을 zip합시다.
$ zip -r  ../python .

요약



Layer는 잘 사용하면 Lambda 간의 코드 공유 등 매우 편리합니다.
잘 활용해 갑시다.

참고

좋은 웹페이지 즐겨찾기