Lambda 로 구성된 프로젝트를 배포하다보면 Lambda의 패포 용량 제한을 넘어 배포에 실패할때가 존재한다
- AWS Lambda Error: Unzipped size must be smaller than 262144000 bytes.
AWS Lambda Error: Unzipped size must be smaller than * bytes.

이와 같은 문구는 개발자에게 짜증을 안겨다 준다.
자 여기서 사용하지 않는 라이브러리 빼고 올리는건 누구나 다 생각하고 시도했을 방법이니 생략하고
layer(레이어)를 사용하여 올리는 방법을 간략히 소개하겠다.
일단 레이어란 무엇인가! 는 나중에 자세히 알아보고 오늘은 간략한 설명, 실무용 배포를 안내를 하도록 하겠다.
lambda의 계층(layer)의 설명은 AWS 가이드로 대신.
https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/configuration-layers.html
Lambda 계층 만들기 및 공유 - AWS Lambda
이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.
docs.aws.amazon.com
Lambda 계층은 Lambda 함수와 함께 사용할 수 있는 라이브러리 및 기타 종속성을
패키징하는 편리한 방법을 제공합니다. 계층을 사용하면 업로드된 배포 아카이브의 크기가 줄어들고
코드를 더 빠르게 배포할 수 있습니다.
계층은 추가 코드 또는 데이터를 포함할 수 있는 .zip 파일 아카이브입니다.
계층에는 라이브러리, 사용자 정의 런타임, 데이터 또는 구성 파일이 포함될 수 있습니다.
계층은 코드 공유 및 책임 분리를 촉진하므로 비즈니스 로직 작성을 더 빠르게 반복 할 수 있습니다.
대충 Layers는 람다 함수에서 사용하는 라이브러리 및 기타 종속성 패키징을 계층화 시켜 Lambda에 연결, 보다 빠른 배포 및 패키징을 공용으로 사용 할 수 있도록 하는 것이다.
Layers serveless.ylm 설정
- runtime : python3.9
- lib path : project/vendor/vendor
service: slsSampleLayers
provider:
name: aws
runtime: python3.9
profile: 프로필 # The default profile to use with this service
role: 역할
stage: ${opt:stage}
region: ${opt:region}
environment:
PYTHONPATH: ":/var/task/vendor:./vendor:/opt/vendor"
TZ: Asia/Seoul
layers:
SampleLayers:
path: vendor
name: SampleLayers
description: Vendor Packages Layer
compatibleRuntimes:
- python3.9
package:
include:
- ./**
package:
individually: true
exclude:
- '**'
- '!helper/**'
- '!vendor/**'
- '**.pyc'
- '**/**.pyc' # tv
- '**/**/**.pyc' # vendor
폴더 구조는 다음과 같을 것이다
slsSampleLayers 폴더 밑에 라이브러리 목록이 써있는 requirements.txt 가 존재하며
이 파일을 통해 라이브러리를 설치, 해당 폴더를 압축하여 올라가는 것이다.
참고할 명령어는 다음과 같다.
pip3 install -t vendor/vendor -r requirements.txt
여기서 vendor 폴더 밑에 vendor 안에 설치하는 이유는 해당 layer는 lambda 의 실행 환경의 opt밑에 압축 풀리는데 1개 이상의 layer를 사용할 경우 해당 경로들이 겹치기에 vedor폴더 밑에 vender에 라이브러리를 설치하면 압축 해제시 opt/vendor 폴더로 풀리기 때문에
라이브러리를 분리해 놓을 수 있다.
slsSampleLayers
- requirements.txt
- serveless.yml
- vendor (폴더)
- vendor/vendor/ (하위폴더)
- vendor/vendor/* (라이브러리들)
########
- vendor/numpy_vendor (추가로 layer를 만든다 가정 한다면..)
########
자 레이어를 배포하자
npx sls deploy -s layers -r us-west-1
npx sls deploy -s {stage} -r {region}
자 배포된 layers를 확인하기 위해 AWS 콘솔에 접속하여 Lambda 서비스로 이동한다.
계층 메뉴에서 배포한 SampleLayers를 확인해보자 (아.. layer로 했어야되는데 s 왜붙였지..)
잘 배포된 레이어를 확인할 수 있다. 궁금하다면 다운받아 압출을 풀어보자.
다음 글에서는 이 Layer를 Lambda 에 연결하는 방법을 설명하도록 하겠다.
'AWS' 카테고리의 다른 글
Amazon S3 및 주요 기능 이해 (0) | 2023.04.07 |
---|---|
Amazon EC2 소개 및 기능 설명 (0) | 2023.04.07 |
AWS AMI 리전 및 타 계정 공유하기, ec2 이미지 공유 (0) | 2021.06.17 |
API Gateway 사용자 도메인 생성 (0) | 2021.02.15 |
ECS - Create scheduled task / 예약된 작업 생성하기 (0) | 2021.01.04 |