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

최종 업데이트 날짜: 2022년 4월 12일

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

간략한 설명

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

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

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

해결 방법

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

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.    AWS Cloud9 콘솔에서 Amazon Linux 2 AMI를 사용하여 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 생성합니다. 자세한 내용은 AWS Cloud9 사용 설명서의 EC2 환경 생성을 확인하세요.

2.    PublishLayerVersion API 작업을 호출할 수 있는 권한을 부여하는 AWS Identity and Access Management(IAM) 정책을 생성합니다.

PublishLayerVersion API 작업을 호출할 수 있는 권한을 부여하는 IAM 정책 설명의 예

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "lambda:PublishLayerVersion",
            "Resource": "*"
        }
    ]
}

3.    IAM 역할을 생성하고 IAM 정책을 역할에 연결합니다. 그런 다음 Amazon EC2 인스턴스에 IAM 역할을 연결합니다.

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

4.    AWS Cloud9 Amazon 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

5.    다음 명령을 실행하여 python 폴더를 생성합니다.

$ mkdir python

6.    다음 명령을 실행하여 Pandas 라이브러리 파일을 python 폴더에 설치합니다.

중요: Pandas를 가져오려는 Python 라이브러리의 이름으로 바꿉니다.

$ python3.8 -m pip install pandas -t python/

7.    다음 명령을 실행하여 python 폴더의 내용을 layer.zip 파일에 압축합니다.

$ zip -r layer.zip python

8.    다음 명령을 실행하여 Lambda 계층을 게시합니다.

중요: us-east-1을 Lambda 함수가 있는 AWS 리전으로 바꿉니다.

$ aws lambda publish-layer-version --layer-name pandas-layer --zip-file fileb://layer.zip --compatible-runtimes python3.8 --region us-east-1

9.    Lambda 함수에 계층을 추가합니다.