Today I Learned
날짜
2025년 1월 20일 월요일
내용
람다에 계층 추가하기
람다는 서버 없이 간단한 함수를 작성하여 실행할 수 있는 기능을 제공한다. 따라서 여기에는 기본 내장 함수들만 제공된다. 만약 람다에서 어디론가 http 요청을 보내기 위해 requests 가 필요하다면 람다에 등록하는 ZIP 파일에 해당 패키지를 추가해주어야 한다.
웹훅 개선에 람다를 이용할 계획이고, 각 람다는 다루는 웹훅 별로 나눠질 예정이다. 주문, 고객, 상품 등 다루는 데이터에 따라 여러 람다를 만들거다. 각 람다를 정의할 때마다 requests 라이브러리를 설치해주는 것은 번거롭다. 이런 일이 반복되면 람다 자체도 용량이 커진다. 모두가 쓰는 공통적인 라이브러리를 추가해주는 기능이 계층(layer)다.
다음 코드를 보자
| |
이 람다를 호출해보면 requests 라는 모듈을 import 할 수 없다고 컴파일 에러가 날 거다. python 3.11을 기준으로 requests 계층을 만들어보자.
mkdir py로 디렉토리 생성 후cd py로 이동python3.11 -m venv venv로 가상환경을 만든다.cd venv로 들어가source ./bin/activate를 입력해 가상환경 활성화pip install requests로 패키지 설치cd lib/python3.11/site-packages로 패키지 설치된 디렉토리로 이동mkdir ../python명령어로 상위에 파이썬 폴더 생성- 다음을 입력해 패키지들을 압축하여 파이썬 폴더에 저장
| |
- AWS Lambda ⇒ 계층 ⇒ 계층생성에서 해당 파일을 업로드 한 후 생성
- 사용할 람다 함수로 이동 ⇒ 코드에서 아래로 내려 계층 추가
혹여나 오류가 발생할 경우 확인해야 할 것
- ‘딱 필요한 패키지만’ 압축하지 않기
- 각 패키지들은 종속되어 있는 경우가 있다. 예를 들어, requests 패키지는 urlib 패키지가 없으면 작동하지 않는다. 따라서 site-packages 내에 있는 모두 압축에 포함해야 한다.
- python 폴더안에 넣기
- 굳이 상위 폴더에 python 폴더를 만들어 준 이유는 그래야만 계층이 제대로 작동하기 때문이다. 패키지들만 압축하면 계층이 작동하지 않는다.
- 람다함수와 계층의 런타임 확인
- 람다함수와 계층이 정의된 런타임은 동일해야 한다. 호환 아키텍처가 x86_64인지 arm64인지, 언어 버전은 동일한지 확인이 반드시 필요하다.
이 설정만 해주면 내부적으로 별다른 조치 없이 import requests 가 가능하다.
회고
알면 알수록 무궁무진한 AWS