Lambda 없이 EventBridge로 Slack 알림 자동화하기
안녕하세요! 아노테이션 의 박성준 입니다.
클라우드 아키텍처를 설계하다 보면, AWS 서비스에서 발생하는 중요한 이벤트를 팀원들과 실시간으로 공유하고 싶을 때가 많죠.
AWS Health Dashboard
에 새로운 경고가 떴을 때GuardDuty
가 보안 위협을 탐지했을 때EC2 인스턴스
의 상태가 변경되었을 때
이런 알림을 Slack으로 바로 받아보면 얼마나 편할까요?
🤔 기존 방식: Lambda, 꼭 필요할까?
제가 흔히 사용하던 방법으로는 Lambda 함수나 AWS Chatbot을 이용하는 경우가 많았습니다. 특히 Lambda를 이용하는 구조는 아래와 같습니다.
EventBridge Rule → 📮 AWS Lambda 함수 → 📢 Slack Webhook URL
이 구조는 잘 동작하지만, 몇 가지 아쉬운 점이 있습니다.
- 관리 오버헤드: 단순 알림 전송을 위해 Lambda 코드를 작성하고, 의존성 및 버전을 관리해야 합니다.
- 콜드 스타트: 가끔 호출되면 Lambda의 콜드 스타트 때문에 알림이 몇 초 지연될 수 있습니다.
✨ 새로운 대안: EventBridge API Destinations
하지만 이제 EventBridge API Destinations
기능을 사용하면 Lambda 함수 없이 EventBridge가 직접 Slack Webhook 같은 HTTP 엔드포인트를 호출할 수 있습니다.
EventBridge Rule → 🔌 API Destination → 📢 Slack Webhook URL
아키텍처는 훨씬 단순해지고, 관리 포인트도 줄어들죠. 이번 포스트에서는 이 깔끔하고 효율적인 아키텍처를 AWS Management Console에서 단계별로 구축하는 방법을 알아보겠습니다.
출처:https://docs.aws.amazon.com/ko_kr/eventbridge/latest/userguide/eb-api-destinations.html
🛠️ 사전 준비: Slack Incoming Webhook URL 생성하기
가장 먼저 Slack으로 메시지를 보낼 수 있는 고유한 URL, 즉 Incoming Webhook
이 필요합니다.
- Slack App Directory로 이동하여 "Create New App" 버튼을 클릭합니다.
- "From scratch"를 선택하고, 앱 이름(예:
My AWS Notifier
)과 Slack 워크스페이스를 지정한 후 앱을 생성합니다. - 앱 설정 화면에서 "Incoming Webhooks" 기능을 찾아 활성화(On)합니다.
- 하단의 "Add New Webhook to Workspace" 버튼을 클릭하여 메시지를 수신할 채널을 선택하고 허용합니다.
- 생성이 완료되면
https://hooks.slack.com/services/...
와 같은 형식의 Webhook URL이 나타납니다. 이 URL을 안전한 곳에 복사해두세요.
1. EventBridge 연결(Connection) 생성
API Destination이 외부 엔드포인트(Slack)와 안전하게 통신하려면 인증 정보를 담는 '연결(Connection)' 리소스가 필요합니다. Slack Webhook은 URL 자체로 인증이 되지만, 이 과정은 필수 절차입니다.
- AWS Management Console에서 Amazon EventBridge 서비스로 이동합니다.
- 왼쪽 메뉴에서 "통합(Integration)" 섹션의 **"연결(Connections)"**을 선택합니다.
- "연결 생성(Create connection)" 버튼을 클릭합니다.
- 연결 이름을 입력합니다. (예:
Test-SlackWebhookConnection
) - 권한 부여 유형(Authorization type)으로 "API 키(API Key)"를 선택합니다.
- API 키 이름(API key name)에
Content-Type
을, 값(Value) 에application/json
을 입력합니다. - "생성(Create)"을 클릭하여 연결을 완료합니다.
2. API 대상(API Destination) 생성
이제 본격적으로 Slack Webhook URL을 호출할 **API 대상(API Destination)
**을 만듭니다.
- EventBridge 메뉴에서 **"API 대상(API Destinations)"**을 선택합니다.
- "API 대상 생성(Create API destination)" 버튼을 클릭합니다.
- 이름을 입력합니다. (예:
SendToSlack
) - API 대상 엔드포인트에 사전 준비 단계에서 복사해 둔 Slack Webhook URL을 붙여넣습니다.
- HTTP 메서드는 POST를 선택합니다.
- 연결(Connection) 항목에서 방금 전 1단계에서 생성한
Test-SlackWebhookConnection
을 선택합니다. - "생성(Create)"을 클릭합니다.
3. 이벤트 규칙(Rule) 생성 및 대상 연결 (EC2 버전)
이제 어떤 이벤트가 발생했을 때 우리가 만든 API 대상을 호출할지 정의하는 **규칙(Rule)
**을 만들 차례입니다. EC2 인스턴스가 중지(stopped
)될 때를 감지하는 규칙을 만들어 보겠습니다.
-
EventBridge 메뉴에서 "규칙(Rules)"을 선택하고 "규칙 생성(Create rule)"을 클릭합니다.
-
이름을 입력합니다. (예:
Notify-EC2-Stop-to-Slack
) -
이벤트 패턴이 있는 규칙(Rule with an event pattern)을 선택하고 "다음"을 클릭합니다.
-
이벤트 패턴(Event pattern) 섹션에서 아래와 같이 설정합니다.
- 이벤트 소스(Event source): "AWS 이벤트 또는 EventBridge 파트너 이벤트" 선택
- 아래로 스크롤하여 이벤트 패턴 편집기에 아래 JSON을 직접 입력합니다.
{ "source": ["aws.ec2"], "detail-type": ["EC2 Instance State-change Notification"], "detail": { "state": ["stopped"] } }
-
*"다음(Next)"**을 클릭합니다.
-
대상 유형에서 "EventBridge API 대상"을 선택하고, 2단계에서 생성한
SendToSlack
을 지정합니다.
4. 입력 변환(Input Transformer)으로 Slack 메시지 포맷팅 (EC2 버전)
가장 중요한 단계입니다! EC2 상태 변경 이벤트의 전체 JSON을 그대로 Slack으로 보내면 인식하지 못 할수가있습니다.. 입력 변환기(Input Transformer)
를 사용해 인스턴스 ID
, 상태
등의 핵심 정보만 추출하여 가독성 높은 메시지로 가공해 보겠습니다.
-
대상 설정 페이지에서 "추가 설정(Additional settings)"을 펼치고 "입력 변환기(Input transformer)"를 선택합니다.
-
"입력 변환기 구성(Configure input transformer)" 버튼을 클릭합니다.
-
입력 경로(Input path) 에 아래 JSON을 입력하여, 원본 이벤트에서 필요한 정보(
instance-id
,state
,region
)를 변수로 추출합니다.{ "instance": "$.detail.instance-id", "state": "$.detail.state", "region": "$.region" }
-
템플릿(Template) 에 아래와 같이 Slack 메시지 형식을 정의합니다.
입력 경로
에서 만든 변수를<...>
괄호로 사용할 수 있습니다.{ "text": "🖥️ EC2 인스턴스 상태 변경 알림\n\n*인스턴스 ID:* `<instance>`\n*리전:* `<region>`\n*현재 상태:* `<state>`" }
-
"확인(Confirm)" 을 누르고 규칙 생성을 완료합니다.
5. 실제 EC2 인스턴스 중지 및 알림 확인
모든 설정이 끝났습니다. 이제 AWS 계정의 실제 EC2 인스턴스를 중지시켜서 알림이 잘 오는지 확인해 봅시다.
- AWS Management Console에서 EC2 서비스로 이동합니다.
- 실행 중인 테스트용 EC2 인스턴스를 하나 선택합니다. (없다면
t2.micro
프리 티어 인스턴스를 잠시 생성해서 테스트할 수 있습니다.) - 해당 인스턴스를 선택하고 **"인스턴스 상태" → "인스턴스 중지"**를 클릭합니다.
잠시 후, 인스턴스 상태가 stopped
로 변경되면 Slack 채널에 아래와 같이 멋지게 포맷팅된 메시지가 도착하는 것을 확인할 수 있습니다!
🖥️ EC2 인스턴스 상태 변경 알림
인스턴스 ID:
i-0123456789abcdef
리전:ap-northeast-1
현재 상태:stopped
마무리
EventBridge API Destinations를 통해 Lambda 나 Chatbot 설정 없이 외부 Webhook을 바로 호출하는 구성법을 살펴보았습니다. 간단한 설정만으로도 다양한 AWS 이벤트를 외부 시스템으로 자동 알림할 수 있어, 간단한 통지 를 구현하고싶다면 이러한 방법도 이용할수 있을거같습니다.
アノテーション株式会社について
アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。