레이어(layer)로 Lambda 의존성 관리
레이어(layer)로 Lambda 의존성 관리
Lambda 레이어는 보조 코드나 데이터를 담은 .zip 파일 아카이브예요. 레이어는 보통 라이브러리 의존성, 커스텀 런타임, 또는 구성 파일을 담고 있죠.
레이어를 사용할 이유는 여러 가지가 있어요:
- 배포 패키지 크기 줄이기. 함수의 모든 의존성을 함수 코드와 함께 배포 패키지에 넣는 대신 레이어에 넣으세요. 이렇게 하면 배포 패키지가 작고 정돈되게 유지돼요.
- 핵심 함수 로직을 의존성과 분리하기. 레이어를 사용하면 함수 코드와 독립적으로 함수 의존성을 업데이트할 수 있고, 그 반대도 가능해요. 이는 관심사 분리를 촉진하고 함수 로직에 집중하게 해줘요.
- 여러 함수에 걸쳐 의존성 공유하기. 레이어를 만든 뒤에는 계정의 모든 함수에 적용할 수 있어요. 레이어가 없으면 각 개별 배포 패키지에 같은 의존성을 포함해야 해요.
- Lambda 콘솔 코드 편집기 사용하기. 코드 편집기는 사소한 함수 코드 변경을 빠르게 테스트하는 유용한 도구예요. 하지만 배포 패키지 크기가 너무 크면 편집기를 사용할 수 없죠. 레이어를 사용하면 패키지 크기가 줄어들고 코드 편집기를 쓸 수 있게 됩니다.
- 내장 SDK 버전 고정하기. 내장 SDK는 AWS가 새 서비스와 기능을 출시하면서 예고 없이 바뀔 수 있어요. 필요한 특정 버전으로 Lambda 레이어를 만들어 SDK 버전을 고정할 수 있어요. 그러면 서비스에 내장된 버전이 바뀌어도 함수는 항상 레이어의 버전을 사용해요.
Go나 Rust로 Lambda 함수를 작업한다면 레이어 사용을 권장하지 않아요. Go와 Rust 함수는 컴파일된 함수 코드와 모든 의존성을 포함하는 실행 파일로 함수 코드를 제공하죠. 의존성을 레이어에 넣으면 함수가 초기화 단계에서 추가 어셈블리를 수동으로 로드해야 해서 콜드 스타트 시간이 늘어날 수 있어요. Go·Rust 함수의 최적 성능을 위해 의존성을 배포 패키지와 함께 포함하세요.
다음 다이어그램은 의존성을 공유하는 두 함수의 높은 수준의 아키텍처 차이를 보여줘요. 하나는 Lambda 레이어를 사용하고 다른 하나는 그렇지 않아요.

함수에 레이어를 추가하면 Lambda는 레이어 내용을 함수 실행 환경의 /opt 디렉토리에 추출해요. 네이티브로 지원되는 모든 Lambda 런타임은 /opt 디렉토리 내 특정 디렉토리 경로를 포함해요. 이 덕분에 함수가 레이어 내용에 접근할 수 있죠. 이러한 특정 경로와 레이어를 올바르게 패키징하는 방법에 대한 자세한 내용은 레이어 내용 패키징을 참고하세요.
함수당 최대 5개의 레이어를 포함할 수 있어요. 또한 레이어는 .zip 파일 아카이브로 배포된 Lambda 함수에서만 사용할 수 있어요. 컨테이너 이미지로 정의된 함수의 경우 컨테이너 이미지를 만들 때 선호하는 런타임과 모든 코드 의존성을 패키징하세요. 자세한 내용은 AWS Compute Blog의 컨테이너 이미지에서 Lambda 레이어 및 확장 작업을 참고하세요.
본문
Topics(주제)
- 레이어 사용 방법
- 레이어 및 레이어 버전
- 레이어 내용 패키징
- Lambda에서 레이어 생성 및 삭제
- 함수에 레이어 추가
- 레이어와 AWS CloudFormation 사용
- 레이어와 AWS SAM 사용
레이어 사용 방법
레이어를 만들려면 일반 배포 패키지를 만드는 것과 유사하게 의존성을 .zip 파일로 패키징하세요. 더 구체적으로, 레이어 생성·사용의 일반적인 과정은 다음 세 단계로 구성돼요:
- 먼저, 레이어 내용을 패키징합니다. .zip 파일 아카이브를 만드는 것이죠. 자세한 내용은 레이어 내용 패키징을 참고하세요.
- 다음, Lambda에서 레이어를 만듭니다. 자세한 내용은 Lambda에서 레이어 생성 및 삭제를 참고하세요.
- 함수(들)에 레이어를 추가합니다. 자세한 내용은 함수에 레이어 추가를 참고하세요.
레이어 및 레이어 버전
레이어 버전은 레이어의 특정 버전에 대한 변경 불가능한 스냅샷이에요. 새 레이어를 만들면 Lambda가 버전 번호 1로 새 레이어 버전을 만들어요. 레이어 업데이트를 게시할 때마다 Lambda는 버전 번호를 높이고 새 레이어 버전을 만들어요.
모든 레이어 버전은 고유한 Amazon Resource Name(ARN)으로 식별돼요. 함수에 레이어를 추가할 때는 사용할 정확한 레이어 버전을 지정해야 해요(예: arn:aws:lambda:us-east-1:123456789012:layer:my-layer:{{1}}).
더 알아보기 (Learn more)
- 레이어 사용 이유, 생성 3단계, 레이어 버전과 ARN, 패키징·추가·IaC 템플릿 주제를 이어서 살펴보세요.