만약 내가 람다로 크롤링을 진행하는 함수를 작성하여 실행시켜야 한다고 가정해보자, 처음에 해야할 일은 너무나도 당연하게 가상환경 생성 -> 필요한 패키지 설치이다. 하지만 람다는 이미 서버가 돌아가고있고, 돌아가고있는 내 로컬에 서버를 돌리는게 아니니 당연히 람다에서는 셀레늄 같은 패키지가 깔려있지 않다. 그럼 람다 함수에서 필요한 패키지는 어떻게 쓸 수 있을까?
pip install <"PACKAGE_NAME"> -t .
명령을 실행시키면 해당 폴더의 하위 폴더에 패키지들이 주르륵 깔린다.
이 주르륵 깔린 패키지의 파일들을 선택하여 하나의 zip파일로 묶어준다.
다음 사진과 같이 .zip 파일 업로드를 선택하여 묶어준 zip 파일을 선택하여 업로드한다.
업로드가 완료되면 파일 목록에 패키지 파일과 폴더들이 보이고, 그 이후에는 기존에 쓰던것 처럼 import를 통해 패키지를 사용하는것이 가능하다.
첫번째 방법은 다음과 같은 상황에서 문제를 겪는다.
Layer에 업로드 하는 방법은 방법은 앞에서 언급한 문제들 중 여러 함수에서 공통으로 임포트해야할 때의 문제를 없애주며, 용량이 너무 커지지 않는다면 여러종류의 패키지를 올려야하는 문제도 어느정도 해결해준다. 용량에 제한 없이 패키지를 업로드하여 관리하고싶다면 S3을 사용해야 하는데, 이부분은 필자도 시도해보지 않은 부분이라, 추후에 시도하여 구현한다면 포스팅하겠다.
이번에도 pip를 이용해 패키지를 폴더에 설치해준다.
동일하게 압축하되 압축파일 아래에 python이라는 폴더를 만들어 압축해준다.
람다함수 밑의 Layers를 클릭한다.
import selenium
import requests
from mysql.connector import Errors
이와 같이 설치한 패키지들을 임포트하여 사용하는것이 가능하다.