Data+

How to deploy Slack-Bot for crawling deploy to aws lambda

by Qerogram

1. 서론

python으로 특정 정보를 크롤링해오고, 크롤링한 정보를 데일리로 slack으로 전달하는 bot을 개발했다. 슬랙 봇은 깃헙(https://github.com/qerogram/Slack-Bot)에 올려놨다. 크롤러만 짜서 붙이면 똑같이 해볼 수 있다.

로컬에서 돌릴 땐 편하게, 돌렸었으나 1일 1회라면 30초 언더의 작업이므로 ec2로 띄우는 것보다는 Lambda로 올리는 게 저렴하다고 판단했다.

 

2. 본론

이를 위해서 크게 두 가지 허들이 존재했다. 첫 번째는 lambda에 외부 라이브러리를 어떻게 인식시키느냐, 두 번째는 lambda에 cron과 같은 기능을 어떻게 주입할 수 있을까.

2-1. 패키징

lambda에는 zip파일 혹은 s3에서 파일을 로드할 수 있는 기능이 있다. 이를 활용하기 위한 사전작업이 존재한다.

lambda를 실행하면 lambda_function.py의 def lambda_handler(event, context)이 먼저 호출되므로, 시작 flow는 모두 lambda_handler 함수 안에 집어넣어 구현하면 된다.

우선은 로컬에서 pip install을 수행해준다. 다만, target 옵션을 주는 것이 일종의 차이다. target 옵션으로 지정한 폴더에 라이브러리를 설치하게 된다.

pip install --target ./package requests

 

이후 package 폴더 안의 내부 파일 및 디렉터리를 압축하고, 같은 경로로 lambda_function.py 파일을 압축해야한다.

"에서 업로드" -> .zip 파일 업로드를 통해 압축한 파일을 업로드를 하면 되고, 10mb가 넘어가면 s3에 업로드하고 연결하는 것을 aws에서 권유하는데, 편한대로 하면 된다.

 

2-2. Lambda에서의 스케쥴링

두 번째는 lambda의 Trigger 기능을 활용한 Scheduling이다.

lambda의 트리거 -> 트리거 추가로 EventBridge(CloudWatch Events)를 설정하고 Rule을 cron() 함수로 설정할 수 있다. 

매 10분마다 실행하려면 cron(10 * ? * * *) 과 같이 설정하면 된다.

 

3. 결론

로그는 CloudWatch에서 보면 된다.

 

4. 참고자료

AWS - Cloudwatch 스케쥴링,  https://docs.aws.amazon.com/lambda/latest/dg/services-cloudwatchevents-expressions.html

AWS - zip 아카이브로 lambda 배포하기, https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/python-package.html

블로그의 정보

Data+

Qerogram

활동하기