AWS lambda에서 Layer구성(맥 실리콘-M1에서)
간단한 API서버는 EC2로 만드는 것보다, Serverless로 하는게 간편하고 좋다.
AWS Lambda를 사용해서, gpt-4o-mini와 소통하는 api를 만들었는데... 계속 Layer연결에서 에러가 나서... 남겨놓는다.
(나의 4시간ㅜㅜ)
우선 lambda로 serverless를 구현하는데는 총 3가지 작업이 있다.
1. 람다 함수 코딩
2. Layer연결(python 개발시 설치되는 라이브러리들을 lambda로 가져오는 작업. layer없이 import openai하면, 해당 모듈이 없다고 뜬다)
3. api gateway연결
위 3단계의 내용은 https://issul.tistory.com/438 요글에 코드와 함께 잘 나와있다.
오늘은 실리콘 맥에서(m1부터~) Layer구성하는데 시행착오를 남겨 놓는다.
layer는 가상환경의 lib/python3.x/site-packages/ 폴더 밑에 있는 모든 파일 및 폴더를
압축이 풀었을때
python/모든파일
또는
python/lib/python3.x/site-packages/모든파일
이렇게 나오는 zip파일로 저장해서, aws layer설정에 업로드 하면된다.
문제는 실리콘 맥을 사용할때 발생한다.
위와 같은 정상적인 방법으로 아무리 하여도, 폴더에 있는 모듈을 찾을수 없단다....
도커 빌드할때와 비슷한 상황이다. 사용하는 아키텍처에 의해, 인식의 차이를 보이는것.
(*docker build(인텔맥) > docker buildx(실리콘맥))
구글과 gpt, claude는 docker로 zip파일을 제작하는 방법을 알려주었다.
하지만, 내가 문제인것인지... 여러 방법으로 zip파일을 제작했지만 실패
(우분투, amazonlinux 등등)
그리고 발견한 간단한 방법
# 현재 가상환경에 설치된 패키지 리스트
pip freeze > requirements.txt
pip install -r requirements.txt --platform manylinux2014_x86_64 --target ./python --only-binary=:all:
pip에서 친절하게 설치할 아키텍쳐를 설정할수 있다.
그리고, 해당 모듈이 설치될 폴더까지도...
그렇게 3시간 헤매던 문제를 해결했다.
[뒤에 내용 첨언]
--only-binary=:all:
패키지를 바이너리 형식으로만 설치하라는 의미입니다. 소스 배포본 대신 바이너리 배포본만을 설치하게 됩니다. :all: 은 모든 패키지에 대해 이 규칙을 적용
- 바이너리 배포본 (Binary Distribution): 이미 컴파일된 형태로 제공되는 패키지입니다. 이 배포본은 설치가 빠르고, 컴파일 과정이 필요 없기 때문에 사용하기 쉽습니다.
- 소스 배포본 (Source Distribution): 소스 코드 형태로 제공되는 패키지입니다. 이 배포본은 사용자의 시스템에서 직접 컴파일되어 설치됩니다. 이 과정은 종종 더 오래 걸리며, 시스템에 필요한 빌드 도구가 설치되어 있어야 합니다.