Lambda 계층은 추가 코드 또는 데이터를 포함하는 .zip 파일 아카이브입니다. 계층에는 일반적으로 라이브러리 종속 항목, 사용자 지정 런타임 또는 구성 파일이 포함됩니다.
계층 사용을 고려하는 데에는 여러 가지 이유가 있습니다.
-
배포 패키지의 크기를 줄이기 위해. 모든 함수 종속 항목을 함수 코드와 함께 배포 패키지에 포함하는 대신 계층에 배치합니다. 이렇게 하면 배포 패키지가 작고 체계적으로 유지됩니다.
-
핵심 함수 로직을 종속 항목과 분리하기 위해. 계층을 사용하면 함수 코드와 독립적으로 함수 종속 항목을 업데이트할 수 있으며 그 반대의 경우도 마찬가지입니다. 이렇게 하면 관심사를 분리하고 함수 로직에 집중할 수 있습니다.
-
여러 함수에서 종속 항목을 공유하기 위해. 계층을 생성한 후 계정의 여러 함수에 적용할 수 있습니다. 계층이 없으면 각 개별 배포 패키지에 동일한 종속 항목을 포함해야 합니다.
-
Lambda 콘솔 코드 편집기를 사용하기 위해. 코드 편집기는 함수 코드의 부분 업데이트를 빠르게 테스트하는 데 유용한 도구입니다. 그러나 배포 패키지 크기가 너무 큰 경우 편집기를 사용할 수 없습니다. 계층을 사용하면 패키지 크기가 줄어들고 코드 편집기를 사용할 수 있습니다.
Go 또는 Rust에서 Lambda 함수를 사용하는 경우 계층을 사용하지 않는 것이 좋습니다. Go 및 Rust 함수의 경우 컴파일된 함수 코드와 모든 종속성을 포함하는 실행 파일로 함수 코드를 제공합니다. 종속 항목을 계층에 추가하면 함수가 초기화 단계에서 수동으로 추가 어셈블리를 로드해야 하기 때문에 콜드 시간이 늘어날 수 있습니다. Go 및 Rust 함수의 성능을 최적화하려면 배포 패키지와 함께 종속 항목을 포함하세요.
다음 다이어그램에서는 종속 항목을 공유하는 두 함수 간의 중요 아키텍처 차이를 보여줍니다. 하나는 Lambda 계층을 사용하고 다른 하나는 사용하지 않습니다.

함수에 계층을 추가하면 Lambda는 계층 콘텐츠를 함수 실행 환경의 /opt
디렉터리로 추출합니다. 기본적으로 지원되는 모든 Lambda 런타임에는 /opt
디렉터리 내의 특정 디렉터리에 대한 경로가 포함되어 있습니다. 이를 통해 함수가 계층 콘텐츠에 액세스할 수 있습니다. 이러한 특정 경로와 계층을 올바르게 패키징하는 방법에 대한 자세한 내용은 계층 콘텐츠 패키징 섹션을 참조하세요.
함수당 최대 5개의 계층을 포함할 수 있습니다. 또한 .zip 파일 아카이브로 배포된 Lambda 함수에서만 계층을 사용할 수 있습니다. 컨테이너 이미지로 정의된 함수의 경우 컨테이너 이미지를 생성할 때 기본 런타임 및 모든 코드 종속 항목을 패키징합니다. 자세한 내용은 AWS 컴퓨팅 블로그에서 컨테이너 이미지의 Lambda 계층 및 익스텐션 작업
계층 사용 방법
계층을 생성하려면 일반 배포 패키지를 생성하는 방법과 유사하게 종속 항목을 .zip 파일로 패키징합니다. 보다 구체적으로, 계층을 생성하고 사용하는 일반적인 프로세스에는 다음 세 단계가 포함됩니다.
-
먼저 계층 콘텐츠를 패키징합니다. 즉, .zip 파일 아카이브를 생성합니다. 자세한 내용은 계층 콘텐츠 패키징 단원을 참조하십시오.
-
다음으로 Lambda에서 계층을 생성합니다. 자세한 내용은 Lambda에서 계층 생성 및 삭제 단원을 참조하십시오.
-
함수에 계층을 추가합니다. 자세한 내용은 함수에 계층 추가 단원을 참조하십시오.
계층 및 계층 버전
계층 버전은 특정 계층 버전의 변경 불가능한 스냅샷입니다. 새 계층을 생성하면 Lambda는 버전 번호가 1인 새 계층 버전을 생성합니다. 계층에 업데이트를 게시할 때마다 Lambda는 버전 번호를 늘리고 새 계층 버전을 생성합니다.
모든 계층 버전은 고유한 Amazon 리소스 이름(ARN)으로 식별됩니다. 함수에 계층을 추가할 때 사용하려는 정확한 계층 버전을 지정해야 합니다.