AWS] Lambda - Selenium Crawler
삼성 소프트웨어 검정에 대한 정보 알림이를 만들어 보았다.
준비
Python 3.6 (아나콘다나 가상환경 추천)
AWS Lambda
Money…
왜 AWS Lambda인가?
crontab
에 대해서 알고 있지만, 적용해봐야지 해놓고서 적용해본적이 없다.
그래서 이번에 ec2에 crontab을 연동하여 진행해볼까 하다가, 현 알림이 기능은 계속 켜 있을 필요가 없었다.
계속 켜 있다는 것은 ‘’자원이 소모된다는 것 -> 비싸다’’ 였다.
하루에 한번만 알려주면 되니 lambda를 이용하자!
Index
Browser
AWS Lambda에는 브라우저가 있는가?
리눅스에는 다 기본적인 브라우저가 있다던데… Do you have?
How to use Terminal?
패키지 설치해야하는데 터미널 어디있지?
브라우저 있는지 확인도 해봐야하고… 할게 많은데 어디있니..?
Chrome Driver
크롬 드라이버를 찾을 수 없다고? 왜?
이눔의 Permission…
“Message: ‘chromedriver’ executable may have wrong permissions.”
1. Browser
없다고 생각하고 진행해야한다.
Chromium을 설치하여 진행하면 된다.
2. How to use Terminal
터미널이 없다…
serverless framework로 진행할 수도 있다.
나와 같은 경우에는 opt 경로를 찾지 못하는 불상사가 발생하긴 하였다.
그래서 framework를 경험만 해보고 돌아왔다.
패키지를 올리기 위해서는
1 | pip install 패키지 -t . |
를 통해서 현재 경로에 패키지를 다운받을 수 있다.
이것을 Layer를 통하거나 직접 올려주면 된다.
3. Chrome Driver
…1시간이면 될 것을 총 시간 하루 걸리게 한…
무엇보다 OS가 Windows고 불필요한 프로그램을 안 깔고 싶어해서 압축 프로그램을 깔지 않았는데…
보내기로 압축하였다가 덕분에 하루(총 이틀)를 날렸다.
서칭을 통해 무수한 사이트들을 보았고 최종적으로 작동한다고 소스를 올려놓은 분을 통해 해결할 수 있었다.
https://github.com/ManivannanMurugavel/selenium-python-aws-lambda
해당 소스를 올리면 해결이 되는데 내가 만든 소스로 압축하여 올리면 해결이 안되었다.
압축을 하면서 바이너리 압축법이 달라서 이뤄지는 문제일까 하여 가상환경에서 linux로 진행해보았고 바로 해결…(허탈)
SW알림이 코드는 github 소스로 제공하고 있다.
https://github.com/TaeJuneJoung/SWexamAlarm
SW 시험 정보를 얻고 싶다면,
한달을 돌려봐야 알겠지만 Lambda도 돈이 드니 깃허브에 있는 Slack 주소를 통해 들어와서 정보를 받는 것도 한가지 방도이다.
CloudWatch Event
rate(Value Unit)
분당 최대 한 번의 빈도
주파수 | 표현식 |
---|---|
5분마다 | rate(5 minutes) |
매 시간 | rate(1 hour) |
7일마다 | rate(7 days) |
cron(Minutes Hours Day-of-month Month Day-of-week Year)
주파수 | 표현식 |
---|---|
매일 10:15 AM(UTC) | cron(15 10 * * ? *) |
월요일부터 금요일까지 오후 6:00 | cron(0 18 ? * MON-FRI *) |
매월 첫날 오전 8:00 | cron(0 8 1 * ? *) |
평일 10분마다 | cron(0/10 * ? * MON-FRI *) |
평일 오전 8:00부터 오후5:55까지 5분마다 | cron(0/5 8-17 ? * MON-FRI *) |
매월 첫째 월요일 오전 9:00 | cron(0 9 ? * 2#1 *) |
리눅스 파일 압축
1 | zip fileName.zip 압축대상 |
파일 압축
- 특정 디렉토리에 모든 파일(./*)를 fileName.zip으로 압축
1 | zip fileName.zip ./* |
파일 및 폴더 압축하기
- 특정 디렉토리에 모든 파일, 하위폴더 압축
1 | zip -r fileName.zip ./* |
파일 압축풀기
1 | unzip fileName.zip 디렉토리경로 |
참고 사이트
https://chromium.woolyss.com/download/ko/#linux
https://sites.google.com/a/chromium.org/chromedriver/downloads
https://beomi.github.io/2018/11/30/using-aws-lambda-layers-on-python3/
https://medium.com/@manivannan_data/python-selenium-on-aws-lambda-b4b9de44b8e1
https://beomi.github.io/gb-crawling/posts/2017-09-28-HowToMakeWebCrawler-Headless-Chrome.html
https://github.com/adieuadieu/serverless-chrome/releases
https://github.com/adieuadieu/serverless-chrome/issues/133
http://robertorocha.info/setting-up-a-selenium-web-scraper-on-aws-lambda-with-python/