Python에서 Lambda 코드를 실행할 때 발생하는 ‘모듈을 가져올 수 없음’ 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 7월 26일

Python에서 AWS Lambda 코드를 실행하려고 할 때 ‘모듈을 가져올 수 없음’ 오류를 수신합니다.

간략한 설명

일반적으로 Lambda 환경에서 Python 코드에 지정된 라이브러리를 찾을 수 없는 경우 이 오류가 발생합니다. 이는 Lambda가 모든 Python 라이브러리와 함께 사전 패키징되지 않았기 때문입니다.

이 오류를 해결하려면 Lambda용 Python 코드에서 사용할 라이브러리가 포함된 배포 패키지 또는 Lambda 계층을 생성합니다.

참고: 다음 단계에서는 배포 패키지가 아닌 Lambda 계층을 생성하는 방법을 보여 줍니다. 이는 여러 Lambda 함수에서 Lambda 계층을 재사용할 수 있기 때문입니다. 각 Lambda 런타임은 PATH 변수에 특정 /opt 디렉터리 폴더를 추가합니다. 계층이 동일한 폴더 구조를 사용하는 경우 Lambda 함수의 코드는 경로를 지정하지 않고 계층 콘텐츠에 액세스할 수 있습니다.

중요: Python용으로 가져오는 라이브러리를 /python 폴더에 넣습니다.

해결 방법

Lambda 런타임이 기반으로 하는 운영 체제에서 Lambda 계층을 생성하는 것이 가장 좋습니다. 예를 들어, Python 3.8은 Amazon Linux 2 Amazon Machine Image(AMI)를 기반으로 합니다. 그러나 Python 3.7과 Python 3.6은 Amazon Linux AMI를 기반으로 합니다.

Python 3.8 라이브러리에 대한 Lambda 계층을 생성하려면 다음을 수행하세요.

1.    Amazon Linux 2 AMI에서 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 생성합니다.

2.    publish-layer-version API를 호출할 권한이 있는 AWS Identity and Access Management(IAM) 역할을 생성합니다. 그런 다음 EC2 인스턴스에 IAM 역할을 연결합니다.

참고: 이제 EC2 인스턴스에 publish-layer-version API 호출을 위해 Lambda 계층을 업로드할 수 있는 권한이 있습니다.

3.    EC2 인스턴스에 연결한 다음 Python 3.8 및 pip3을 설치합니다.

$ sudo amazon-linux-extras install python3.8
$ curl -O https://bootstrap.pypa.io/get-pip.py
$ python3.8 get-pip.py --user

4.    python 폴더를 생성합니다.

$ mkdir python

5.    aws-xray-sdk 라이브러리 파일을 python 폴더에 설치합니다.

$ pip3 install -t python/ aws-xray-sdk

참고: aws-xray-sdk 예제 라이브러리를 가져오려는 Python 라이브러리의 이름으로 교체합니다.

6.    python 폴더의 내용을 layer.zip 파일에 압축합니다.

$ zip -r layer.zip python

7.    Lambda 계층을 게시합니다.

$ aws lambda publish-layer-version --layer-name xray --zip-file fileb://layer.zip --compatible-runtimes python3.8 --region us-west-2