[TIL] AWS Lambda + Event Bridge 처리 w/ 휴가봇, CloudWatch
배경
전사 공통 서비스로 람다 함수가 주기적으로 실행되면서 휴가자들의 정보를 업데이트하는 서비스를 인계받았다. 에러가 나서 살펴보니 퇴사자의 Google Cloud Platform(GCP) 계정이 만료되어 해당 계정에서 만들어둔 앱의 token 값이 만료된 것이였다. 사내 공통 계정에 세팅하고 토큰 값 등을 받아서 람다를 업데이트했다. 그 과정 중에 배웠던 점들을 기록한다.
람다
람다는 필요할 때만 스크립트 코드 등 내가 원하는 기능을 작동 시킬 수 있다. 서버처럼 항상 유지될 필요가 없고, 사용 시에만 작동하므로 비용도 매우 저렴하다. 노드나 파이썬 등으로 작성 가능하다.
소스 코드를 볼 수 있고, 업로드할 수 있다. 그냥 로컬에서 .zip 파일 형태로 업로드할 때는 용량 제한이 10 MB까지이다. S3 버킷을 이용해서 .zip 파일을 업로드하고, 해당 파일의 URI 정보를 입력하면 10 MB 이상도 업로드가 가능하다. 그리고 변경된 부분만 업로드하면 되는게 아니라서 코드 전체를 업로드 해야하므로 S3 방식을 사용해야하는 경우가 많다. 설치된 node 라이브러리들을 모아둔 node_modules 폴더도 모두 함께 업로드해야한다.
node 프로젝트의 경우 index.js 파일을 시작점으로 둔다. 따라서 index.js에서 JSON 방식으로 인자를 받도록 하면, 해당 함수가 조건에 따라 실행되는 방식이다. Test 버튼을 누르고, 전달할 JSON을 입력한 뒤 invoke 버튼을 누르면 람다를 호출해볼 수 있다.
람다구성
구성 탭에 접근하면 람다를 구성하는 여러 정보들을 살펴볼 수 있다. 그 중에 환경변수가 있는데, 애플리케이션을 AWS 환경에서 실행할 때 참고하는 Secret Manager와 같은 역할을 한다고 보면 된다. 여기서 환경 변수들을 설정하고 업데이트할 수 있다. 환경 변수 값을 업데이트하면 람다가 자동으로 재배포된다.
그리고 node에서 console.log로 찍는 로그 내용들은 Cloud Watch에서 확인할 수 있다. 로그 그룹에 들어가서 확인해보면 로그가 나온다. 아마 세팅을 해야할 수도 있을 것 같다.
Event Bridge
Event Bridge는 특정 주기마다, 또는 Cron Expression을 활용하여 트리거 되게 할 수 있다. 여기서 대상 설정 탭에 들어가서 작성해둔 lambda를 연결하면 설정한 일정에 따라 람다가 호출되는 방식이다. 휴가 시스템은 10분마다 인사 정보 시스템 및 구글 캘린더에서 사람들의 휴가 정보를 긁어오고, 두 정보가 일치하는 것에 대해 Slack에 업데이트 해주는 방식이다. 각 휴가자들의 이모지들을 휴가 상태로 변환하거나 원본으로 복구한다. 그리고 아침, 저녁 시각마다 오늘, 내일 휴가자들의 정보들을 취합하여 slack에 쏴준다.
갑작스레 시스템을 맡고 장애가 발생했지만 복습도 할 수 있고 재밌었던 것 같다.