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

2분 분량
0

AWS Lambda 함수에서 Python 코드를 실행할 때 발생하는 “Unable to import module” 오류를 해결하고 싶습니다.

간략한 설명

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

이 오류를 해결하려면 필요한 모든 라이브러리가 포함된 배포 패키지를 만드십시오. 또는 필요한 라이브러리가 포함된 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 계층을 업로드할 권한이 있는 경우 5단계부터 수행하십시오.

다음 단계를 완료합니다.

  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. 인스턴스 또는 AWS 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
  8. 다음 명령을 실행하여 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 리전으로 바꾸십시오.

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

  10. Lambda 함수를 테스트하려면 패키지를 가져와서 버전을 출력합니다.
    출력 예제:

import json
import numpy

def lambda_handler(event, context):
 print(numpy.__version__)
 return {
 'statusCode': 200,
 'body': json.dumps('Hello from Lambda!')
 }    

관련 정보

Amazon EMR 및 Amazon EMR Serverless 클러스터에 Python 라이브러리를 설치하고 문제를 해결하려면 어떻게 해야 하나요?

AWS 공식
AWS 공식업데이트됨 5달 전
댓글 없음

관련 콘텐츠