Python에서 Lambda 코드를 실행할 때 나타나는 "Unable to import module" 오류를 해결하려면 어떻게 해야 하나요?

2분 분량
0

Python에서 AWS Lambda 코드를 실행하려고 하면 "Unable to import module"이라는 오류 메시지가 나타납니다.

간략한 설명

AWS Lambda 환경이 Lambda 배포 패키지에서 지정된 라이브러리를 찾을 수 없는 경우 "Unable to import module" 오류가 발생합니다.

이 오류를 해결하려면 필요한 모든 라이브러리가 포함된 배포 패키지를 만드세요. 또는 필요한 라이브러리가 포함된 Lambda 계층을 생성하여 Lambda 함수에 연결하세요. Lambda 계층 메서드를 사용하면 여러 Lambda 함수에서 이 계층을 재사용할 수 있습니다.

해결 방법

Lambda 계층을 생성하여 여러 Lambda 함수에 연결

**참고:**Lambda 계층을 생성할 때 라이브러리를 /python 또는 python/lib/python3.x/site-packages 폴더에 배치하세요. 사용자 Lambda 런타임의 기반이 되는 같은 운영 체제(OS)에 Lambda 계층을 생성하는 것이 가장 좋습니다. 예를 들어, Python 3.12는 Amazon Linux 2023 Amazon Machine Image(AMI)를 기반으로 합니다. 따라서 Amazon Linux 2023 OS에 계층을 생성하세요.

Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 PublishLayerVersion API 직접 호출을 통해 Lambda 계층을 업로드할 권한이 없는 경우, 1~3단계를 수행하세요. 인스턴스에 이미 해당 권한이 있는 경우 4단계를 진행하세요.

  1. Amazon EC2 콘솔을 사용하여 Amazon Linux 2023 AMI로 인스턴스를 생성하세요. 또는 AWS Cloud9 콘솔을 사용할 수도 있습니다.

  2. PublishLayerVersion API 작업을 직접적으로 호출할 권한을 부여하는 AWS Identity and Access Management(IAM) 정책을 생성하세요.
    IAM 정책 명령문 예시:

    {
     "Version": "2012-10-17",
     "Statement": [
     {
     "Sid": "VisualEditor0",
     "Effect": "Allow",
     "Action": "lambda:PublishLayerVersion",
     "Resource": "*"
     }
     ]
    }
  3. IAM 역할을 생성한 다음 IAM 정책을 해당 역할에 연결합니다.

  4. 해당 인스턴스에 IAM 역할을 연결합니다.

  5. 인스턴스 또는 Cloud9 환경에 연결합니다.

  6. 다음 명령을 실행하여 새 폴더를 생성하고 pip를 사용하여 "numpy"라는 이름의 라이브러리를 설치하세요.

    mkdir -p lambda-layer/python
    cd lambda-layer/python
    pip3 install --platform manylinux2014_x86_64 --target . --python-version 3.12 --only-binary=:all: numpy

    참고: 함수 유형에 맞는 platform 파라미터를 업데이트하세요. x86_64 Lambda 함수의 경우 값을 manylinux2014_x86_64로 설정하세요. arm64 함수의 경우 값을 manylinux2014_aarch64로 설정하세요. python-version 파라미터를 Lambda 함수에서 사용하는 것과 동일한 버전으로 업데이트하세요.

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

    cd ..
    zip -r layer.zip python

    다음 명령을 실행하여 Lambda 계층을 게시하세요.

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

    참고: us-east-1을 Lambda 함수의 AWS 리전으로 바꾸세요.

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

  9. Lambda 함수를 테스트하려면 패키지를 가져와서 버전을 출력하세요.
    성공적인 출력의 예시: 

    import json
    import numpy
    
    
    def lambda_handler(event, context):
     print(numpy.__version__)
     return {
     'statusCode': 200,
     'body': json.dumps('Hello from Lambda!')
     }	
AWS 공식
AWS 공식업데이트됨 6달 전
댓글 없음