AWS Lambda
개발자 가이드

AWS Lambda 배포 패키지(Python)

배포 패키지는 함수 코드 및 종속성이 포함되어 있는 ZIP 아카이브 파일입니다. Lambda API를 사용하여 함수를 관리하거나 AWS SDK 이외의 라이브러리와 종속성을 포함해야 하는 경우 배포 패키지를 생성해야 합니다. 패키지를 Lambda에 직접 업로드하거나 Amazon S3 버킷을 사용하여 Lambda에 업로드할 수 있습니다. 배포 패키지가 50MB보다 큰 경우 Amazon S3을 사용해야 합니다.

Lambda 콘솔 편집기를 사용하여 함수를 작성하는 경우 콘솔에서 배포 패키지를 관리합니다. 라이브러리를 추가할 필요가 없는 한 이 방법을 사용할 수 있습니다. 또한 총 크기가 3 MB를 초과하지 않는 한, 이 방법을 사용하여 이미 배포 패키지에 라이브러리가 있는 함수를 업데이트할 수 있습니다.

참고

AWS SAM CLI build 명령을 사용하여 Python 함수 코드 및 종속 프로그램을 위한 배포 패키지를 만들 수 있습니다. AWS SAM CLI는 또한 Lambda 실행 환경과 호환되는 Docker 이미지 내부에 배포 패키지를 빌드할 옵션도 제공합니다. 자세한 정보는 AWS SAM 개발자 안내서에서 종속 프로그램을 포함하는 애플리케이션 빌드를 참조하십시오.

사전 조건

이 지침에서는 사용자에게 함수가 이미 있다고 가정합니다. 함수를 아직 생성하지 않았다면 Python을 사용하여 Lambda 함수 빌드 단원을 참조하십시오.

이 설명서의 절차에 따르려면 명령을 실행할 셸 또는 명령줄 터미널이 필요합니다. 명령은 프롬프트 기호($)와 해당하는 경우 현재 디렉터리의 이름이 앞에 붙은 상태로 목록에 표시됩니다.

~/lambda-project$ this is a command this is output

긴 명령의 경우 이스케이프 문자(\)를 사용하여 명령을 여러 행으로 분할합니다.

Linux 및 macOS는 선호 셸과 패키지 관리자를 사용합니다. Windows 10에서 Linux용 Windows Subsystem을 설치하여 Ubuntu와 Bash의 Windows 통합 버전을 가져옵니다.

종속 프로그램이 없는 함수를 업데이트

Lambda API를 사용하여 함수를 생성하거나 업데이트하려면 함수 코드를 포함하는 아카이브를 생성한 후 AWS CLI를 사용하여 이 아카이브를 업로드합니다.

종속 프로그램이 없는 Python 함수를 업데이트하려면

  1. ZIP 아카이브를 생성합니다.

    ~/my-function$ zip function.zip function.py adding: function.py (deflated 17%)
  2. update-function-code 명령을 사용하여 패키지를 업로드합니다.

    ~/my-function$ aws lambda update-function-code --function-name my-function --zip-file fileb://function.zip { "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", "Runtime": "python3.8", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Handler": "function.handler", "CodeSize": 815, "Description": "", "Timeout": 3, "MemorySize": 128, "LastModified": "2018-11-20T20:41:16.647+0000", "CodeSha256": "GcZ05oeHoJi61VpQj7vCLPs8DwCXmX5sE/fE2IHsizc=", "Version": "$LATEST", "VpcConfig": { "SubnetIds": [], "SecurityGroupIds": [], "VpcId": "" }, "TracingConfig": { "Mode": "Active" }, "RevisionId": "d1e983e3-ca8e-434b-8dc1-7add83d72ebd" }

추가 종속 프로그램이 있는 함수를 업데이트

함수가 Python용 SDK(Boto3) 외의 다른 라이브러리를 사용할 경우 pip를 사용하여 로컬 디렉터리에 해당 라이브러리를 설치한 후 배포 패키지에 포함시키십시오.

종속 프로그램을 포함하는 Python 함수를 업데이트하려면

  1. pip--target 옵션을 사용하여 라이브러리를 새 project-local package 디렉터리에 설치합니다.

    ~/my-function$ pip install --target ./package Pillow Collecting Pillow Using cached https://files.pythonhosted.org/packages/62/8c/230204b8e968f6db00c765624f51cfd1ecb6aea57b25ba00b240ee3fb0bd/Pillow-5.3.0-cp37-cp37m-manylinux1_x86_64.whl Installing collected packages: Pillow Successfully installed Pillow-5.3.0

    참고

    Ubuntu 같은 Debian 기반 시스템에서 --target이 작동하려면 --system오류 방지를 위한 플래그distutils 전달 또한 필요할 수 있습니다.

  2. 종속 항목의 ZIP 아카이브를 생성합니다.

    ~/my-function$ cd package ~/my-function/package$ zip -r9 ${OLDPWD}/function.zip . adding: PIL/ (stored 0%) adding: PIL/.libs/ (stored 0%) adding: PIL/.libs/libfreetype-7ce95de6.so.6.16.1 (deflated 65%) adding: PIL/.libs/libjpeg-3fe7dfc0.so.9.3.0 (deflated 72%) adding: PIL/.libs/liblcms2-a6801db4.so.2.0.8 (deflated 67%) ...
  3. 아카이브에 함수 코드를 추가합니다.

    ~/my-function/package$ cd $OLDPWD ~/my-function$ zip -g function.zip function.py adding: function.py (deflated 56%)
  4. 함수 코드를 업데이트합니다.

    ~/my-function$ aws lambda update-function-code --function-name my-function --zip-file fileb://function.zip { "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", "Runtime": "python3.8", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Handler": "function.handler", "CodeSize": 2269409, "Description": "", "Timeout": 3, "MemorySize": 128, "LastModified": "2018-11-20T20:51:35.871+0000", "CodeSha256": "GcZ05oeHoJi61VpQj7vCLPs8DwCXmX5sE/fE2IHsizc=", "Version": "$LATEST", "VpcConfig": { "SubnetIds": [], "SecurityGroupIds": [], "VpcId": "" }, "TracingConfig": { "Mode": "Active" }, "RevisionId": "a9c05ffd-8ad6-4d22-b6cd-d34a00c1702c" }

가상 환경 포함

경우에 따라 함수에 대한 종속 프로그램을 설치하기 위해 가상 환경을 사용해야 할 수 있습니다. 이 상황은 해당 기능 또는 그 종속 프로그램이 기본 라이브러리에 종속되어 있거나 Homebrew를 사용하여 Python을 설치한 경우에 발생할 수 있습니다.

가상 환경을 사용하여 Python 함수를 업데이트하려면

  1. 가상 환경을 생성합니다.

    ~/my-function$ virtualenv v-env Using base prefix '~/.local/python-3.7.0' New python executable in v-env/bin/python3.8 Also creating executable in v-env/bin/python Installing setuptools, pip, wheel... done.

    참고

    Python 3.3 이상의 경우 virtualenv 설치 대신 기본 제공 venv 모듈을 사용하여 가상 환경을 생성할 수 있습니다.

    ~/my-function$ python3 -m venv v-env
  2. 환경을 활성화합니다.

    ~/my-function$ source v-env/bin/activate (v-env) ~/my-function$
  3. pip를 사용하여 라이브러리를 설치합니다.

    (v-env) ~/my-function$ pip install Pillow Collecting Pillow Using cached https://files.pythonhosted.org/packages/62/8c/230204b8e968f6db00c765624f51cfd1ecb6aea57b25ba00b240ee3fb0bd/Pillow-5.3.0-cp37-cp37m-manylinux1_x86_64.whl Installing collected packages: Pillow Successfully installed Pillow-5.3.0
  4. 가상 환경을 비활성화합니다.

    (v-env) ~/my-function$ deactivate
  5. 라이브러리의 내용을 포함하는 ZIP 아카이브를 만듭니다.

    ~/my-function$ cd v-env/lib/python3.8/site-packages ~/my-function/v-env/lib/python3.8/site-packages$ zip -r9 ${OLDPWD}/function.zip . adding: easy_install.py (deflated 17%) adding: PIL/ (stored 0%) adding: PIL/.libs/ (stored 0%) adding: PIL/.libs/libfreetype-7ce95de6.so.6.16.1 (deflated 65%) adding: PIL/.libs/libjpeg-3fe7dfc0.so.9.3.0 (deflated 72%) ...

    라이브러리에 따라 site-packages 또는 dist-packages에 종속 항목이 나타날 수 있으며 가상 환경의 첫 폴더는 lib 또는 lib64가 될 수 있습니다. pip show 명령을 사용하여 특정 패키지를 찾을 수 있습니다.

  6. 아카이브에 함수 코드를 추가합니다.

    ~/my-function/v-env/lib/python3.8/site-packages$ cd $OLDPWD ~/my-function$ zip -g function.zip function.py adding: function.py (deflated 56%)
  7. 함수 코드를 업데이트합니다.

    ~/my-function$ aws lambda update-function-code --function-name my-function --zip-file fileb://function.zip { "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", "Runtime": "python3.8", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Handler": "function.handler", "CodeSize": 5912988, "Description": "", "Timeout": 3, "MemorySize": 128, "LastModified": "2018-11-20T21:08:26.326+0000", "CodeSha256": "A2P0NUWq1J+LtSbkuP8tm9uNYqs1TAa3M76ptmZCw5g=", "Version": "$LATEST", "VpcConfig": { "SubnetIds": [], "SecurityGroupIds": [], "VpcId": "" }, "TracingConfig": { "Mode": "Active" }, "RevisionId": "5afdc7dc-2fcb-4ca8-8f24-947939ca707f" }