EventBridge에서 EC2 의 상태변화를 감지하여 상태변경 메일을 보내는 방법

4분 분량
콘텐츠 수준: 중급
1

해당 기사에서는 EC2 인스턴스의 Event Bridge로 상태변화를 감지하여 Lambda를 이용하여 상태변화와 관련된 값을 이메일로 보내는 방법에 대해서 설명합니다.

현재 문서에서 사용하는 서비스들의 간략한 설명

EventBridge 는 이벤트를 사용하여 애플리케이션 구성 요소를 서로 연결하는 서버리스 서비스이므로 확장 가능한 이벤트 기반 애플리케이션을 쉽게 구축할 수 있습니다. 이를 사용하여 자체 개발 애플리케이션,AWS 서비스 및 타사 소프트웨어와 같은 소스의 이벤트를 조직 전체의 소비자 애플리케이션으로 라우팅할 수 있습니다. EventBridge 이벤트를 수집, 필터링, 변환 및 전달하는 간단하고 일관된 방법을 제공하므로 새 애플리케이션을 빠르게 구축할 수 있습니다.

AWS Lambda은 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있게 해주는 컴퓨팅 서비스입니다. Lambda는 고가용성 컴퓨팅 인프라에서 코드를 실행하고 서버와 운영 체제 유지 관리, 용량 프로비저닝 및 자동 조정, 코드 및 보안 패치 배포, 로깅 등 모든 컴퓨팅 리소스 관리를 수행합니다. Lambda를 사용하면 Lambda가 지원하는 언어 런타임 중 하나로 코드를 제공하기만 하면 됩니다. Lambda 함수에 코드를 구성합니다. Lambda 서비스는 필요할 때만 함수를 실행하고 자동으로 확장됩니다. 사용한 컴퓨팅 시간만큼만 비용을 지불하고, 코드가 실행되지 않을 때는 요금이 부과되지 않습니다.

Amazon Simple Email Service(SES)는 사용자의 이메일 주소와 도메인을 사용해 이메일을 보내고 받기 위한 경제적이고 손쉬운 방법을 제공하는 이메일 플랫폼입니다. 예를 들어, 특별 행사 안내 등의 마케팅 이메일, 주문 확인서 등의 거래 이메일, 뉴스레터 등의 기타 통신문을 발송할 수 있습니다. Amazon SES를 사용하여 메일을 수신하면 이메일 자동 응답기, 이메일 구독 해제 시스템, 수신 이메일에서 고객 지원 티켓을 생성하는 애플리케이션과 같은 소프트웨어 솔루션을 개발할 수 있습니다.

현재 문서에서는 Event Bridge를 통해서 EC2의 상태 변경 이벤트를 기반으로 사용자에게 이메일로 알림을 줄 수 있는 서버리스 아키텍처를 구현합니다. 이후 EC2 인스턴스의 상태변경만이 아닌 AWS 서비스의 이벤트와 통합 및 확장이 가능합니다.

솔루션 개요

아래 그림은 이번 가이드에서 제공하는 솔루션에 대한 전체 아키텍처를 나타냅니다. AWS 내의 EC2 인스턴스의 상태변화를 EventBridge를 통해서 감지하고 감지된 이벤트를 이용하여 AWS Lambda 를 트리거 합니다. 트리거된 AWS Lambda 에서 SES 를 통해서 알림을 받기 원하는 사용자에게 전달됩니다.

여기에 이미지 설명 입력

사전 준비사항

발신자와 송신자의 SES 자격증명 인증 [1]

  • SES를 이용하기 위해서는 발신자 및 송신자의 자격증명이 필요합니다.

1단계 : Lambda 함수에서 SES 를 이용하기 위해 IAM 역할을 생성합니다.

  1. 아래의 JSON을 이용하여 Policy를 생성합니다.
  2. Lambda_SES 라는 새로운 IAM 역할을 생성한뒤 위에서 생성한 정책을 연결합니다. [2]
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ses:SendEmail",
        "ses:SendRawEmail"
      ],
      "Resource": "*"
    }
  ]
}

2단계: Lambda 함수를 생성합니다.

  1. EventBridge 를 통해서 트리거 되면 실행되는 AWS Lambda 함수를 생성합니다.( (예시)EC2Status*Alarm )
  2. AWS Lambda 함수의 런타임을 [Python3.8]로 설정해주세요.
  3. [기본 실행 역할 변경]을 클릭하여 [기존 역할 사용]을 클릭후 Lambda_SES 로 역할을 변경해줍니다.

여기에 이미지 설명 입력

3단계: Lambda 함수내의 EventBridge 트리거를 추가합니다.

  1. 만들어진 Lambda 함수에서 [트리거 추가] 를 클릭합니다.
  2. [EventBridge]를 클릭하고 아래와 같이 새 규칙을 생성합니다.
  3. [규칙이름]에 원하는 규칙이름에 넣어줍니다.( (예시) EC2Status-Alarm-rule))
  4. [규칙유형]은 [이벤트 패턴]을 클릭한뒤 아래와 같이 규칙에 대해 상세하게 기입합니다.
  5. 알림을 받기를 원하는 인스턴스의 아이디를 넣어줍니다.

여기에 이미지 설명 입력

여기에 이미지 설명 입력

4단계 : Lambda 함수의 코드를 수정합니다.

  1. AWS Lambda 페이지에서 생성한 함수를 클릭하고 [코드]를 클릭한뒤 lambda_function.py를 아래와 같이 수정합니다.
  2. 사전 준비사항에서 자격증명을 완료한 발신자의 이메일 및 수신자의 이메일을 아래의 코드에 기입합니다.
  3. Subject는 메일 발송시의 제목, Body 부분에는 메일의 주된내용이 들어갑니다.
  4. 코드를 Ctrl+S 를 눌러서 저장한뒤 [Deploy]를 클릭하여 배포합니다.

(* 파이썬 이외의 코드를 이용하실 경우 아래의 링크를 통해서 확인하실 수 있습니다. [2])

import boto3

client = boto3.client('ses', region_name='ap-northeast-2')

def lambda_handler(event, context):

    response = client.send_email(
    Destination={
        'ToAddresses': ['수신자의 이메일']
    },
    Message={
        'Body': {
            'Text': {
                'Charset': 'UTF-8',
                'Data': '인스턴스 ID : {} \n {} 상태로 변경 되었습니다.'.format(event['detail']['instance-id'],event['detail']['state']),
            }
        },
        'Subject': {
            'Charset': 'UTF-8',
            'Data': '[인스턴스 상태 변경 알림]고객님의 인스턴스가 {}상태로 변경되었습니다.'.format(event['detail']['state']),
            },
    },
    Source='발신자의 이메일'
    )

    print(response)

    return {
        'statusCode': 200,
        'body': json.dumps("Email Sent Successfully. MessageId is: " + response['MessageId'])
    }

5단계 : EC2 instance 시작 및 중지 시 변경알림을 확인할 수 있습니다.

  • 해당 인스턴스를 시작 및 중지할때 변경된 정보들을 이메일 을 통해서 확인하실 수 있습니다.
  • 수신자의 이메일을 통해서 인스턴스의 상태 변화를 확인할수있습니다.

여기에 이미지 설명 입력

리소스 정리하기

Amazon EventBridge

  • EventBridge의 규칙을 삭제합니다.

Amazon Lambda

  • 생성한 람다함수를 삭제합니다.

Amazon SES

  • 확인된 자격증명의 발신자 및 수신자를 삭제합니다.

Amazon EC2 인스턴스

  • 인스턴스를 종료합니다.

참고 자료

[1] Amazon SES에서 자격 증명 생성 및 확인: 이메일 주소 자격 증명 생성 https://docs.aws.amazon.com/ko_kr/ses/latest/dg/creating-identities.html#verify-email-addresses-procedure

[2] Lambda와 Amazon SES를 사용하여 이메일을 보내려면 어떻게 해야 합니까? https://repost.aws/ko/knowledge-center/lambda-send-email-ses

댓글 없음

관련 콘텐츠