Infra/Aws

[Infra] AWS SNS+Chatbot로 슬랙 알림받기(Feat. AWS Budgets)

kth990303 2023. 5. 22. 17:09
반응형

해당 글에서는 AWS SNS, Chatbot를 이용하여 슬랙에 알림을 보내는 방법에 대해 다룹니다.

AWS Budgets의 구체적인 설정 방법은 생략합니다.


사이드 프로젝트 `모카콩`의 Wiki에 작성한 글에 해당된다.


 

해당 프로젝트 github: https://github.com/mocacong/Mocacong-Backend

 

GitHub - mocacong/Mocacong-Backend: 모카콩 백엔드

모카콩 백엔드. Contribute to mocacong/Mocacong-Backend development by creating an account on GitHub.

github.com


들어가며

모카콩에는 특정 트리거 조건 시에 보내주는 슬랙 알림이 여럿 존재합니다. 이번에는 그 중, 두 가지 알림에 대한 설정 과정을 작성해보려 합니다. 두 가지 알림은 아래와 같습니다.

 

  1. prod EC2 CPU utilization이 60%를 초과하는 경우
  2. 설정한 예산을 초과하는 경우

 

AWS의 SNS로 특정 주제를 설정하고, Chatbot을 이용하여 Slack에 알림을 보내게 손쉽게 설정할 수 있습니다. 여기에 첫 번째의 경우는 Amazon CloudWatch가 포함되며, 두 번째의 경우는 AWS Budgets이 포함됩니다. Amazon Cloudwatch와 AWS Budgets를 다루는 방법은 여기서는 생략하겠습니다. (단, AWS Budgets 관련 알림을 보내기 위한 SNS 주제 access role 수정 부분에 대해서는 소개할 예정입니다.)


AWS Simple Notification Service(SNS), Chatbot 설정

1. AWS SNS의 주제에 들어가서 주제를 생성합니다.

AWS SNS - 주제 - 주제 생성 클릭

 

2. 표준을 선택 후, 주제 이름을 작명하고 맨 밑의 주제 생성을 클릭합니다.

주제 생성

중간에 있는 `암호화`, `액세스 정책` 등은 추후 수정이 가능합니다.

보통의 경우 주제 이름을 지어주는 것만으로 충분합니다.

 

3. AWS Chatbot에 접속하여 `새 클라이언트 구성`을 클릭하고 Slack을 선택해줍니다.

AWS Chatbot - 구성된 클라이언트 - 새 클라이언트 구성 클릭

slack을 선택하고 슬랙 workspace를 설정하면 아래와 같은 창이 뜹니다.

AWS가 슬랙 워크스페이스에서 가지는 권한

aws에서 슬랙으로 메시지를 보내도록 하고 싶은 경우이므로, 권한을 허용해주도록 합니다.

 

 

4. 생성한 클라이언트 구성에서 새로운 채널을 생성합니다.

채널 구성

알림 구성 이름을 잘 작명해주시고, 알림을 보낼 슬랙 채널을 설정해줍시다.

 

퍼블릭 채널일 경우 AWS에서 자체적으로 워크스페이스의 채널 목록을 보여줍니다. 하지만 프라이빗일 경우, 해당 채널의 채널ID를 입력해주어야 합니다. 채널ID는 Slack의 채널 세부정보에서 확인할 수 있습니다.

채널 구성

채널에 있는 모든 멤버들의 권한을 차등 부여하지 않고 ReadOnly로 설정할 예정입니다. 그렇기 때문에 사용자 수준 역할이 아닌 채널 역할을 선택해주었습니다.

 

AWS가 가질 권한을 설정해주는 정책 템플릿에는 알림 권한만 선택해주었습니다. AWS는 특정 트리거가 발생했을 때에 슬랙에 알림을 보내는 역할만으로 충분하기 때문입니다.

 

채널 가드레일 정책은 채널 멤버의 역할을 설정하는 부분입니다. 우선 ReadOnlyAccess만 설정해두었습니다. 만약 추가적인 작업이 필요하면 AWS의 IAM 계정으로 로그인하면 되기 때문입니다.

채널 구성

마지막으로 우리가 만들어둔 SNS 주제에 대해 Chatbot이 알림을 보낼 수 있도록 세팅하는 부분입니다.

 

SNS 주제가 존재하는 region을 택한 후에, 주제를 택해주면 됩니다. 선택사항이라 적혀있지만, 이 부분을 생략하면 특정 트리거가 발생해도 알림이 가지 않습니다.

 

 

5. AWS SNS의 구독에 들어가서 제대로 설정됐는지 확인

AWS SNS의 구독 목록

위와 같이 구독 목록에 보여지면 올바르게 된 것입니다.

 

만약 슬랙에 테스트 메시지를 보내고 싶으면 AWS Chatbot의 해당 클라이언트 구성으로 접속하여 테스트 메시지 전송을 클릭해주면 됩니다.

테스트 메시지 전송 성공

테스트 메시지가 해당 채널에 위와 같이 전송될 것입니다.


AWS SNS 액세스 정책 추가

CloudWatch에서 EC2나 RDS를 모니터링하여 슬랙에 알림을 보내는 케이스는 별다른 액세스 정책 수정이 필요하지 않습니다. 하지만 AWS Budgets의 특정 예산 시점일 때 트리거를 발생시켜 알림을 보내는 케이스는 그렇지 않습니다. AWS Budgets 관련하여 SNS 주제의 액세스 정책을 추가하는 부분을 살펴보겠습니다.

 

AWS Budgets에서 SNS를 선택할 때 뜨는 창

AWS Budgets에서 일정 금액을 초과할 때 알림을 보내기 위해서는 budgets.amazonaws.com 서비스를 이용할 권한이 있어야 됩니다. 하지만 주제를 생성할 때 기본적으로 설정되는 액세스 정책에 이 부분은 포함되지 않습니다. 따라서 AWS SNS의 해당 주제 액세스 정책을 수정해줄 필요가 있습니다.

 

AWS SNS 예산 관련 주제

맨 처음에 주제를 생성할 때, 암호화, 액세스 정책 등을 모두 패스하고 주제 이름만 설정했었던 것. 기억나시나요?

패스한 설정들은 위 사진에서 보이는 빨간박스 탭에 존재하고 있습니다. 우측 상단의 편집을 클릭하면 언제든지 수정이 가능합니다.

 

우리는 액세스 정책을 수정해주면 됩니다.

 

AWS Budgets에서 안내해준대로 액세스 정책의 Statement에 위 사진처럼 추가해주면 됩니다.

Resource에는 아까 만들어주었던 SNS 주제의 ARN 값을 넣어주어야 합니다.

 

주의할 점은, 2023년 5월 기준으로 Statement의 맨 첫번째가 아닌 맨 끝에 추가해줄 경우 에러가 발생한다는 점입니다. 그렇기 때문에 위처럼 맨 앞에 추가해주도록 합시다.


마치며

개발할 때에는 Slack이 정말 편리하다는 점을 새삼 느끼게 됐습니다. 물론 AWS Lambda, Slack incoming webhook을 이용하는 방법들도 있습니다. 하지만 AWS SNS가 개인적으로는 정말 사용하기 편리하다고 느껴서 SNS로 충분히 설정이 가능하다면 AWS SNS + Chatbot을 이용한 방법을 활용할 듯합니다.

 

아직 모카콩은 일정 예산을 초과한 적도, prod EC2의 CPU 점유율이 지나치게 높아진 적도 없습니다. 하지만 소 잃고 외양간 고치는 것보다는, 미리 안전하게 대비를 해놓는 것이 훨씬 현명하다고 생각합니다. AWS SNS, Chatbot은 무료 서비스이기도 하니 운영하고 있는 사이드 프로젝트가 있다면 이참에 설정해보면 좋을 듯합니다.

반응형