티스토리 뷰
AWS 람다에서는 파이썬 기본적인 모듈 외에 pip으로 설치하는 외부 모듈은 지원하지 않는다
따라서 외부 모듈을 import 하려면 람다 Layer(계층)에 따로 등록해줘야 한다
계층에 모듈을 등록하려면 모듈 파일을 따로 설치한 폴더를 압축해서 zip 파일로 만든 뒤, 얘를 업로드해야 한다
Layer에 추가할 파이썬 외부 모듈 zip 파일 만드는 법
1. cmd를 켜서 다음을 입력
만들어진 python파일은 C:\사용자\user에 가보면 있다
-t 명령어는 현재 디렉터리에 pip install 하겠다는 뜻이다
반드시 주의해야 할 것!
람다 Layer에 올릴 zip 파일 구조는 아무 이름.zip -> python -> 모듈 폴더들 이 구조를 무조건적으로 지켜야 인식한다
그리고 반드시 폴더명을 python으로 지어야 한다(안 그러면 인식 못한다)
훗날 다시 사용할지도 모르니까 만들어놓은 모듈 zip 몇 개를 공유한다
텔레그램 봇 관련 모듈 (pip install telegram이 아닌 pip install python-telegram-bot 명령어로 해야 한다)
beautifulSoup4와 datetime 두 개를 동시에 압축해놨다
selenium 필요 없이 requests 모듈 만으로도 HTTP 요청이 가능할 수도 있으니 해당 모듈도 공유한다
크롤링을 위해서 selenium 모듈도 필요한데, 문제는 크롬 드라이버를 람다에 넣어서 얘가 인식시킬 방법이 애매하다는 거다
그냥 selenium을 동일한 방법으로 가져오면 다음과 같은 오류가 나온다
service /opt/python/bin/chromedriver unexpectedly exited. status code was: 127\n
크롬 드라이버를 가져오지 못한다는 뜻이다
https://github.com/inahjeon/AWS-LAMBDA-LAYER-Selenium
GitHub - inahjeon/AWS-LAMBDA-LAYER-Selenium
Contribute to inahjeon/AWS-LAMBDA-LAYER-Selenium development by creating an account on GitHub.
github.com
친절하게도 누군가 깃허브에 해결 방법을 올려놓았다
SELENIUM_LAYER.zip을 다운로드하여서 Layer에 추가하면 된다
그리고 깃허브에 적힌 대로 웹 드라이버를 가져와서 사용하면 된다
주의할 점
AWS 람다 함수 런타임을 설정할 때 무조건 python3.6 버전으로 해야 한다
(깃허브 주인이 이 버전에 맞춰서 selenium starter를 만들어 놓았다)
그래서 3.7, 3.8, 3.9로 하면 인식을 못해서 오류가 난다
계층 생성/추가하기
람다 대시보드 - 계층 - [Add a layer]을 누른 뒤, 계층을 누른다 (먼저 계층을 추가해줘야 한다)
호환 런타임에 파이썬 버전들을 다 체크해주자
그렇게 람다에 계층을 생성하고 이제 다시 [Add a layer]를 눌러서 계층을 추가해준다
이러면 람다에서 import 해서 쓸 수 있다
import가 잘 되는지 테스트하려면 import만 하고 Deploy 한 다음에 Test를 눌러서 오류가 뜨는지 확인하면 된다