Docker와 함께 시뮬레이션된 Lambda 환경을 사용하여 Lambda 계층을 생성하려면 어떻게 하나요?

최종 업데이트 날짜: 2021년 10월 11일

대상 환경 런타임과 호환되는 AWS Lambda 계층을 생성하려고 합니다. 어떻게 해야 하나요?

간략한 설명

Lambda 함수를 개발할 때 지원되는 Lambda 런타임 버전 중에서 선택할 수 있습니다. 특정 런타임과 호환되는 Lambda 함수 및 계층을 생성하려면 다음 중 하나를 수행합니다.

자세한 내용은 Lambda 계층 생성 및 공유를 참조하십시오.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생할 경우 AWS CLI의 최신 버전을 사용하고 있는지 확인하세요.

다음 지침에서는 Python을 코딩 언어로 사용하고 Linux 기반 컴퓨터 플랫폼을 예시로 사용합니다. 다른 코딩 언어와 플랫폼의 경우 단계를 적절히 조정합니다.

컴퓨터에 Docker를 설치합니다.

아직 설치하지 않은 경우 컴퓨터에 Linux, Windows 또는 macOS용 Docker를 설치합니다.

적절한 디렉터리 구조를 생성하고 pip 요구 사항 파일(requirements.txt)에서 종속성을 지정합니다.

디렉터리 구조 생성에 대한 자세한 내용은 계층 내 라이브러리 종속성 포함을 참조하십시오. 종속성 지정에 대한 자세한 내용은 pip 사용 설명서의 요구 사항 파일을 참조하십시오.

Python 버전 3.6 및 3.8과 호환되는 Lambda 계층의 디렉터리 구조 예제

├── requirements.txt
└── python/
    └── lib/
        ├── python3.6/
        │   └── site-packages/
        └── python3.8/
            └── site-packages/

참고: 함수 및 모든 계층의 압축을 푼 전체 크기는 압축 해제된 배포 패키지 크기 제한인 250MB를 초과할 수 없습니다. Lambda의 Python 버전 지원에 대한 자세한 내용은 Python을 사용하여 Lambda 함수 빌드를 참조하세요.

디렉터리 구조에서 지정한 런타임을 기반으로 라이브러리 종속성을 적절한 하위 폴더에 설치합니다.

디렉터리 구조에서 지정한 각 런타임에 대해 다음 AWS CLI 명령을 한 번씩 실행합니다.

중요: 설치하려는 호환되는 라이브러리에 따라 3.63.7 또는 3.8로 바꿉니다.

docker run -v "$PWD":/var/task "public.ecr.aws/sam/build-python3.6" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.6/site-packages/; exit"

계층에 대한 .zip 파일 아카이브 만들기

다음 명령을 실행하여 python 폴더를 압축하고 계층 패키지를 생성합니다.

참고: mypythonlibs를 원하는 이름으로 바꿀 수 있습니다.

zip -r mypythonlibs.zip python > /dev/null

.zip 파일은 Lambda 환경의 /opt 폴더에서 수축됩니다. /opt 폴더는 Lambda 함수 코드에서 액세스할 수 있습니다.

계층 생성 또는 업데이트

다음 명령을 실행하여 Lambda 계층을 생성하거나 업데이트합니다.

중요: 앞서 지정한 호환 가능한 런타임을 포함해야 합니다. mypythonlibs를 이전 단계에서 사용한 패키지 이름으로 바꿉니다. My python libs를 원하는 설명으로 바꿉니다.

aws lambda publish-layer-version --layer-name mypythonlibs --description "My python libs" --zip-file fileb://mypythonlibs.zip --compatible-runtimes "python3.6" "python3.8"

출력을 검토하고 계층의 Amazon 리소스 이름(ARN)을 복사합니다. 다음 단계를 완료하려면 계층의 ARN이 필요합니다.

계층을 사용하도록 Lambda 함수 구성을 업데이트합니다.

다음 명령을 실행하여 계층을 사용하도록 Lambda 함수 구성을 업데이트합니다.

중요: arn:aws:lambda:us-east-2:123456789012:layer:mypythonlibs:1을 계층 ARN으로 바꿉니다.

aws lambda update-function-configuration --layers arn:aws:lambda:us-east-2:123456789012:layer:mypythonlibs:1 --function-name my-function

(선택 사항) Lambda 패키지에 AWS SAM 파일 대신 Docker 이미지 사용

AWS SAM 파일을 사용하는 대신 amazon/aws-sam-cli-build-image Docker 이미지를 사용하여 Lambda 패키지를 생성할 수도 있습니다. Docker 이미지를 사용하면 계층을 만들지 않고도 패키지를 생성할 수 있습니다.

1.    다음 명령을 실행하여 종속 항목의 필수 버전을 가져옵니다.

중요: 설치하려는 호환 라이브러리에 따라 3.63.7 또는 3.8로 바꿉니다.

docker run -v "$PWD":/var/task "public.ecr.aws/sam/build-python3.6" /bin/sh -c "pip install -r requirements.txt -t libs; exit"

2.    함수 코드와 올바른 라이브러리를 포함한 Lambda 배포 패키지를 생성합니다.