Python Lambda 함수에 대한 .zip 파일 아카이브 작업
AWS Lambda 함수의 코드는 함수의 핸들러 코드가 포함된 .py 파일과 코드가 의존하는 추가 패키지 및 모듈로 구성됩니다. Lambda에 이 함수 코드를 배포하려면 배포 패키지를 사용합니다. 이 패키지는 .zip 파일 아카이브 또는 컨테이너 이미지일 수 있습니다. Python에서 컨테이너 이미지를 사용하는 방법에 대한 자세한 내용은 컨테이너 이미지로 Python Lambda 함수 배포를 참조하세요.
배포 패키지를 .zip 파일 아카이브로 생성하려면 명령줄 도구의 기본 제공 .zip 파일 아카이브 유틸리티 또는 7zipzip
도구를 사용한다고 가정합니다. Windows에서 동일한 명령을 사용하려면 Windows Subsystem for Linux를 설치
Lambda는 POSIX 파일 권한을 사용하므로 .zip 파일 아카이브를 생성하기 전에 배포 패키지 폴더에 대한 권한을 설정
주제
Python의 런타임 종속 항목
Python 런타임을 사용하는 Lambda 함수의 경우 종속 항목은 모든 Python 패키지 또는 모듈일 수 있습니다. .zip 아카이브를 사용하여 함수를 배포할 때 이러한 종속 항목을 함수 코드와 함께 .zip 파일에 추가하거나 Lambda 계층을 사용할 수 있습니다. 계층은 추가 코드 또는 기타 콘텐츠를 포함할 수 있는 별도의 .zip 파일입니다. Python에서의 Lambda 계층 사용에 대해 자세히 알아보려면 Python Lambda 함수를 위한 계층 작업 섹션을 참조하세요.
Lambda Python 런타임에는 AWS SDK for Python (Boto3)과 해당 종속 항목이 포함됩니다. Lambda는 자체 종속 항목을 추가할 수 없는 배포 시나리오를 위해 런타임에 SDK를 제공합니다. 이러한 시나리오에는 기본 제공 코드 편집기를 사용하여 콘솔에서 함수를 생성하거나 AWS Serverless Application Model(AWS SAM) 또는 AWS CloudFormation 템플릿에서 인라인 함수를 사용하는 것이 포함됩니다.
Lambda는 최신 업데이트 및 보안 패치를 포함하도록 Python 런타임의 라이브러리를 주기적으로 업데이트합니다. 함수가 런타임에 포함된 Boto3 SDK 버전을 사용하지만 배포 패키지에 SDK 종속 항목이 포함된 경우 버전 불일치 문제가 발생할 수 있습니다. 예를 들어, 배포 패키지에 SDK 종속 항목 urllib3이 포함될 수 있습니다. Lambda가 런타임에 SDK를 업데이트할 때 런타임의 새 버전과 배포 패키지의 urllib3 버전 간 호환성 문제로 인해 함수가 실패할 수 있습니다.
중요
종속 항목을 완전히 제어하고 버전 불일치 문제를 방지하려면 Lambda 런타임에 종속 항목의 버전이 포함되어 있더라도 배포 패키지에 함수의 모든 종속 항목을 추가하는 것이 좋습니다. 여기에는 Boto3 SDK도 포함됩니다.
사용 중인 런타임에 포함된 SDK for Python(Boto3) 버전을 찾으려면 런타임에 포함된 SDK 버전 섹션을 참조하세요.
AWS Shared Responsibility Model에서는 사용자가 함수의 배포 패키지에 있는 모든 종속 항목을 관리해야 합니다. 여기에는 업데이트 및 보안 패치 적용이 포함됩니다. 함수의 배포 패키지에서 종속 항목을 업데이트하려면 먼저 새 .zip 파일을 생성한 다음 Lambda에 업로드합니다. 자세한 내용은 종속 항목이 있는 .zip 배포 패키지 생성 및 .zip 파일을 사용하여 Python Lambda 함수 생성 및 업데이트 섹션을 참조하세요.
종속 항목이 없는 .zip 배포 패키지 생성
함수 코드에 종속 항목이 없는 경우 .zip 파일에는 함수의 핸들러 코드가 있는 .py 파일만 포함됩니다. 선호하는 zip 유틸리티를 사용하여 루트에 .py 파일이 있는 .zip 파일을 생성합니다. .py 파일이.zip 파일의 루트에 없는 경우 Lambda는 코드를 실행할 수 없습니다.
.zip 파일을 배포하여 새 Lambda 함수를 생성하거나 기존 함수를 업데이트하는 방법을 알아보려면 .zip 파일을 사용하여 Python Lambda 함수 생성 및 업데이트 섹션을 참조하세요.
종속 항목이 있는 .zip 배포 패키지 생성
함수 코드가 추가 패키지 또는 모듈에 의존하는 경우 이러한 종속 항목을 함수 코드와 함께 .zip 파일에 추가하거나 Lambda 계층을 사용할 수 있습니다. 이 섹션의 지침에서는 .zip 배포 패키지에 종속 항목을 포함하는 방법을 보여줍니다. Lambda에서 코드를 실행하려면 핸들러 코드와 함수의 모든 종속 항목을 포함하는 .py 파일을 .zip 파일의 루트에 설치해야 합니다.
함수 코드가 lambda_function.py
라는 파일에 저장되어 있다고 가정해 보겠습니다. 다음 예제 CLI 명령은 함수 코드와 해당 종속 항목을 포함하는 my_deployment_package.zip
라는 .zip 파일을 생성합니다. 프로젝트 디렉터리의 폴더에 직접 종속 항목을 설치하거나 Python 가상 환경을 사용할 수 있습니다.
배포 패키지 생성(프로젝트 디렉터리)
-
lambda_function.py
소스 코드 파일이 들어 있는 프로젝트 디렉터리로 이동합니다. 이 예에서 디렉터리 이름은my_function
입니다.cd my_function
-
종속 항목을 설치할 package라는 새 디렉터리를 생성합니다.
mkdir package
.zip 배포 패키지의 경우 Lambda는 소스 코드와 해당 종속 항목이 모두 .zip 파일의 루트에 있을 것으로 예상합니다. 그러나 프로젝트 디렉터리에 종속 항목을 직접 설치하면 많은 수의 새 파일과 폴더가 생겨서 IDE 탐색이 어려워질 수 있습니다. 여기에 별도의
package
디렉터리를 생성하여 종속 항목을 소스 코드와 별도로 유지합니다. -
package
디렉터리에 종속 항목을 설치합니다. 아래 예제에서는 pip를 사용하여 Python 패키지 인덱스에서 Boto3 SDK를 설치합니다. 함수 코드에서 사용자가 직접 생성한 Python 패키지를 사용하는 경우package
디렉터리에 해당 Python 패키지를 저장합니다.pip install --target ./package boto3
-
설치된 라이브러리가 포함된 .zip 파일을 루트에 생성합니다.
cd package zip -r ../my_deployment_package.zip .
그러면 프로젝트 디렉터리에
my_deployment_package.zip
파일이 생성됩니다. -
.zip 파일의 루트에 lambda_function.py 파일을 추가합니다.
cd .. zip my_deployment_package.zip lambda_function.py
.zip 파일은 다음과 같이 함수의 핸들러 코드와 모든 종속 항목 폴더가 루트에 설치된 플랫 디렉터리 구조여야 합니다.
my_deployment_package.zip |- bin | |-jp.py |- boto3 | |-compat.py | |-data | |-docs ... |- lambda_function.py
함수의 핸들러 코드를 포함하는 .py 파일이.zip 파일의 루트에 없는 경우 Lambda는 코드를 실행할 수 없습니다.
배포 패키지 생성(가상 환경)
-
프로젝트 디렉터리에 가상 환경을 생성하고 활성화합니다. 이 예제에서 프로젝트 디렉터리 이름은
my_function
입니다.~$
cd my_function
~/my_function$python3.12 -m venv my_virtual_env
~/my_function$source ./my_virtual_env/bin/activate
-
pip를 사용하여 필요한 라이브러리를 설치합니다. 다음 예제에서는 Boto3 SDK를 설치합니다.
(my_virtual_env) ~/my_function$
pip install boto3
-
pip show
를 사용하여 가상 환경에서 pip가 종속 항목을 설치한 위치를 찾습니다.(my_virtual_env) ~/my_function$
pip show <package_name>
pip가 라이브러리를 설치하는 폴더의 이름은
site-packages
또는dist-packages
일 수 있습니다. 이 폴더는lib/python3.x
또는lib64/python3.x
디렉터리에 있을 수 있습니다(여기서 python3.x는 사용 중인 Python 버전을 나타냄). -
가상 환경 비활성화
(my_virtual_env) ~/my_function$
deactivate
-
pip를 사용하여 설치한 종속 항목이 포함된 디렉터리로 이동하고 루트에 설치된 종속 항목이 있는 프로젝트 디렉터리에 .zip 파일을 생성합니다. 이 예제에서 pip는
my_virtual_env/lib/python3.12/site-packages
디렉터리에 종속 항목을 설치했습니다.~/my_function$
cd my_virtual_env/lib/python3.12/site-packages
~/my_function/my_virtual_env/lib/python3.12/site-packages$zip -r ../../../../my_deployment_package.zip .
-
핸들러 코드가 포함된 .py 파일이 있는 프로젝트 디렉터리의 루트로 이동하고 해당 파일을 .zip 패키지의 루트에 추가합니다. 이 예제에서 함수 코드 파일의 이름은
lambda_function.py
입니다.~/my_function/my_virtual_env/lib/python3.12/site-packages$
cd ../../../../
~/my_function$zip my_deployment_package.zip lambda_function.py
종속 항목 검색 경로 및 런타임 포함 라이브러리
코드에서 import
문을 사용하면 Python 런타임은 모듈 또는 패키지를 찾을 때까지 검색 경로의 디렉터리를 검색합니다. 기본적으로 런타임에서 검색하는 첫 번째 위치는.zip 배포 패키지가 압축 해제되고 탑재되는 디렉터리입니다(/var/task
). 배포 패키지에 런타임 포함 라이브러리 버전을 포함하는 경우 이 버전이 런타임에 포함된 버전보다 우선합니다. 배포 패키지의 종속 항목도 계층의 종속 항목보다 우선합니다.
계층에 종속 항목을 추가하면 Lambda는 이 종속 항목을 /opt/python/lib/python3.x/site-packages
로 추출합니다. 여기서 python3.x
는 사용 중인 런타임의 버전 또는 /opt/python
을 나타냅니다. 검색 경로에서 이러한 디렉터리는 런타임 포함 라이브러리와 pip 설치 라이브러리(/var/runtime
및 /var/lang/lib/python3.x/site-packages
)가 포함된 디렉터리보다 우선합니다. 따라서 함수 계층의 라이브러리는 런타임에 포함된 버전보다 우선합니다.
참고
Python 3.11 관리형 런타임 및 기본 이미지에서 AWS SDK와 해당 종속 항목은 /var/lang/lib/python3.11/site-packages
디렉터리에 설치됩니다.
다음 코드 조각을 추가하여 Lambda 함수에 대한 전체 검색 경로를 볼 수 있습니다.
import sys search_path = sys.path print(search_path)
참고
배포 패키지 또는 계층의 종속 항목이 런타임 포함 라이브러리보다 우선하므로 SDK도 포함하지 않고 패키지에 urllib3과 같은 SDK 종속 항목을 포함하면 버전 불일치 문제가 발생할 수 있습니다. 자체 버전의 Boto3 종속 항목을 배포하는 경우 Boto3도 배포 패키지에 종속 항목으로 배포해야 합니다. 런타임에 해당 버전이 포함되어 있더라도 함수의 모든 종속 항목을 패키징하는 것이 좋습니다.
.zip 패키지 내의 별도 폴더에 종속 항목을 추가할 수도 있습니다. 예를 들어 common
이라는 .zip 패키지의 폴더에 Boto3 SDK 버전을 추가할 수 있습니다. .zip 패키지를 압축 해제하고 탑재하면 /var/task
디렉터리 내에 이 폴더가 배치됩니다. 코드에서 .zip 배포 패키지의 폴더에 있는 종속 항목을 사용하려면 import from
문을 사용합니다. 예를 들어, .zip 패키지의 common
폴더에 있는 Boto3 버전을 사용하려면 다음 문을 사용합니다.
from common import boto3
__pycache__ 폴더 사용
함수의 배포 패키지에 __pycache__
폴더를 포함하지 않는 것이 좋습니다. 다른 아키텍처나 운영 체제의 빌드 시스템에서 컴파일된 Python 바이트 코드는 Lambda 실행 환경과 호환되지 않을 수 있습니다.
네이티브 라이브러리로 .zip 배포 패키지 생성
함수가 순수 Python 패키지 및 모듈만 사용하는 경우 pip install
명령을 사용하여 로컬 빌드 시스템에 종속 항목을 설치하고 .zip 파일을 생성할 수 있습니다. NumPy와 Pandas를 비롯한 많은 인기 Python 라이브러리는 순수 Python이 아니며 C 또는 C++로 작성된 코드를 포함합니다. 배포 패키지에 C/C++ 코드가 포함된 라이브러리를 추가할 때 패키지가 Lambda 실행 환경과 호환되도록 패키지를 올바르게 빌드해야 합니다.
Python 패키지 인덱스(PyPI
일부 패키지는 소스 배포판으로만 사용할 수 있습니다. 이러한 패키지의 경우 C/C++ 구성 요소를 직접 컴파일하고 빌드해야 합니다.
필요한 패키지에 사용할 수 있는 배포판을 확인하려면 다음을 수행하세요.
-
Python Package Index 기본 페이지
에서 패키지 이름을 검색합니다. -
사용할 패키지의 버전을 선택합니다.
-
Download files를 선택합니다.
빌드된 배포판 작업(휠)
Lambda와 호환되는 휠을 다운로드하려면 pip --platform
옵션을 사용합니다.
Lambda 함수가 x86_64 명령 세트 아키텍처를 사용하는 경우 다음 pip install
명령을 실행하여 package
디렉터리에 호환되는 휠을 설치합니다. --python 3.x
를 사용 중인 Python 런타임 버전으로 바꿉니다.
pip install \ --platform manylinux2014_x86_64 \ --target=package \ --implementation cp \ --python-version
3.x
\ --only-binary=:all: --upgrade \ <package_name>
함수에서 arm64 명령 세트 아키텍처를 사용하는 경우 다음 명령을 실행합니다. --python 3.x
를 사용 중인 Python 런타임 버전으로 바꿉니다.
pip install \ --platform manylinux2014_aarch64 \ --target=package \ --implementation cp \ --python-version
3.x
\ --only-binary=:all: --upgrade \ <package_name>
소스 배포판 작업
패키지를 소스 배포판으로만 사용할 수 있는 경우 C/C++ 라이브러리를 직접 빌드해야 합니다. 패키지가 Lambda 실행 환경과 호환되도록 하려면 동일한 Amazon Linux 2 운영 체제를 사용하는 환경에서 패키지를 빌드해야 합니다. Amazon EC2 Linux 인스턴스에서 패키지를 빌드하여 이 작업을 수행할 수 있습니다.
Amazon EC2 Linux 인스턴스를 시작하고 연결하는 방법을 알아보려면 Amazon EC2 - Linux 인스턴스용 사용 설명서의 자습서: Amazon EC2 Linux 인스턴스 시작을 참조하세요.
.zip 파일을 사용하여 Python Lambda 함수 생성 및 업데이트
.zip 배포 패키지를 생성한 후 이를 사용하여 새 Lambda 함수를 생성하거나 기존 함수를 업데이트할 수 있습니다. Lambda 콘솔, AWS Command Line Interface 및 Lambda API를 사용하여 .zip 패키지를 배포할 수 있습니다. AWS Serverless Application Model(AWS SAM) 및 AWS CloudFormation을 사용하여 Lambda 함수를 생성하고 업데이트할 수도 있습니다.
Lambda용 .zip 배포 패키지의 최대 크기는 250MB(압축 해제됨)입니다. 이 제한은 Lambda 계층을 포함하여 업로드하는 모든 파일의 합산 크기에 적용됩니다.
Lambda 런타임은 배포 패키지의 파일을 읽을 수 있는 권한이 필요합니다. Linux 권한 8진수 표기법에서는 Lambda에 실행 불가능한 파일(rw-r--r--)에 대한 644개의 권한과 디렉터리 및 실행 파일에 대한 755개의 권한(rwxr-xr-x)이 필요합니다.
Linux 및 MacOS에서는 chmod
명령을 사용하여 배포 패키지의 파일 및 디렉터리에 대한 파일 권한을 변경합니다. 예를 들어, 실행 파일에 올바른 권한을 부여하려면 다음 명령을 실행합니다.
chmod 755 <filepath>
Windows에서 파일 권한을 변경하려면 Microsoft Windows 설명서의 Set, View, Change, or Remove Permissions on an Object
콘솔을 사용하여.zip 파일로 함수 생성 및 업데이트
새 함수를 생성하려면 먼저 콘솔에서 함수를 생성한 다음.zip 아카이브를 업로드해야 합니다. 기존 함수를 업데이트하려면 함수에 대한 페이지를 연 다음 동일한 절차에 따라 업데이트된 .zip 파일을 추가합니다.
.zip 파일이 50MB 미만인 경우 로컬 컴퓨터에서 직접 파일을 업로드하여 함수를 생성하거나 업데이트할 수 있습니다. 50MB보다 큰 .zip 파일의 경우 먼저 패키지를 Amazon S3 버킷에 업로드해야 합니다. AWS Management Console을 사용하여 Amazon S3 버킷에 파일을 업로드하는 방법에 대한 지침은 Amazon S3 시작하기를 참조하세요. AWS CLI를 사용하여 파일을 업로드하려면 AWS CLI 사용 설명서의 객체 이동을 참조하세요.
참고
기존 함수의 배포 패키지 유형(.zip 또는 컨테이너 이미지)은 변경할 수 없습니다. 예를 들어 .zip 파일 아카이브를 사용하도록 컨테이너 이미지 함수를 변환할 수는 없습니다. 새로운 함수를 생성해야 합니다.
새 함수 생성(콘솔)
-
Lambda 콘솔의 함수 페이지
를 열고 함수 생성을 선택합니다. -
새로 작성을 선택합니다.
-
기본 정보에서 다음과 같이 합니다.
-
함수 이름에 함수 이름을 입력합니다.
-
런타임에서 사용할 런타임을 선택합니다.
-
(선택 사항) 아키텍처에서 함수에 대한 명령 세트 아키텍처를 선택합니다. 기본 아키텍처는 x86_64입니다. 함수에 대한 .zip 배포 패키지가 선택한 명령 세트 아키텍처와 호환되는지 확인합니다.
-
-
(선택 사항) 권한(Permissions)에서 기본 실행 역할 변경(Change default execution role)을 확장합니다. 새로운 실행 역할을 생성하거나 기존 실행 역할을 사용할 수 있습니다.
-
함수 생성(Create function)을 선택합니다. Lambda에서 선택한 런타임을 사용하여 기본 'Hello World' 함수를 생성합니다.
로컬 시스템에서 .zip 아카이브 업로드(콘솔)
-
Lambda 콘솔의 함수 페이지
에서.zip 파일을 업로드할 함수를 선택합니다. -
코드 탭을 선택합니다.
-
코드 소스 창에서 에서 업로드를 선택합니다.
-
.zip 파일을 선택합니다.
-
.zip 파일을 업로드하려면 다음을 수행합니다.
-
업로드를 선택한 다음 파일 선택기에서.zip 파일을 선택합니다.
-
Open을 선택합니다.
-
Save(저장)를 선택합니다.
-
Amazon S3 버킷에서.zip 아카이브 업로드(콘솔)
-
Lambda 콘솔의 함수 페이지
에서 새 .zip 파일을 업로드할 함수를 선택합니다. -
코드 탭을 선택합니다.
-
코드 소스 창에서 에서 업로드를 선택합니다.
-
Amazon S3 위치를 선택합니다.
-
.zip 파일의 Amazon S3 링크 URL을 붙여 넣고 저장을 선택합니다.
콘솔 코드 편집기를 사용하여.zip 파일 함수 업데이트
.zip 배포 패키지를 사용하는 일부 함수의 경우 Lambda 콘솔의 기본 제공 코드 편집기를 사용하여 함수 코드를 직접 업데이트할 수 있습니다. 이 기능을 사용하려면 함수가 다음 조건을 충족해야 합니다.
-
함수에서 해석된 언어 런타임(Python, Node.js 또는 Ruby) 중 하나를 사용해야 합니다.
-
함수의 배포 패키지가 50MB(압축 해제)보다 작아야 합니다.
컨테이너 이미지 배포 패키지가 있는 함수의 함수 코드는 콘솔에서 직접 편집할 수 없습니다.
콘솔 코드 편집기를 사용하여 함수 코드 업데이트
-
Lambda 콘솔의 함수 페이지
를 열고 함수를 선택합니다. -
코드 탭을 선택합니다.
-
코드 소스 창에서 소스 코드 파일을 선택하고 통합 코드 편집기에서 편집합니다.
-
코드 편집이 완료되면 기본 사이드 바에서 배포 섹션을 확장하고 배포를 선택합니다.
AWS CLI를 사용하여.zip 파일로 함수 생성 및 업데이트
AWS CLI를 사용하여 새 함수를 생성하거나.zip 파일로 기존 함수를 업데이트할 수 있습니다. create-function 및 update-function-code 명령을 사용하여 .zip 패키지를 배포합니다. .zip 파일이 50MB보다 작은 경우 로컬 빌드 시스템의 파일 위치에서 .zip 패키지를 업로드할 수 있습니다. 더 큰 파일의 경우 Amazon S3 버킷에서 .zip 패키지를 업로드해야 합니다. AWS CLI를 사용하여 Amazon S3 버킷에 파일을 업로드하는 방법에 대한 지침은 AWS CLI 사용 설명서의 객체 이동을 참조하세요.
참고
AWS CLI를 사용하여 Amazon S3 버킷에서 .zip 파일을 업로드하는 경우 버킷은 함수와 동일한 AWS 리전에 있어야 합니다.
AWS CLI에서 .zip 파일을 사용하여 새 함수를 생성하려면 다음을 지정해야 합니다.
-
함수의 이름(
--function-name
) -
함수의 런타임(
--runtime
) -
함수의 실행 역할(
--role
)의 Amazon 리소스 이름(ARN) -
함수 코드에 있는 핸들러 메서드의 이름(
--handler
)
.zip 파일의 위치도 지정해야 합니다. .zip 파일이 로컬 빌드 시스템의 폴더에 있는 경우 다음 예제 명령과 같이 --zip-file
옵션을 사용하여 파일 경로를 지정합니다.
aws lambda create-function --function-name myFunction \ --runtime python3.12 --handler lambda_function.lambda_handler \ --role arn:aws:iam::111122223333:role/service-role/my-lambda-role \ --zip-file fileb://myFunction.zip
Amazon S3 버킷에서 .zip 파일의 위치를 지정하려면 다음 예제 명령과 같이 --code
옵션을 사용합니다. 버전이 지정된 객체에만 S3ObjectVersion
파라미터를 사용해야 합니다.
aws lambda create-function --function-name myFunction \ --runtime python3.12 --handler lambda_function.lambda_handler \ --role arn:aws:iam::111122223333:role/service-role/my-lambda-role \ --code S3Bucket=amzn-s3-demo-bucket,S3Key=myFileName.zip,S3ObjectVersion=myObjectVersion
CLI를 사용하여 기존 함수를 업데이트하려면 --function-name
파라미터를 사용하여 함수 이름을 지정합니다. 함수 코드를 업데이트하는 데 사용할.zip 파일의 위치도 지정해야 합니다. .zip 파일이 로컬 빌드 시스템의 폴더에 있는 경우 다음 예제 명령과 같이 --zip-file
옵션을 사용하여 파일 경로를 지정합니다.
aws lambda update-function-code --function-name myFunction \ --zip-file fileb://myFunction.zip
Amazon S3 버킷에서 .zip 파일의 위치를 지정하려면 다음 예제 명령과 같이 --s3-bucket
및 --s3-key
옵션을 사용합니다. 버전이 지정된 객체에만 --s3-object-version
파라미터를 사용해야 합니다.
aws lambda update-function-code --function-name myFunction \ --s3-bucket amzn-s3-demo-bucket --s3-key myFileName.zip --s3-object-version myObject Version
Lambda API를 사용하여.zip 파일로 함수 생성 및 업데이트
.zip 파일 아카이브를 사용하여 함수를 생성하고 업데이트하려면 다음 API 작업을 사용합니다.
AWS SAM을 사용하여.zip 파일로 함수 생성 및 업데이트
AWS Serverless Application Model(AWS SAM)은 AWS에서 서버리스 애플리케이션을 빌드하고 실행하는 프로세스를 간소화하는 데 도움이 되는 도구 키트입니다. YAML 또는 JSON 템플릿에서 애플리케이션의 리소스를 정의하고 AWS SAM Command Line Interface(AWS SAM CLI)를 사용하여 애플리케이션을 빌드, 패키징 및 배포합니다. AWS SAM 템플릿에서 Lambda 함수를 빌드하면 AWS SAM은 함수 코드와 사용자가 지정하는 종속 항목을 사용하여 .zip 배포 패키지 또는 컨테이너 이미지를 자동으로 생성합니다. AWS SAM을 사용하여 Lambda 함수를 빌드하고 배포하는 방법에 대해 자세히 알아보려면 AWS Serverless Application Model 개발자 안내서의 Getting started with AWS SAM을 참조하세요.
AWS SAM을 사용하여 기존 .zip 파일 아카이브로 Lambda 함수를 생성할 수도 있습니다. AWS SAM을 사용하여 Lambda 함수를 생성하려면 Amazon S3 버킷 또는 빌드 시스템의 로컬 폴더에 .zip 파일을 저장할 수 있습니다. AWS CLI를 사용하여 Amazon S3 버킷에 파일을 업로드하는 방법에 대한 지침은 AWS CLI 사용 설명서의 객체 이동을 참조하세요.
AWS SAM 템플릿에서 AWS::Serverless::Function
리소스는 Lambda 함수를 지정합니다. 이 리소스에서 다음 속성을 설정하여 .zip 파일 아카이브로 함수를 생성합니다.
-
PackageType
-Zip
으로 설정됨 -
CodeUri
- 함수 코드의 Amazon S3 URI, 로컬 폴더 경로 또는 FunctionCode 객체로 설정됨 -
Runtime
- 선택한 런타임으로 설정됨
AWS SAM을 사용하면 .zip 파일이 50MB보다 큰 경우 Amazon S3 버킷에 먼저 파일을 업로드할 필요가 없습니다. AWS SAM은 로컬 빌드 시스템의 위치에서 허용되는 최대 크기 250MB(압축 해제)까지 .zip 패키지를 업로드할 수 있습니다.
AWS SAM에서 .zip 파일을 사용하여 함수를 배포하는 방법에 대해 자세히 알아보려면 AWS SAM 개발자 안내서의 AWS::Serverless::Function을 참조하세요.
AWS CloudFormation을 사용하여.zip 파일로 함수 생성 및 업데이트
AWS CloudFormation을 사용하여 .zip 파일 아카이브로 Lambda 함수를 생성할 수 있습니다. .zip 파일에서 Lambda 함수를 생성하려면 먼저 Amazon S3 버킷에 파일을 업로드해야 합니다. AWS CLI를 사용하여 Amazon S3 버킷에 파일을 업로드하는 방법에 대한 지침은 AWS CLI 사용 설명서의 객체 이동을 참조하세요.
Node.js 및 Python 런타임의 경우 AWS CloudFormation 템플릿에서 인라인 소스 코드를 제공할 수도 있습니다. 그러면 함수를 빌드할 때 AWS CloudFormation에서 코드가 포함된 .zip 파일을 생성합니다.
기존.zip 파일 사용
AWS CloudFormation 템플릿에서 AWS::Lambda::Function
리소스는 Lambda 함수를 지정합니다. 이 리소스에서 다음 속성을 설정하여 .zip 파일 아카이브로 함수를 생성합니다.
-
PackageType
-Zip
으로 설정됨 -
Code
-S3Bucket
및S3Key
필드에 Amazon S3 버킷 이름과 .zip 파일 이름을 입력합니다. -
Runtime
- 선택한 런타임으로 설정됨
인라인 코드에서.zip 파일 생성
AWS CloudFormation 템플릿에서 Python 또는 Node.js 인라인으로 작성된 단순 함수를 선언할 수 있습니다. 코드가 YAML 또는 JSON에 포함되어 있으므로 배포 패키지에 외부 종속 항목을 추가할 수 없습니다. 즉, 함수는 런타임에 포함된 AWS SDK 버전을 사용해야 합니다. 또한 특정 문자를 이스케이프해야 하는 것과 같은 템플릿의 요구 사항으로 인해 IDE의 구문 검사 및 코드 완료 기능을 사용하기가 더 어려워집니다. 이는 템플릿에 추가 테스트가 필요할 수 있음을 의미합니다. 이러한 제한 때문에 자주 변경되지 않는 매우 단순한 코드에는 인라인으로 함수를 선언하는 것이 가장 적합합니다.
Node.js 및 Python 런타임에 대한 인라인 코드에서 .zip 파일을 생성하려면 템플릿의 AWS::Lambda::Function
리소스에 다음 속성을 설정합니다.
-
PackageType
-Zip
으로 설정됨 -
Code
-ZipFile
필드에 함수 코드 입력 -
Runtime
- 선택한 런타임으로 설정됨
AWS CloudFormation에서 생성하는 .zip 파일은 4MB를 초과할 수 없습니다. AWS CloudFormation에서 .zip 파일을 사용하여 함수를 배포하는 방법에 대해 자세히 알아보려면 AWS CloudFormation 사용 설명서의 AWS::Lambda::Function을 참조하세요.