본문 바로가기
AWS/Lambda

[AWS/Lambda] Lambda에 외부 라이브러리 import 하기 (Lambda layer)

by 삼콩 2022. 3. 3.

Lambda 개발을 하다보면, 파이썬에서 기본으로 제공하고있지 않은 외부 라이브러리나 패키지가 필요할 수 있다.

예를들어, 외부 라이브러리 중 하나인 paramiko를 사용하고자 할 때 람다 함수에 import paramiko 시도 후 테스트를 돌리면 다음과 같은 오류를 만나게된다.

Unable to import module 'lambda_function': No moudle named ' ' 

Response
{
  "errorMessage": "Unable to import module 'lambda_function': No module named 'paramiko'",
  "errorType": "Runtime.ImportModuleError",
  "stackTrace": []
}

 

AWS에서는 이러한 외부 라이브러리 및 기타 종속성을 Lambda에서 사용할 수 있도록 zip 형태로 패키징하는 Layer 기능을 제공한다.

 

AWS에서는 각 런타임에 따라 다음과 같은 구조를 권고하니 반드시 지켜서 업로드해야한다.

출처: https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/configuration-layers.html

 

Lambda 레이어 생성 과정은 다음과같다.

이 때 해당 작업은 Lambda가 구동될 환경과 동일한 환경이 좋다. (OS, Python version 등)

Lambda는 동작될 때 마다 AWS 리소스를 임시로 사용하므로 Amazon Linux 기반이다.

 

람다는 각 Python 런타임에 대하여 아래와 같이 다른 OS 기반으로 동작한다.

Python 3.8은 Amazon Linux 2 Amazon Machine Image(AMI)를 기반으로 합니다. 그러나 Python 3.7과 Python 3.6은 Amazon Linux AMI를 기반으로 한다. 
(https://aws.amazon.com/ko/premiumsupport/knowledge-center/lambda-import-module-error-python/)

 

따라서 Lambda에서 Python 3.8을 사용하고자하면, AWS Cloud9을 사용하거나 Amazon Linux 2에서 다음 작업을 수행해야 한다. 본 포스팅에서는 Amazon linux 2인 인스턴스가 존재하였으므로 해당 인스턴스에서 작업을 수행하였다.

 

python 이라는 이름의 디렉토리 생성 후 해당 디렉토리에 패키지 설치

# python 디렉토리 생성
mkdir python

# python 패키지 설치 (amazon linux 에서는 기본 pip 명령어가 python 2.X 이므로 pip3를 입력해야 함)
$ pip3 install -t ./python paramiko

 

python 디렉토리에서 해당 내용을 layer.zip으로 압축한다.

$ zip -r layer.zip python

 

압축파일의 결과를 보자면 다음과 같이 Python의 경우 압축파일 하위에 반드시 Python 디렉토리가 존재해야한다.

(이 파일은 linux에서 생성 후 편의를 위해 windows에 다운받은 결과입니다.)

 

layer.zip 파일을 Lambda 계층에 등록

  • Lambda > 계층 > 계층 생성

이 때 호환 런타임은 이 계층이 어떤 런타임과 호환되는지 선택하는 것이다.

만약, Python 3.8, Python 3.9를 선택하였을 경우, Lambda 런타임이 Python 3.7인 함수에서는 해당 레이어가 조회되지 않는다.

 

Lambda에 Layer 등록

  • 해당 Lambda 함수에서 계층 > Add a Layer 클릭

  • 사용자 지정 계층 선택 > 생성한 Layer 선택 > 추가

  • 계층 추가 확인

계층을 생성할 때 반드시 런타임 별 구조에 맞춰 zip 파일을 생성해야하며, 해당 zip을 생성하는 환경 또한 Lambda 구동 환경과 동일할 수록 좋음을 반드시 기억하자.

 

 

[참고]

https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/python-package.html

https://aws.amazon.com/ko/premiumsupport/knowledge-center/lambda-import-module-error-python/

댓글