AWS Lambda Layer를 사용하는 방법 (How to use AWS Lambda Layers)

AWS Lambda 서비스가 나오면서 Serverless 아키텍처로 인해 기존 처럼 개발자가 서버 또는 런타임 관리 및 운영에 대해 걱정할 필요 없이 기능 개발에만 집중할 수 있게 되었습니다.

이렇게 좋은 Lambda 서비스도 단점이 없진 않았습니다. 함수 실행 시간이 기존에는 5분 이었지만 현재는 최대 15분으로 확대 되었습니다. 하지만 여전히 시간의 제약은 있습니다. 또한 apex나 serverless 같은 프레임워크를 이용하여 함수들을 deploy할 때마다 함수에서 필요로 하는 패키지들을 모두 올려야 하는 부담이 있었습니다.

이를 개선하기 위해 새롭게 나온 기능이 Lambda Layer(계층) 입니다.

AWS Lambda Layers

Lambda Layer를 사용하지 않았을 때는 Lambda 함수 각각의 패키지 모듈을 따로 따로 올려야 했습니다. 같은 패키지를 사용하더라도 말이죠. 하지만 Lambda Layer를 사용하면 함수들이 공통으로 사용할 패키지를 Layer로 구성하여 사용하게 된다면 Deploy 성능도 패키지 부분을 제외한 함수 코드만 하게 되어 가벼워지게 됩니다. 또한 자주 사용하는 함수 모듈을 Layer로 만들어 놓으면 다른 개발자가 같은 기능을 중복되게 개발하지 않아도 되어 개발팀의 개발 생산성도 높아지게 됩니다.

Image result for aws lambda layer

각각의 계층(Layer)들은 함수 실행 환경에서 /opt 디렉토리로 추출됩니다. 각 런타임은 언어에 따라 /opt 아래의 각각의 경로 하위 라이브러리를 찾습니다.

Node.js : nodejs/node_modules, nodejs/node8/node_modules(NODE_PATH)

예) xray-sdk.zip
└ nodejs/node_modules/aws-xray-sdk

Python : python, python/lib/python3.7/site-packages(사이트 디렉토리)

예) pillow.zip
│ python/PIL
└ python/Pillow-5.3.0.dist-info

위와 같이 언어에 맞는 구조로 패키지를 구성하여 zip으로 압축하여 업로드 하면 됩니다.

Lambda Layer를 Lambda 함수에 적용하기 위해서는 다음과 같은 단계로 진행하시면 됩니다.

  1. 계층 생성

AWS Lambda 서비스 메뉴 > 계층(Layer) > 위에 설명한 zip으로 압축된 패키지를 업로드하여 계층생성

2. 함수에 계층 적용

생성된 계층을 함수에 추가 해 줍니다.

3. 패키지 임포트 확인

함수에서 추가한 계층이 잘 임포트 되는지 함수를 테스트합니다.

참고로, 함수에 계층을 추가할 때 내가 만든 계층도 있지만 AWS계층도 보이실 겁니다. 데이터 분석을 위한 코드를 작성할 때 필요한 scipy, numpy 패키지 계층을 미리 AWS에서 미리 만들어 놓은 겁니다. 이 패키지가 필요하시면 따로 만드실 필요 없이 이 계층을 이용 하시면 됩니다.


지금까지 AWS Lambda Layer 기능에 대해 간단히 알아봤습니다. 엄청난 기능은 아니지만 서버리스 환경에서 Lambda 함수가 다양하게 생성될 수 있는 환경에서는 Lambda Layer가 패키지 운영에 대한 효율을 높이는데 도움이 많이 될 것 같습니다.

감사합니다.