관리 메뉴

CS

계층(Layer): Lambda 함수의 종속 항목 추가 본문

AWS

계층(Layer): Lambda 함수의 종속 항목 추가

vcxz 2023. 5. 31. 17:43

 

(python3 기준입니다.)

AWS Lambda에 사용할 코드를 작성할 때 웬만하면 라이브러리를 사용할 것입니다. 그런데 Lambda에서 모든 라이브러리를 지원하지는 않습니다. 따라서 미지원 라이브러리를 사용하는 함수는 실패하게 됩니다. Lambda 함수에 라이브러리를 패키징할 수도 있는 것 같지만, Lambda에서는 따로 '계층(Layer)'이라는 것을 제공하고 있습니다. 계층은 라이브러리 같은 종속 항목을 따로 저장해 둘 수 있는 기능입니다. 자주 쓰는 라이브러리로 계층을 만들어 놓으면 다른 Lambda에도 재사용할 수 있어 편한 것 같습니다.

 

 

사용 방법

콘솔에서 계층이 필요한 Lambda 함수의 코드 탭 ▷ 계층 ▷ [Add a Layer] 버튼을 클릭하여 계층을 선택하면 됩니다.

 

아키텍처는 보통 'x86_64'를 사용하면 될 것 같습니다.

 

계층 소스로 'AWS 계층', '사용자 지정 계층', 'ARN 지정' 세 가지를 선택할 수 있습니다.

- AWS 계층은 AWS에서 제공하는 계층인데, 이름만 보고는 뭐가 포함된 건지 모르겠습니다.

- 사용자 지정 계층은 스스로 생성한 계층을 고를 수 있습니다.

- ARN 지정은 남이 만든 계층을 ARN을 통하여 사용할 수 있습니다.

이 페이지에서 어떤 분이 만드신 여러 python3.9용 계층 ARN을 찾을 수 있습니다. 누가 만드신지는 모르겠지만 감사를 전합니다.

 

 

계층 생성

python3 라이브러리 중 AWS RDS에 접근할 때 주로 쓰는 pymysql을 계층으로 저장하도록 하겠습니다.

우선 라이브러리를 다운받아야 합니다. 저는 pip을 쓰겠습니다.

# 형식
python -m pip install -t [디렉토리명] [라이브러리명]

# pymysql 설치
python3 -m pip install -t python pymysql

pip을 사용할 때 'python -m' 부분 없이 사용해도 되지만,

python 버전에 따라 이후 어떤 일이 일어날지 확실하지 않기 때문에 환경의 python 버전이나 라이브러리 버전을 참고하는 게 좋을 것 같습니다.

 

디렉토리명을 'python'으로 한 이유는 Lambda 계층을 생성할 때

[zip 파일명]
└── python
    └── [라이브러리 폴더들]

이런 식으로 구성해야 하기 때문입니다.

 

따라서

python
├── PyMySQL-1.0.3.dist-info
└── pymysql

이 상태에서 디렉토리를 하나 더 생성하여 python 디렉토리를 넣고 python 디렉토리가 아닌 그 상위 디렉토리를 압축하는 등, 결과적으로 zip을 풀었을 때 python 디렉토리가 나오도록 해야 합니다.

 

그런 zip 파일을 생성하였다면,

콘솔에서 Lambda ▷ 왼쪽 메뉴에서 추가 리소스 ▷ 계층을 선택한 후 계층 생성 버튼을 클릭하여 계층명이나 설명 등을 기재한 후 zip 파일을 업로드하여 계층을 생성하면 됩니다.

 

계층을 생성하였다면 계층 소스에서 사용자 지정 계층을 선택한 후 해당 계층을 선택하면 됩니다.