AWS Lambda에서 Python 패키지 용량 초과 문제 해결 방법 공유
회사에서 간단한 크롤링 함수를 Lambda로 옮기는 작업을 했다. 문제는 requests와 bs4를 포함하니 압축해도 50MB를 훌쩍 넘어서 배포가 안 되는 것.
이리저리 찾아보다가 Lambda Layer를 쓰는 것보다 차라리 의존성을 최소화하는 게 낫겠다는 결론이 났다. urllib.request만으로 HTTP 요청을 구현하고, HTML 파싱은 정규식으로 때우니 1MB도 안 됐다. 물론 코드는 좀 지저분해졌지만 운영 부담은 확실히 줄었다.
혹시 같은 문제로 고생하는 분들은 쓸데없는 라이브러리 대신 표준 라이브러리로 충분한 기능인지 먼저 점검해보길 추천한다.
9 개의 답변
출처는 어디임?
ㅇㅇ 표준 라이브러리부터 찾는 게 맞지
오 이건 몰랐네
나도 비슷한 경험 있는데 Lambda Layer로 해결했음. 계층 만들 때 파이썬 패키지 설치하고 zip으로 압축하면 되고, 50MB는 해제 기준 250MB까지 가능하더라. 굳이 정규식까지 갈 필요는 없었을 듯
전에 lambda에서 파이썬 패키지 때문에 삽질했었는데, 결국 Docker 이미지로 배포했어요. 패키지 제한 없이 쓰니까 훨씬 편하더군요. 공유 감사합니다.
정규식으로 HTML 파싱하면 나중에 사이트 구조 바뀔 때마다 지옥임. 유지보수 생각하면 차라리 Layer나 컨테이너 이미지를 쓰는 게 낫지 않음?
음 근데 크롤링을 정규식으로? 사이트가 좀 단순하면 몰라도 복잡하면 정말 힘들어진다. 차라리 beautifulsoup만 layer에 올리면 용량 별로 안 되지 않나?
어차피 Lambda도 이제 컨테이너 지원하니까 패키지 크기 문제는 그렇게 걱정 안 해도 됩니다. 특히 크롤링처럼 외부 라이브러리 의존성이 크면 표준 라이브러리로 욱여넣는 것보다 그냥 컨테이너가 답이에요. 그래도 urllib로 줄인 건 신선하네요.
ㅋㅋ 나는 반대로 layer로 올렸다가 권한 문제로 개고생