본문 바로가기
Cloud/Aws

AWS Lambda Python Layer 만들기

by HemMu 2024. 6. 20.

Lambda에서 import를 했으나, [ERROR] Runtime.ImportModuleError: 'lambda_function' 모듈을 가져올 수 없습니다. 'requests'라는 모듈이 없습니다. 오류가 뜨는 경우가 있다.

 

AWS Lambda의 기본 실행 환경에 'requests' 모듈이 포함되어 있지 않은데, AWS Lambda는 기본적으로 경량화된 실행 환경을 제공하기 때문에, 추가적인 패키지가 필요하다면 이를 직접 포함시켜야 한다.


사용자 지정 AWS Lambda layer을 생성하면 Lambda 함수에 원하는 기능을 추가할 수 있겠다.

아래에서는 사용자 지정 layer를 사용하여 AWS Lambda 에 import 하는 방법을 소개한다.

모듈 저장하기

압축하여 AWS에 업로드할 수 있도록 모듈을 디렉터리에 저장하는데,
전에 Lambda에서 사용하는 Python 버전이 맞는지 확인하자.

python --version
python -V 

AWS Lambda 함수에 사용되는 Python 런타임 버전은 종속성이 설치된 Python 버전과 일치해야 하므로 Python 버전을 확인하는 것이 중요하다.

혹여나 런타임 버전이 일치하지 않으면 Lambda 함수가 올바르게 실행되지 않아 모듈 누락과 같은 오류가 발생할 수 있겠다.

다음 Python 모듈을 위한 새 디렉터리를 만듭니다.

mkdir python-module

새 디렉터리가 생성되면 아래와 같이 -t 옵션을 사용하여 디렉터리를 지정하고 해당 폴더에 모듈을 저장하자.

 

pip install -t python-module requests

AWS 레이어는 zip 파일을 사용하므로 zip 파일로 압축하자.

 

zip -r9 python-module.zip python-module

위 명령어는 python_requests_layer.zip이라는 zip 파일을 생성하며, -r 은 python 디렉터리의 모든 파일을 반복적으로 포함하고, -9는 최대 압축 수준을 적용한다는 명령어다.

 

Lambda Layer 생성하기

레이어 페이지에서 오른쪽 상단의 "레이어 만들기" 버튼을 클릭

새로 생성된 zip 파일을 선택한 후 업로드하고 아키텍처와 런타임을 선택하자.

아키텍처에 대한 설명은 아래와 같다.

  • arm64 – AWS Graviton2 프로세서용 64비트 ARM 아키텍처
  • x86_64 – x86 기반 프로세서용 64비트 x86 아키텍처이며, x86_64가 기본 아키텍처다.

arm64 아키텍처를 사용하는 기능은 x86 기반 CPU에서 실행되는 동급 기능에 비해 GB/s당 비용이 더 낮다고 한다.

기존 기능이 x86 기반 CPU 명령어 세트에 종속되어 있는 경우 ARM 명령어 세트에 대해 다시 컴파일된 종속성을 사용하여 arm64 아키텍처용 새 배포 패키지를 생성해야 한다.

Lambda Layer 사용하기


중앙의 "Layer"를 클릭하여 Lambda 레이어를 선택하거나, "Code" 탭 하단으로 스크롤하여 Lambda Layer를 찾자.

생성한 레이어를 추가하려면 "Add a Layer"를 클릭

생성한 레이어를 추가하려면 " Custom layers "를 클릭

그런데 Lambda Layer를 생성 및 추가 어렵다거나 시간도 없어서 하기싫다면 Klayers의 GitHub 리포지토리(https://github.com/keithrozario/Klayers) 제공되는 사전 구축된 레이어를 사용할 수 있다.

(이 리포지토리를 제공해주신 Klayers와 기타 기여자들에게 감사드립니다....)

이 리포지토리의 Layer을 사용하는 경우 "specify an ARN" 섹션에서 "choose a layer"으로 변경하고 ARN을 등록하기만 하면 된다.

 

진작에 좀 알려주지