AWS CloudWatch에서 알람이 울리면 그 내용을 관리자 이메일로 보내고 추가로 슬랙(slack)의 특정 채널에 메세지를 작성하는 내용을 예전에 정리한 적이 있습니다. 부족한 부분이 있더라고요. 그래서 다시 정리해봅니다. 




\


1. 준비하기


 - 순서는 상관없습니다.

 - Slack WebHook URL 생성 

    > https://<your-team-domain>.slack.com/services/new 에 접속해서 'incomming webhooks' 검색합니다.

    > Add Configuration을 통해서 Webhook URL을 하나 생성합니다. 잘 가지고 있다가 Lambda에서 사용합니다.

 










2. CloudWatch Alarm 생성


 - 여러 Metric 중에서 원하는 것을 생성하고 Define Alarm 에서 Actions에 Send notification to 설정을 합니다.

 - Send notification to에는 SNS topic을 선택하면 되는데 기존에 생성된 것이 없는 경우에는 New list를 통해서 생성합니다.



 - 생성된 SNS topic은 AWS SNS(Simple Notification Service)에서 확인이 가능합니다. 

 - Lambda 설정이 끝나면 해당 Topic에 Subscribe로 추가해야 합니다. (아래에서 다시 다룸)









3. Lambda 함수 생성 및 설정


 - Lambda 함수를 하나 생성합니다. Blueprints 중에서 적절한 것을 선택하면 됩니다. slack으로 검색하면 편리하게 선택 가능합니다.



 - 선택해서 넘어가면 몇 가지 설정이 있는데요. Role은 없으면 하나 생성하세요. IAM에서 직접 생성하시거나 함수 생성하는 과정에서 Custom으로 생성하시면 됩니다. SNS topic은 CloudWatch에서 알람 생성할 때 생성한 SNS topic을 선택하면됩니다.



 - 쭉 내려보면 코드가 있고 Environment variables가 있습니다. 코드는 수정할 필요 없고 변수만 채워주면 됩니다. slackChannel은  webhook url 만들 때 선택한 채널 이름을 작성하면 됩니다. kmsEncryptedHookUrl은 webhook url을 암호화해서 입력하면 됩니다. 




 - kmsEncryptedHookUrl 생성은 이전 포스팅으로 대신합니다.  

   2017/03/01 - Lambda로 Slack에 메세지 작성하기를 위한 key 생성 및 URL 암호화



 - 생성한 lambda 함수를 테스트해보면 module initialization error가 나올 것으로 예상합니다. 이유는 kmsEncryptedHookUrl이 암호화되어 있는 것인데 이것을 decrypt 할 수 없기 때문입니다. IAM에 가서 위 작업을 위해 추가한 Role을 수정해야 합니다. 

   > Role의 policy의 oneClick_lambda_basic_execution은 생성하면서 추가된 policy이고 AWSLambdaKMSExecutionRole은 방금 추가한 policy입니다. policy의 Action은 kms:Decrypt 하나 입니다. policy가 없다면 kms:Decrypt를 추가해서 만드세요. 있으면 가져다 쓰시고요.




 - Lambda의 triggers 최종은 아래와 같습니다.







4. SNS topic 검토 및 테스트


 - SNS topic에 subscriber로 lambda가 있는지 확인해주세요. 없으면 추가하시고요.




 - 테스트는 알람을 발생시키면 됩니다. CloudWatch에서 생성한 Alarm을 modify로 들어가서 Alarm이 울리도록 설정을 변경합니다.


 - 아래와 같이 메세지가 옵니다.











+ Recent posts