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 *)

https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/tutorial-scheduled-events-schedule-expressions.html

리눅스 파일 압축

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://medium.com/hackernoon/running-selenium-and-headless-chrome-on-aws-lambda-layers-python-3-6-bd810503c6c3

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/