AWS CloudWatch와 AWS Lambda를 활용해 AWS EC2 실행, 중지 될 때마다 Slack 메세지 받기(How to receive Slack message using AWS CloudWatch and AWS Lambda when AWS EC2 state is changed)



## AWS CloudWatch와 AWS Lambda를 활용해 AWS EC2 실행, 중지 될 때마다 Slack 메세지 받기(How to receive Slack message using AWS CloudWatch and AWS Lambda when AWS EC2 state is changed)

[이 글](https://ghkdgh2365.blogspot.com/2020/12/aws-lambda-aws-cloudwatch-aws-rds-how.html)을 쓴 김에 쓰는 글입니다.

AWS EC2 상태가 변경(실행 또는 중지 등)할 때마다 슬랙으로 메세지를 받는 방법에 대해서 작성합니다.

순서는 아래와 같습니다.

1. Slack 설정
2. AWS Lambda 설정
3. AWS CloudWatch 설정



### 1. Slack 설정

[해당 페이지](http://ghkdgh2365.blogspot.com/2020/12/aws-lambda-aws-cloudwatch-aws-rds-how.html) 1. Slack 설정과 같습니다.



### 2. AWS Lambda 설정

AWS Lambda 에 가서 **함수 생성** 버튼을 클릭하고 **함수 이름**을 적은 뒤 함수를 생성합니다. 저의 경우 **런타임**(사용할 프로그래밍 언어)은 **Python 2.7**로 했습니다. 생성한 뒤 **함수 코드**는 아래와 같이 작성합니다. `'YOUR SLACK URL'` 자리에 Slack 설정 시 확인했던 **Webhook URL** 을 복사해서 붙여넣어주면 됩니다.

```
# -*- coding: utf-8 -*-
import json, random
import httplib
from botocore.vendored import requests

def lambda_handler(event, context):
    slack_url = 'https://hooks.slack.com/services/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'
    
    payloads = {
            "attachments":[{
                "pretext": "AWS EC2 관리 봇",
                "color":"#0099A6",
                "fields": [{
                    "title": "EC2 상태가 변경되었습니다.",
                    "value": json.dumps(event["detail"]["state"]), #EC2 state 정보
                    "short": False
                }]
            }]
        }
    response = requests.post(
        slack_url, data=json.dumps(payloads),
        headers={'Content-Type': 'application/json'}
    )
    if response.status_code != 200:
        raise ValueError(
            'Request to slack returned an error %s, the response is:\n%s'
            % (response.status_code, response.text)
        )
```

### 3. AWS CloudWatch 설정

AWS CloudWatch에 들어가 왼쪽 메뉴에 **이벤트 > 규칙**을 클릭하고 **이벤트 패턴**을 선택하고, **서비스 이름**엔 **EC2**, **이벤트 유형**은 **EC2 Instance State-change Notification**, 특정 상태만 원하면 **특정 상태**를 선택하시면 되고, 모든 상태를 선택하려면 **모든 상태**를 선택하면 됩니다. 인스턴스의 경우에도 모든 인스턴스를 원하면 **모든 인스턴스**를 선택하고, 특정 인스턴스만을 원하면 **특정 인스턴스**를 선택하고 해당 **인스턴스 ID**를 입력하면 됩니다.

대상은 위에서 설정한 Lambda를 선택해주고 의미있는 이름을 적고 규칙을 생성합니다. 이제 EC2의 상태가 변경될 때마다 Slack 메시지를 받을 수 있습니다.

참고로 특정 인스턴스들과 특정 상태를 선택한 경우에는 아래와 같이 규칙이 생성됩니다.

```
{
  "source": [
    "aws.ec2"
  ],
  "detail-type": [
    "EC2 Instance State-change Notification"
  ],
  "detail": {
    "state": [
      "running",
      "stopping",
      "stopped"
    ],
    "instance-id": [
      "i-0XXXXXXXXX",
      "i-0XxXXXXXXX"
    ]
  }
}
```



댓글

이 블로그의 인기 게시물

부트스트랩 사용 시 버튼 오른쪽 정렬하는 방법 (How to use float-right for right align in bootstrap)

맥(Mac)에서 MySql 사용 시 Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 오류가 발생하는 경우 해결 방법

HTML, CSS - footer fixed (foot 하단 고정 시키기)