컴파일된 바이너리가 포함된 Python 패키지를 배포 패키지에 추가하고 패키지를 Lambda와 호환되게 하려면 어떻게 해야 하나요?

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

pip를 사용하여 컴파일된 코드가 포함된 Python 패키지를 설치했고, 이제 AWS Lambda 함수가 "Unable to import module" 오류를 반환합니다. 왜 이런 현상이 발생하며, 이 문제를 해결하려면 어떻게 해야 하나요?

간략한 설명

컴파일된 코드(예: NumPy 및 pandas)가 포함된 Python 패키지가 기본적으로 Lambda 런타임과 항상 호환되는 것은 아닙니다. 그러나 pip를 사용하여 이러한 패키지를 설치하는 경우 패키지는 로컬 시스템의 아키텍처에 대한 module-name 패키지를 다운로드하고 컴파일합니다. 이렇게 되면 Linux 운영 체제를 사용하지 않는 경우 배포 패키지가 Lambda와 호환되지 않습니다.

Linux 운영 체제 외부에서 pip를 사용할 때 Lambda Python 런타임과 호환되는 Lambda 배포 패키지 또는 계층을 생성하려면 다음을 수행합니다.

1.    미리 컴파일된 Python 패키지를 휠(.whl) 파일로 다운로드합니다.

2.    --platform 파라미터의 값으로 manylinux2014를 사용하여 pip install 명령을 실행합니다.

참고: macOS --platform 태그는 작동하지 않습니다. 예: win_amd64macosx_10_6_intel 태그는 Lambda와 호환되는 배포 패키지를 설치하지 않습니다.

해결 방법

참고: 이 예제 절차는 x86_64 아키텍처에서 실행되는 Lambda Python 3.9 런타임용 pandas를 설치하는 방법을 보여줍니다.

1.    명령 프롬프트를 엽니다. 그런 다음, 다음 pip 명령을 실행하여 버전 19.3.0 이상의 pip 버전을 사용하고 있는지 확인합니다.

pip --version

pip 버전 19.3.0보다 이전 pip 버전을 사용하는 경우 다음 명령을 실행하여 최신 버전의 pip로 업그레이드합니다.

python3.9 -m pip install --upgrade pip

2.    다음 명령을 실행하여 미리 컴파일된 Python 패키지의 .whl 파일을 Lambda 함수의 프로젝트 디렉터리에 종속성으로 설치합니다.

중요: my-lambda-function을 함수의 프로젝트 디렉터리 이름으로 바꿉니다.

pip install \
    --platform manylinux2014_x86_64 \
    --target=my-lambda-function \
    --implementation cp \
    --python 3.9 \
    --only-binary=:all: --upgrade \
    pandas

3.    Lambda 함수의 프로젝트 디렉터리를 엽니다. macOS를 사용하는 경우 다음 명령을 실행합니다.

cd my-lambda-function

4.    텍스트 편집기에서 lambda_function.py라는 새 파일을 만듭니다. 그런 다음, 다음 예제 코드를 복사하여 파일에 붙여 넣고 Lambda 함수의 프로젝트 디렉터리에 저장합니다.

import numpy as np
import pandas as pd
def lambda_handler(event, context):
    df2 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),columns=["a", "b", "c"])
    number = np.pi
    print(df2)
    print(number)

5.    다음 명령을 실행하여 설치된 모든 라이브러리 및 소스 코드를 포함하는 Lambda 배포 패키지 .zip 파일 아카이브를 생성합니다.

zip -r ../my-deployment-package.zip .

6.    my-deployment-package.zip 파일 아카이브를 사용하여 새 Python 3.9 Lambda 함수를 생성하거나 기존 함수를 업데이트합니다. 지침은 AWS Lambda 개발자 가이드의 .zip 파일을 함수에 배포를 참조하세요.

참고: 유사한 절차를 사용하여 여러 함수에서 사용할 수 있는 Lambda 계층을 생성할 수 있습니다. 예를 들어, 다음 명령은 arm64 아키텍처에서 실행되는 Lambda Python 3.9 런타임용 pandas를 설치하기 위해 새 Lambda 계층을 생성합니다.

pip install \
    --platform manylinux2014_aarch64 \
    --target=./python/lib/python3.9/site-packages \
    --implementation cp \
    --python 3.9 \
    --only-binary=:all: --upgrade \
    pandas

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요합니까?