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

3분 분량
0

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~3단계는 선택 사항입니다.

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 함수에 계층을 추가합니다.


관련 정보

Lambda 배포 패키지를 업로드할 때 'permission denied' 또는 'unable to import module' 오류를 해결하려면 어떻게 해야 하나요?

AWS 공식
AWS 공식업데이트됨 한 달 전