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

최종 업데이트 날짜: 2019년 12월 19일

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

간략한 설명

Lambda 함수를 개발할 때 지원되는 Lambda 런타임 버전 중에서 선택할 수 있습니다. lambci/lambda Docker 이미지를 사용하여 라이브 Lambda 환경을 시뮬레이션하고 지정한 런타임과 호환되는 계층을 생성할 수 있습니다. 자세한 내용은 Docker 웹 사이트의 lambci/lambda를 참조하십시오.

lambci/lambda 이미지는 Lambda 환경의 정확한 사본이 아니며 일부 파일이 누락될 수 있습니다.

참고: AWS Serverless Application Model(AWS SAM)은 sam local start-api를 실행하여 서버리스 애플리케이션을 로컬에서 테스트할 때 lambci/lambda Docker 이미지도 사용합니다.

해결 방법

참고: 이 지침에서는 Python을 예제로 사용합니다. 다른 언어의 경우 단계를 적절히 조정합니다.

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

2.    적절한 디렉터리 구조를 생성하고 pip 요구 사항 파일(requirements.txt)에서 종속성을 지정합니다. 자세한 내용은 pip 사용 설명서의 요구 사항 파일을 참조하십시오.

예를 들어 Lambda 계층이 Python 버전 3.6 및 3.8과 호환되도록 하려면 구조는 다음과 같습니다.

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

참고: 함수 및 모든 계층의 압축을 푼 전체 크기는 압축 해제된 배포 패키지 크기 제한인 250MB를 초과할 수 없습니다.

Lambda의 Python 버전 지원에 대한 자세한 내용은 Python을 사용하여 Lambda 함수 빌드를 참조하십시오.

3.    디렉터리 구조에서 지정한 각 런타임에 대해 다음 명령을 한 번 실행합니다. 그러면 해당 런타임과 호환되는 라이브러리가 적절한 하위 폴더에 설치됩니다.

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

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

4.    python 폴더를 압축하여 계층 패키지를 생성합니다. Lambda 함수 코드에서 직접 액세스할 수 있는 Lambda 환경의 /opt 폴더에서 .zip 파일이 압축됩니다.

참고: mypythonlibs를 원하는 이름으로 바꿉니다.

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

5.    다음 명령을 실행하여 계층을 생성하거나 업데이트합니다. 앞서 지정한 호환 런타임을 포함해야 합니다.

참고: mypythonlibs를 이전 단계에서 사용한 패키지 이름으로 바꿉니다. My python libs를 원하는 설명으로 바꿉니다.

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

출력에서 계층의 Amazon 리소스 이름(ARN)을 적어 둡니다. 다음 단계에 필요합니다.

6.    다음 명령을 실행합니다. 이렇게 하면 계층을 사용하도록 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 패키지에 Docker 이미지 사용

계층을 생성하지 않고 Lambda 패키지에 직접 lambci/lambda Docker 이미지를 사용할 수도 있습니다. 다음 명령을 실행하여 종속 항목의 필수 버전을 가져옵니다.

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

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

그런 다음 함수 코드와 올바른 라이브러리를 포함하여 Lambda 배포 패키지를 생성합니다.