AWS Health Event 알림을 AWS EventBridge를 이용해 슬랙으로 보내기

AWS 콘솔에 위와 같은 Health Event 알림이 오는데, Slack 채널로 보내보자
최대한 간단히 만들고 싶어서, 서버리스 서비스인 AWS EventBridge를 사용해봤다
Prerequisite
- Slack Incoming webhook을 사용한다
AWS EventBridge
AWS EventBridge(이벤트브릿지)는 여러 애플리케이션을 연결하는 서버리스 서비스다. AWS 에서는 Serverless Event Router 라고 소개하고 있다.
사용 요금은 Ingestion / Delivery 요금이 있으며, 이벤트 백만개당 1$ 정도니 알림정도는 무료라고 봐도 된다
알림 추가는 아래 순서로 진행한다
(1) Connection 추가
Connection은 Endpoint 인증 관련 정보를 저장하는 곳이다

아래 정보를 참고해 생성한다
- API type: Public 선택
- Authorization type: API Key
- Header name / Value는 적당히 dummy로 적는다
- ex)
Content-Type:application/json
좀 아쉬운 점이라면 EventBridge는 무조건 인증을 붙여야하는데, 슬랙 webhook처럼 인증이 필요 없는 경우라도 붙여야 해 더미값을 넣어야 한다. (참고 Q&A)
그리고 이는 AWS Secrets Manager에 추가되기 때문에 추가 요금이 나갈 수 있다. (한달에 0.4$ / 10000번 API 호출당 0.05$)
(2) API Destination 추가
Slack webhook endpoint를 추가한다

아래 정보 참고해 추가한다
- API destination endpoint: slack webhook url을 넣는다
- ex)
https://hooks.slack.com/services/aaaaaa/bbbbbb/cccccc
- ex)
- HTTP method:
POST - Connection type: Use an existing connection - 아까 만들어둔 connection 선택
(3) Rules 추가
"AWS Health Event가 발생했을 때 -> 이벤트를 적당히 잘 바꿔서 .. json으로 변환하고 Slack webhook url에 POST 요청을 보낸다" 라는 로직을 작성하는 곳이다

아래 정보를 참고해 만든다. 왼쪽 탭에서 컴포넌트를 검색해서 드래그 앤 드랍 하면 된다.
- Triggering Events:
AWS Health Event - Targets:
Input Transformation->EventBridge API Destination - Input Transformation > Transformation method:
Input transformer
Transform 섹션을 보면 4개의 박스가 있는데 맨 왼쪽 Sample event/Event payload와 맨 오른쪽 Output은 예시를 위한 데이터라서, 중간의 두 섹션 - Input path와 Template만 입력하면 된다

각각의 섹션은 아래처럼 입력한다
{
"desc": "$.detail.eventDescription[0].latestDescription",
"region": "$.region",
"service": "$.detail.service",
"status": "$.detail.statusCode"
}Transform - Input path
{
"text": ":warning: *AWS Health Alert*\n*Service:* <service>\n*Region:* <region>\n*Status:* <status>\n*Message:* <desc>"
}Transform - Template
참고로 웹 UI상으로는 Output의 double quote(") 이스케이핑이 좀 이상하게 나오는데 무시하면 된다.
여기까지 하면 AWS 알림이 슬랙으로 잘 오게 된다
막상 보내보니, 슬랙 메시지가 매우 길어져서 조금 화면을 많이 차지하는 것 같은데.. 이건 어떻게 하는게 좋을지 좀 고민이 된다