계층 콘텐츠 패키징 - AWS Lambda

계층 콘텐츠 패키징

Lambda 계층은 추가 코드 또는 데이터를 포함하는 .zip 파일 아카이브입니다. 계층에는 일반적으로 라이브러리 종속 항목, 사용자 지정 런타임 또는 구성 파일이 포함됩니다.

이 섹션에서는 계층 콘텐츠를 올바르게 패키징하는 방법을 설명합니다. 계층에 대한 개념 정보와 계층 사용을 고려하는 이유에 대한 자세한 내용은 계층으로 Lambda 종속성 관리 섹션을 참조하세요.

계층을 생성하는 첫 번째 단계는 모든 계층 콘텐츠를.zip 파일 아카이브로 번들링하는 것입니다. Lambda 함수는 Amazon Linux에서 실행되기 때문에 계층 콘텐츠는 Linux 환경에서 컴파일하고 빌드할 수 있어야 합니다.

Linux 환경에서 계층 콘텐츠가 제대로 작동하도록 하려면 Docker와 같은 도구를 사용하여 계층 콘텐츠를 생성하는 것이 좋습니다.

각 Lambda 런타임에 대한 계층 경로

함수에 계층을 추가하면 Lambda는 계층 콘텐츠를 해당 실행 환경의 /opt 디렉터리로 추출합니다. 각 Lambda 런타임에 대해 PATH 변수에는 /opt 디렉터리 내의 특정 폴더 경로가 이미 포함되어 있습니다. Lambda가 계층 콘텐츠를 가져오도록 하려면 계층 .zip 파일의 종속성이 다음 폴더 경로에 있어야 합니다.

런타임 경로

Node.js

nodejs/node_modules

nodejs/node16/node_modules (NODE_PATH)

nodejs/node18/node_modules (NODE_PATH)

nodejs/node20/node_modules (NODE_PATH)

Python

python

python/lib/python3.x/site-packages(사이트 디렉터리)

Java

java/lib (CLASSPATH)

Ruby

ruby/gems/3.3.0 (GEM_PATH)

ruby/lib (RUBYLIB)

모든 런타임

bin (PATH)

lib (LD_LIBRARY_PATH)

다음 예제는 계층 .zip 아카이브에 폴더를 구성하는 방법을 보여줍니다.

Node.js
예 Node.js 용 AWS X-Ray SDK 파일 구조
xray-sdk.zip └ nodejs/node_modules/aws-xray-sdk
Python
python/              # Required top-level directory
└── requests/
└── boto3/
└── numpy/
└── (dependencies of the other packages)
Ruby
예 JSON gem에 대한 파일 구조
json.zip └ ruby/gems/3.3.0/ | build_info | cache | doc | extensions | gems | └ json-2.1.0 └ specifications └ json-2.1.0.gemspec
Java
예 Jackson JAR 파일의 파일 구조
layer_content.zip └ java └ lib └ jackson-core-2.17.0.jar └ <other potential dependencies> └ ...
All
예 jq 라이브러리의 파일 구조
jq.zip └ bin/jq

계층 패키징, 생성, 추가에 대한 언어별 지침은 다음 페이지를 참조하세요.

Go 및 Rust로 작성된 Lambda 함수의 종속성을 관리하는 데는 계층을 사용하지 않는 것이 좋습니다. 이는 이러한 언어로 작성된 Lambda 함수가 단일 실행 파일로 컴파일되어 함수를 배포할 때 Lambda에 제공하기 때문입니다. 이 실행 파일에는 컴파일된 함수 코드와 모든 종속성이 포함되어 있습니다. 계층을 사용하면 이 프로세스가 복잡해질 뿐만 아니라 함수가 초기화 단계에서 추가 어셈블리를 메모리에 수동으로 로드해야 하기 때문에 콜드 스타트 시간이 늘어납니다.

Go 및 Rust Lambda 함수와 함께 외부 종속성을 사용하려면 배포 패키지에 외부 종속성을 직접 포함하세요.