AWS Lambda에 Python Slack Chatbot을 통해서 미세먼지 대기정보 알림이 만들기

이미지
AWS Lambda에 Python Slack Chatbot을 통해서 미세먼지 대기정보 알림이 만들기 Lambda를 이용해서 Slack용 Chatbot을 만들어 보았다.   개발언어로는 Python을 사용했다.
Lambda에는 Python 2.7만 지원되어서 작업하면서도 불편한 점이 많았다.
특히 챗봇이다보니 유니코드(한글) 처리가 필수여서다.
(Node.JS는 6.1까지 지원해주는데... Python도 3을 빨리 지원해주면 좋겠다.) 예제로 만들어본 챗봇은 서울시 종로구의 대기상태를 알려주는 기능을 제공한다. 매일 아침 5시 20분(내 기상시간)과 오후 12시 20분(점심 먹으러 가기 전에 지하식당에서 먹을지 밖에 나가서 먹을지 생각하기 위해서)에 알려주도록 설정하였다. 솔직히 오후 12시에 굳이 20분을 한 이유는 CloudWatch의 event 생성을 편하게 하기위해서이다. 솔직히 12시 40분에 알려주는게 더 좋을것 같긴하지만, 그것 때문에 event를 추가로 생성하기엔 귀찮기도 하고, 관리포인트가 두군데가 생기기 때문에 그냥 20분으로 통일했다. 챗봇 구현을 위한 Lambda를 2개로 나누었다.Slack에 메세지를 전달해주는 Lambda크롤링하여 대기상태 데이터를 뽑아내고 메세지를 만드는 Lambda 크롤링 Lambda는 SNS를 통해서 메세지 전달 Lambda를 호출한다.
크롤링 Lambda는 CloudWatch의 event를 통해서 호출된다. 그 과정을 그림으로 표현하면 아래와 같다. 이전에 표스팅한 내용에 있는 것에 대해서는 설명을 생략하겠다.
해당 내용에 대해서는 아래 링크를 참고하면 관련 내용이 있다.Python 코드를 Lambda에 배포하는 방법 : Lambda Python PackagingLambda -> SNS -> Lambda 로 호출하는 방법 : Lambda에서 Lambda를 호출하는 방법1. Slack에 메세지 보내기 먼저 Slack Bot을 만들기 위해서는 API Token이 필요하다.
자세한 생성방법은 검색하면 많이 나오니깐 …

AWS : Lambda에서 Lambda를 호출하는 방법

Lambda에서 Lambda를 호출하는 방법 AWS Lambda에서 Lambda를 호출하는 방법들에 대해서 소개하겠다.언제 Lambda에서 Lambda를 호출하면 편리할까 ? 첫째, 배치 성격의 작업을 여러 개로 나누어 병렬로 실행할 경우를 생각할 수 있다. Lambda 내에서 배치작업을 모두 다 실행시키도록 작성 할 수도 있겠지만, 첫번째 Lambda에서 작업 전 필요한 준비작업을 한 후 이것을 다른 Lambda로 전달 할 수 있다. 그 과정에서 다음 Lambda 1개에게 전달할게 아니라 비동기 invoke로 한 번에 여러 개의 Lambda를 생성하여 작업하면 전체 실행 시간을 줄일수 있을 것이다. (하지만 동시에 여러 Lambda가 실행될 경우 계정당 Lambda Limit 내에서 실행되도록 조정은 해야 한다.) 이 경우 AWS Step Functions 를 이용할 수도 있다. Step Functions를 사용하려고 살펴봤는데 아직까진 사용 사례도 없고, 그 과정에서의 비용도 있고, API Gateway와의 연동에 대해서도 확신이 없다. API Gateway에서 Step Function 호출을 지원한다는 글이 2017.02.15 에 올라오긴 했다. 둘째, 빠른 API 응답을 위해서 사용할 수 있다. Lambda를 만들었을 때의 원래 의도는 AWS 서비스 상에서의 event성 호출들에 대한 처리를 전적으로 할 목적이었다고 한다. 하지만 API Gateway가 나온 이후로 Lambda를 이용하여 Serverless API를 구축하는게 가능하다. API를 호출한 사용자 입장에서 생각해 본다면 필요한 데이터를 빨리 응답해 주고, 나머지 작업들은 그 뒤에 따로 처리를 하는 방법이 있으면 좋을 것이다. 예를 들어서 사용자가 접속시 호출해야하는 API가 있다고 가정해보자. 이 API에서는 사용자가 이전에 어떤 작업을 하고 있었는지를 조회해서 알려줘야하며, 현재 시점의 접속 상태(시간, 위치, 접속한 기기정보 등)를 기록해야 한다면, 먼저 사용자에게 전달해야할 정보를…