Lambda 없이 EventBridge로 Slack 알림 자동화하기

Lambda 없이 EventBridge로 Slack 알림 자동화하기

Clock Icon2025.06.24

안녕하세요! 아노테이션 의 박성준 입니다.
클라우드 아키텍처를 설계하다 보면, 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에서 단계별로 구축하는 방법을 알아보겠습니다.

image

출처:https://docs.aws.amazon.com/ko_kr/eventbridge/latest/userguide/eb-api-destinations.html

🛠️ 사전 준비: Slack Incoming Webhook URL 생성하기

가장 먼저 Slack으로 메시지를 보낼 수 있는 고유한 URL, 즉 Incoming Webhook이 필요합니다.

  1. Slack App Directory로 이동하여 "Create New App" 버튼을 클릭합니다.
  2. "From scratch"를 선택하고, 앱 이름(예: My AWS Notifier)과 Slack 워크스페이스를 지정한 후 앱을 생성합니다.
  3. 앱 설정 화면에서 "Incoming Webhooks" 기능을 찾아 활성화(On)합니다.
  4. 하단의 "Add New Webhook to Workspace" 버튼을 클릭하여 메시지를 수신할 채널을 선택하고 허용합니다.
  5. 생성이 완료되면 https://hooks.slack.com/services/... 와 같은 형식의 Webhook URL이 나타납니다. 이 URL을 안전한 곳에 복사해두세요.

スクリーンショット 2025-06-09 11.00.44

1. EventBridge 연결(Connection) 생성

API Destination이 외부 엔드포인트(Slack)와 안전하게 통신하려면 인증 정보를 담는 '연결(Connection)' 리소스가 필요합니다. Slack Webhook은 URL 자체로 인증이 되지만, 이 과정은 필수 절차입니다.

  1. AWS Management Console에서 Amazon EventBridge 서비스로 이동합니다.
  2. 왼쪽 메뉴에서 "통합(Integration)" 섹션의 **"연결(Connections)"**을 선택합니다.
  3. "연결 생성(Create connection)" 버튼을 클릭합니다.
  4. 연결 이름을 입력합니다. (예: Test-SlackWebhookConnection)
  5. 권한 부여 유형(Authorization type)으로 "API 키(API Key)"를 선택합니다.
  6. API 키 이름(API key name)에 Content-Type을, 값(Value)application/json을 입력합니다.
  7. "생성(Create)"을 클릭하여 연결을 완료합니다.

スクリーンショット 2025-06-16 14.13.39

2. API 대상(API Destination) 생성

이제 본격적으로 Slack Webhook URL을 호출할 **API 대상(API Destination)**을 만듭니다.

  1. EventBridge 메뉴에서 **"API 대상(API Destinations)"**을 선택합니다.
  2. "API 대상 생성(Create API destination)" 버튼을 클릭합니다.
  3. 이름을 입력합니다. (예: SendToSlack)
  4. API 대상 엔드포인트에 사전 준비 단계에서 복사해 둔 Slack Webhook URL을 붙여넣습니다.
  5. HTTP 메서드POST를 선택합니다.
  6. 연결(Connection) 항목에서 방금 전 1단계에서 생성한 Test-SlackWebhookConnection을 선택합니다.
  7. "생성(Create)"을 클릭합니다.

スクリーンショット 2025-06-16 14.38.16

3. 이벤트 규칙(Rule) 생성 및 대상 연결 (EC2 버전)

이제 어떤 이벤트가 발생했을 때 우리가 만든 API 대상을 호출할지 정의하는 **규칙(Rule)**을 만들 차례입니다. EC2 인스턴스가 중지(stopped)될 때를 감지하는 규칙을 만들어 보겠습니다.

  1. EventBridge 메뉴에서 "규칙(Rules)"을 선택하고 "규칙 생성(Create rule)"을 클릭합니다.

  2. 이름을 입력합니다. (예: Notify-EC2-Stop-to-Slack)

  3. 이벤트 패턴이 있는 규칙(Rule with an event pattern)을 선택하고 "다음"을 클릭합니다.

  4. 이벤트 패턴(Event pattern) 섹션에서 아래와 같이 설정합니다.

    • 이벤트 소스(Event source): "AWS 이벤트 또는 EventBridge 파트너 이벤트" 선택
    • 아래로 스크롤하여 이벤트 패턴 편집기에 아래 JSON을 직접 입력합니다.
    {
      "source": ["aws.ec2"],
      "detail-type": ["EC2 Instance State-change Notification"],
      "detail": {
        "state": ["stopped"]
      }
    }
    
  5. *"다음(Next)"**을 클릭합니다.

    スクリーンショット 2025-06-18 10.36.59

  6. 대상 유형에서 "EventBridge API 대상"을 선택하고, 2단계에서 생성한 SendToSlack을 지정합니다.

スクリーンショット 2025-06-18 10.38.27

4. 입력 변환(Input Transformer)으로 Slack 메시지 포맷팅 (EC2 버전)

가장 중요한 단계입니다! EC2 상태 변경 이벤트의 전체 JSON을 그대로 Slack으로 보내면 인식하지 못 할수가있습니다.. 입력 변환기(Input Transformer)를 사용해 인스턴스 ID, 상태 등의 핵심 정보만 추출하여 가독성 높은 메시지로 가공해 보겠습니다.

  1. 대상 설정 페이지에서 "추가 설정(Additional settings)"을 펼치고 "입력 변환기(Input transformer)"를 선택합니다.

  2. "입력 변환기 구성(Configure input transformer)" 버튼을 클릭합니다.

  3. 입력 경로(Input path) 에 아래 JSON을 입력하여, 원본 이벤트에서 필요한 정보(instance-id, state, region)를 변수로 추출합니다.

    {
      "instance": "$.detail.instance-id",
      "state": "$.detail.state",
      "region": "$.region"
    }
    
    
  4. 템플릿(Template) 에 아래와 같이 Slack 메시지 형식을 정의합니다. 입력 경로에서 만든 변수를 <...> 괄호로 사용할 수 있습니다.

    {
      "text": "🖥️ EC2 인스턴스 상태 변경 알림\n\n*인스턴스 ID:* `<instance>`\n*리전:* `<region>`\n*현재 상태:* `<state>`"
    }
    
  5. "확인(Confirm)" 을 누르고 규칙 생성을 완료합니다.

    スクリーンショット 2025-06-18 10.38.49

5. 실제 EC2 인스턴스 중지 및 알림 확인

모든 설정이 끝났습니다. 이제 AWS 계정의 실제 EC2 인스턴스를 중지시켜서 알림이 잘 오는지 확인해 봅시다.

  1. AWS Management Console에서 EC2 서비스로 이동합니다.
  2. 실행 중인 테스트용 EC2 인스턴스를 하나 선택합니다. (없다면 t2.micro 프리 티어 인스턴스를 잠시 생성해서 테스트할 수 있습니다.)
  3. 해당 인스턴스를 선택하고 **"인스턴스 상태" → "인스턴스 중지"**를 클릭합니다.

잠시 후, 인스턴스 상태가 stopped로 변경되면 Slack 채널에 아래와 같이 멋지게 포맷팅된 메시지가 도착하는 것을 확인할 수 있습니다!

スクリーンショット 2025-06-18 10.51.12

🖥️ EC2 인스턴스 상태 변경 알림

인스턴스 ID: i-0123456789abcdef리전: ap-northeast-1현재 상태: stopped

마무리

EventBridge API Destinations를 통해 Lambda 나 Chatbot 설정 없이 외부 Webhook을 바로 호출하는 구성법을 살펴보았습니다. 간단한 설정만으로도 다양한 AWS 이벤트를 외부 시스템으로 자동 알림할 수 있어, 간단한 통지 를 구현하고싶다면 이러한 방법도 이용할수 있을거같습니다.

アノテーション株式会社について

アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.