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' 오류를 해결하려면 어떻게 해야 하나요?