

# 경보 변경에 따른 조치
<a name="Acting_Alarm_Changes"></a>

CloudWatch는 경보의 상태가 변경될 때와 경보의 구성이 업데이트될 때 두 가지 유형의 경보 변경 사항을 사용자에게 알릴 수 있습니다.

경보가 평가할 때 ALARM 또는 OK와 같은 상태로 변경될 수 있습니다. 여러 시계열을 모니터링하는 Metrics Insights 경보의 경우 각 시계열(기여자)은 INSUFFICIENT\$1DATA 상태일 수 없고 ALARM 또는 OK 상태만 될 수 있습니다. 데이터가 있는 경우에만 시계열이 존재하기 때문입니다.

또한 CloudWatch는 경보 상태가 변경될 때마다 그리고 경보가 생성, 삭제 또는 업데이트될 때마다 Amazon EventBridge로 이벤트를 전송합니다. EventBridge가 이러한 이벤트를 수신할 때 조치를 취하거나 알림을 받도록 EventBridge 규칙을 작성할 수 있습니다.

경보 작업에 대한 자세한 내용은 [경보 작업](alarm-actions.md) 섹션을 참조하세요.

**Topics**
+ [경보 변경 시 사용자에게 알림](Notify_Users_Alarm_Changes.md)
+ [경보에서 Lambda 함수 간접 호출](alarms-and-actions-Lambda.md)
+ [경보에서 CloudWatch 조사를 시작](Start-Investigation-Alarm.md)
+ [EC2 인스턴스 중지, 종료, 재부팅 또는 복구](UsingAlarmActions.md)
+ [경보 이벤트 및 EventBridge](cloudwatch-and-eventbridge.md)

# 경보 변경 시 사용자에게 알림
<a name="Notify_Users_Alarm_Changes"></a>

이 섹션에서는 AWS 사용자 알림 또는 Amazon Simple Notification Service를 사용하여 사용자에게 경보 변경 사항을 알리는 방법을 설명합니다.

## AWS 사용자 알림 설정
<a name="Alarm_User_Notifications"></a>

[AWS 사용자 알림](https://docs.aws.amazon.com/notifications/latest/userguide/what-is-service.html)을 사용하여 CloudWatch 경보 상태 변경 및 구성 변경 이벤트에 대한 알림을 수신할 전송 채널을 설정할 수 있습니다. 이벤트가 지정한 규칙과 일치하면 알림을 받습니다. 이메일, [AWS Chatbot](https://docs.aws.amazon.com/chatbot/latest/adminguide/what-is.html) 채팅 알림 또는 [AWS 콘솔 모바일 애플리케이션 푸시 알림](https://docs.aws.amazon.com/consolemobileapp/latest/userguide/managing-notifications.html) 등 여러 채널을 통해 이벤트에 대한 알림을 받을 수 있습니다. [콘솔 알림 센터](https://console.aws.amazon.com/notifications)에서도 알림을 볼 수 있습니다. 사용자 알림은 집계를 지원하므로 특정 이벤트 중에 받는 알림 수를 줄일 수 있습니다.

AWS 사용자 알림을 사용하여 생성하는 알림 구성은 대상 경보 상태별로 구성할 수 있는 작업 수 제한에 포함되지 않습니다. AWS 사용자 알림은 특정 경보나 패턴을 허용 목록에 추가하거나 거부 목록에 추가하는 고급 필터를 지정하지 않는 한 Amazon EventBridge로 전송되는 이벤트와 일치하므로 계정 및 선택한 리전의 모든 경보에 대한 알림을 전송합니다.

다음 고급 필터의 예에서는 `ServerCpuTooHigh`라는 경보의 경보 상태가 OK에서 ALARM으로 변경된 경우와 일치합니다.

```
{
"detail": {
    "alarmName": ["ServerCpuTooHigh"],
    "previousState": { "value": ["OK"] },
    "state": { "value": ["ALARM"] }
  }
}
```

EventBridge 이벤트에서 경보가 게시한 모든 속성을 사용하여 필터를 생성할 수 있습니다. 자세한 내용은 [경보 이벤트 및 EventBridge](cloudwatch-and-eventbridge.md) 섹션을 참조하세요.

## Amazon SNS 알림 설정
<a name="US_SetupSNS"></a>

Amazon Simple Notification Service를 사용하여 모바일 문자 메시지(SMS) 및 이메일 메시지를 포함하여 애플리케이션 간(A2A) 메시지와 애플리케이션 대 사람(A2P) 메시지를 모두 보낼 수 있습니다. 자세한 내용은 [Amazon SNS 이벤트 대상](https://docs.aws.amazon.com/sns/latest/dg/sns-event-destinations.html)을 참조하세요.

경보가 취할 수 있는 모든 상태에 대해 SNS 주제에 메시지를 보내도록 경보를 구성할 수 있습니다. 특정 경보의 상태와 관련해 구성하는 모든 Amazon SNS 주제는 해당 경보 및 상태에 구성할 수 있는 작업 수 제한에 포함됩니다. 계정의 모든 경보에서 동일한 Amazon SNS 주제로 메시지를 보낼 수 있으며 애플리케이션(A2A) 및 사람(A2P) 소비자 모두에게 동일한 Amazon SNS 주제를 사용할 수 있습니다. 이 구성은 경보 수준에서 이루어지므로 구성한 경보만 선택한 Amazon SNS 항목으로 메시지를 전송합니다.

먼저, 주제를 생성한 다음 구독합니다. 선택적으로 테스트 메시지를 주제에 게시할 수 있습니다. 문제 해결 예는 [AWS Management Console을 사용하여 Amazon SNS 주제 설정](#set-up-sns-topic-console)을(를) 참조하세요. 또는 자세한 내용은 [Amazon SNS 시작하기](https://docs.aws.amazon.com/sns/latest/dg/sns-getting-started.html)를 참조하세요.

또는 AWS Management Console을 사용하여 CloudWatch 경보를 만들려는 경우 경보를 만들 때 주제를 만들 수 있으므로 이 절차를 건너뛰어도 됩니다.

 CloudWatch 경보를 생성할 때 경보가 입력하는 모든 대상 상태에 대한 작업을 추가할 수 있습니다. 알림을 받으려는 상태에 대한 Amazon SNS 알림을 추가하고 이전 단계에서 만든 Amazon SNS 주제를 선택하여 경보가 선택한 상태에 진입할 때 이메일 알림을 보냅니다.

**참고**  
Amazon SNS 주제를 생성할 때 해당 주제를 *표준 주제* 또는 *FIFO 주제*로 선택합니다. CloudWatch는 두 가지 유형의 주제에 대한 모든 경보 알림을 게시하도록 보장합니다. 그러나 FIFO 주제를 사용하더라도 CloudWatch가 순서에 맞지 않게 알림을 주제로 보내는 경우가 드물게 있습니다. FIFO 주제를 사용하는 경우 경보는 경보 알림의 메시지 그룹 ID를 경보의 ARN 해시로 설정합니다.

**Topics**
+ [혼동된 대리자 보안 문제 방지](#SNS_Confused_Deputy)
+ [AWS Management Console을 사용하여 Amazon SNS 주제 설정](#set-up-sns-topic-console)
+ [AWS CLI를 사용하여 SNS 주제 설정](#set-up-sns-topic-cli)

### 혼동된 대리자 보안 문제 방지
<a name="SNS_Confused_Deputy"></a>

혼동된 대리자 문제는 작업을 수행할 권한이 없는 엔터티가 권한이 더 많은 엔터티에게 작업을 수행하도록 강요할 수 있는 보안 문제입니다. AWS에서는 교차 서비스 가장으로 인해 혼동된 대리자 문제가 발생할 수 있습니다. 교차 서비스 가장은 한 서비스(*직접 호출하는 서비스*)가 다른 서비스(*직접 호출되는 서비스*)를 직접 호출할 때 발생할 수 있습니다. 직접 호출하는 서비스는 다른 고객의 리소스에 대해 액세스 권한이 없는 방식으로 작동하게 권한을 사용하도록 조작될 수 있습니다. 이를 방지하기 위해 AWS에서는 계정의 리소스에 대한 액세스 권한이 부여된 서비스 위탁자를 사용하여 모든 서비스에 대한 데이터를 보호하는 데 도움이 되는 도구를 제공합니다.

Amazon SNS가 리소스에 다른 서비스를 제공하는 권한을 제한하려면 리소스 정책에서 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn), [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount), [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceorgid](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceorgid) 및 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceorgpaths](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceorgpaths) 글로벌 조건 컨텍스트 키를 사용하는 것이 좋습니다. `aws:SourceArn`을 사용하면 하나의 리소스만 교차 서비스 액세스 권한과 연결됩니다. `aws:SourceAccount`를 사용하면 해당 계정의 모든 리소스가 교차 서비스 사용 권한과 연결됩니다. `aws:SourceOrgID`를 사용하면 조직 내 모든 계정의 모든 리소스가 교차 서비스 사용 권한과 연결될 수 있습니다. `aws:SourceOrgPaths`를 사용하면 AWS Organizations 경로 내 계정의 모든 리소스가 교차 서비스 사용 권한과 연결됩니다. 경로 사용 및 이해에 대한 자세한 내용은 IAM 사용 설명서의 [aws:SourceOrgPaths](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceorgpaths)를 참조하세요.

혼동된 대리인 문제로부터 보호하는 가장 효과적인 방법은 리소스의 전체 ARN이 포함된 `aws:SourceArn`글로벌 조건 컨텍스트 키를 사용하는 것입니다. 리소스의 전체 ARN을 모르거나 여러 리소스를 지정하는 경우, ARN의 알 수 없는 부분에 대해 와일드카드 문자(`*`)를 포함한 `aws:SourceArn` 글로벌 조건 컨텍스트 키를 사용합니다. 예: `arn:aws:servicename:*:123456789012:*` 

만약 `aws:SourceArn` 값에 Amazon S3 버킷 ARN과 같은 계정 ID가 포함되어 있지 않은 경우, 권한을 제한하려면 두 `aws:SourceAccount` 및 `aws:SourceArn`를 모두 사용해야 합니다.

혼동된 대리자 문제로부터 보호하려면 리소스 기반 정책에서 리소스의 조직 ID 또는 조직 경로와 함께 `aws:SourceOrgID` 또는 `aws:SourceOrgPaths` 글로벌 조건 컨텍스트 키를 사용합니다. `aws:SourceOrgID` 또는 `aws:SourceOrgPaths` 키가 포함된 정책에는 올바른 계정이 자동으로 포함되며 조직에서 계정을 추가, 제거 또는 이동할 때 정책을 수동으로 업데이트할 필요가 없습니다.

`aws:SourceArn`의 값은 알림을 보내는 경보의 ARN이어야 합니다.

다음 예제에서는 CloudWatch에서 `aws:SourceArn` 및 `aws:SourceAccount` 전역 조건 컨텍스트 키를 사용하여 혼동된 대리자 문제를 방지하는 방법을 보여줍니다.

```
{
    "Statement": [{
        "Effect": "Allow",
        "Principal": {
            "Service": "cloudwatch.amazonaws.com"
        },
        "Action": "SNS:Publish",
        "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic",
        "Condition": {
            "ArnLike": {
                "aws:SourceArn": "arn:aws:cloudwatch:us-east-2:111122223333:alarm:*"
            },
            "StringEquals": {
                "aws:SourceAccount": "111122223333"
            }
        }
    }]
}
```

경보 ARN에 ASCII가 아닌 문자가 포함된 경우 `aws:SourceAccount` 전역 조건 키만 사용하여 권한을 제한합니다.

### AWS Management Console을 사용하여 Amazon SNS 주제 설정
<a name="set-up-sns-topic-console"></a>

먼저, 주제를 생성한 다음 구독합니다. 선택적으로 테스트 메시지를 주제에 게시할 수 있습니다.

**SNS 주제를 생성하려면**

1. [https://console.aws.amazon.com/sns/v3/home](https://console.aws.amazon.com/sns/v3/home)에서 Amazon SNS 콘솔을 엽니다.

1. Amazon SNS 대시보드의 [**일반 작업(Common actions)**]에서 [**주제 생성(Create Topic)**]을 선택합니다.

1. **새로운 주제 생성** 대화 상자의 **주제 이름**에 주제 이름(예: **my-topic**)을 입력합니다.

1. **주제 생성**을 선택합니다.

1. 다음 태스크에 대한 [**주제 ARN(Topic ARN)**]을 복사합니다(예를 들어 arn:aws:sns:us-east-1:111122223333:my-topic).

**SNS 주제를 구독하려면**

1. [https://console.aws.amazon.com/sns/v3/home](https://console.aws.amazon.com/sns/v3/home)에서 Amazon SNS 콘솔을 엽니다.

1. 탐색 창에서 **구독**과 **구독 생성**을 선택합니다.

1. **구독 생성** 대화 상자의 **주제 ARN**에서 이전 작업에서 생성한 주제 ARN을 붙여 넣습니다.

1. **프로토콜**에서 **이메일**을 선택합니다.

1. **엔드포인트**에 알림을 받는 데 사용할 수 있는 이메일 주소를 입력한 다음 **구독 생성**을 선택합니다.

1. 이메일 애플리케이션에서 AWS 알림에서 보낸 메시지를 연 다음, 구독을 확인합니다.

   웹 브라우저에 Amazon SNS의 확인 응답이 표시됩니다.

**SNS 주제에 테스트 메시지를 게시하려면**

1. [https://console.aws.amazon.com/sns/v3/home](https://console.aws.amazon.com/sns/v3/home)에서 Amazon SNS 콘솔을 엽니다.

1. 탐색 창에서 **주제**를 선택합니다.

1. **주제** 페이지에서 주제를 선택하고 **주제 게시**를 선택합니다.

1. **메시지 게시** 페이지의 **제목**에 메시지에 대한 제목 줄을 입력하고 **메시지**에 간단한 메시지를 입력합니다.

1. **메시지 게시**를 선택합니다.

1. 해당 메시지를 받았는지 이메일을 확인합니다.

### AWS CLI를 사용하여 SNS 주제 설정
<a name="set-up-sns-topic-cli"></a>

먼저 SNS 주제를 생성한 다음, 해당 주제에 직접 메시지를 게시해서 제대로 구성이 되었는지 테스트합니다.

**SNS 주제를 설정하려면**

1. 아래와 같이 [create-topic](https://docs.aws.amazon.com/cli/latest/reference/sns/create-topic.html) 명령을 사용하여 주제를 생성합니다.

   ```
   1. aws sns create-topic --name my-topic
   ```

   Amazon SNS는 다음 형식의 주제 ARN을 반환합니다.

   ```
   1. {
   2.     "TopicArn": "arn:aws:sns:us-east-1:111122223333:my-topic"
   3. }
   ```

1. [subscribe](https://docs.aws.amazon.com/cli/latest/reference/sns/subscribe.html) 명령을 사용하여 구독 이메일 주소를 주제에 연결합니다. 구독 요청이 성공하면 구독 확인 이메일 메시지를 받게 됩니다.

   ```
   1. aws sns subscribe --topic-arn arn:aws:sns:us-east-1:111122223333:my-topic --protocol email --notification-endpoint my-email-address
   ```

   Amazon SNS는 다음을 반환합니다.

   ```
   1. {
   2.     "SubscriptionArn": "pending confirmation"
   3. }
   ```

1. 이메일 애플리케이션에서 AWS 알림에서 보낸 메시지를 연 다음, 구독을 확인합니다.

   웹 브라우저에 Amazon Simple Notification Service의 확인 응답이 표시됩니다.

1. [list-subscriptions-by-topic](https://docs.aws.amazon.com/cli/latest/reference/sns/list-subscriptions-by-topic.html) 명령을 사용하여 구독을 확인합니다.

   ```
   1. aws sns list-subscriptions-by-topic --topic-arn arn:aws:sns:us-east-1:111122223333:my-topic
   ```

   Amazon SNS는 다음을 반환합니다.

   ```
    1. {
    2.   "Subscriptions": [
    3.     {
    4.         "Owner": "111122223333",
    5.         "Endpoint": "me@mycompany.com",
    6.         "Protocol": "email",
    7.         "TopicArn": "arn:aws:sns:us-east-1:111122223333:my-topic",
    8.         "SubscriptionArn": "arn:aws:sns:us-east-1:111122223333:my-topic:64886986-bf10-48fb-a2f1-dab033aa67a3"
    9.     }
   10.   ]
   11. }
   ```

1. (선택 사항) [publish](https://docs.aws.amazon.com/cli/latest/reference/sns/publish.html) 명령을 사용하여 해당 주제로 테스트 메시지를 게시합니다.

   ```
   1. aws sns publish --message "Verification" --topic arn:aws:sns:us-east-1:111122223333:my-topic
   ```

   Amazon SNS는 다음을 반환합니다.

   ```
   1. {
   2.     "MessageId": "42f189a0-3094-5cf6-8fd7-c2dde61a4d7d"
   3. }
   ```

1. 해당 메시지를 받았는지 이메일을 확인합니다.

## 경보의 상태 변경 시 Amazon SNS 알림 스키마
<a name="alarm-sns-schema"></a>

이 섹션에는 경보의 상태가 변경될 때 Amazon SNS 주제로 전송되는 알림의 스키마가 나열되어 있습니다.

**지표 경보의 상태 변경 시 스키마**

```
{
  "AlarmName": "string",
  "AlarmDescription": "string",
  "AWSAccountId": "string",
  "AlarmConfigurationUpdatedTimestamp": "string",
  "NewStateValue": "string",
  "NewStateReason": "string",
  "StateChangeTime": "string",
  "Region": "string",
  "AlarmArn": "string",
  "OldStateValue": "string",
  "OKActions": ["string"],
  "AlarmActions": ["string"],
  "InsufficientDataActions": ["string"],
  "Trigger": {
    "MetricName": "string",
    "Namespace": "string",
    "StatisticType": "string",
    "Statistic": "string",
    "Unit": "string or null",
    "Dimensions": [
      {
        "value": "string",
        "name": "string"
      }
    ],
    "Period": "integer",
    "EvaluationPeriods": "integer",
    "DatapointsToAlarm": "integer",
    "ComparisonOperator": "string",
    "Threshold": "number",
    "TreatMissingData": "string",
    "EvaluateLowSampleCountPercentile": "string or null"
  }
}
```

**복합 경보의 상태 변경 시 스키마**

```
{
  "AlarmName": "string",
  "AlarmDescription": "string",
  "AWSAccountId": "string",
  "NewStateValue": "string",
  "NewStateReason": "string",
  "StateChangeTime": "string",
  "Region": "string",
  "AlarmArn": "string",
  "OKActions": [String],
  "AlarmActions": [String],
  "InsufficientDataActions": [String],
  "OldStateValue": "string",
  "AlarmRule": "string",
  "TriggeringChildren": [String]
}
```

# 경보에서 Lambda 함수 간접 호출
<a name="alarms-and-actions-Lambda"></a>

CloudWatch 경보는 주어진 상태 변경에 대해 Lambda 함수의 비동기 호출을 보장합니다. 단, 다음과 같은 경우는 예외입니다.
+ 함수가 존재하지 않는 경우.
+ CloudWatch가 Lambda 함수를 호출할 권한이 없는 경우.

CloudWatch가 Lambda 서비스에 연결할 수 없거나 다른 이유로 메시지가 거부된 경우, CloudWatch는 호출이 성공할 때까지 재시도합니다. Lambda는 메시지를 대기열에 추가하여 실행 재시도를 처리합니다. Lambda가 오류를 처리하는 방법에 대한 정보 등 이 실행 모델에 대한 자세한 내용은 AWS Lambda 개발자 안내서의 [비동기 호출](https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html)을 참조하세요.

동일한 계정이나 다른 AWS 계정에서 Lambda 함수를 호출할 수 있습니다.

Lambda 함수를 경보 작업으로 간접적으로 호출하도록 경보를 지정하는 경우 함수 이름, 함수 별칭 또는 특정 버전의 함수를 지정하도록 선택할 수 있습니다.

Lambda 함수를 경보 작업으로 지정할 때 CloudWatch 서비스 보안 주체가 함수를 호출할 수 있도록 함수에 대한 리소스 정책을 생성해야 합니다.

이를 수행하는 한 가지 방법은 다음 예제와 같이 AWS CLI를 사용하는 것입니다.

```
aws lambda add-permission \
--function-name my-function-name \
--statement-id AlarmAction \
--action 'lambda:InvokeFunction' \
--principal lambda.alarms.cloudwatch.amazonaws.com \
--source-account 111122223333 \
--source-arn arn:aws:cloudwatch:us-east-1:111122223333:alarm:alarm-name
```

또는 다음 예제 중 하나와 비슷한 정책을 생성한 다음, 함수에 할당할 수 있습니다.

다음 예제에서는 경보가 있는 계정을 지정하여 해당 계정(111122223333)의 경보만 함수를 간접적으로 호출할 수 있도록 합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "default",
    "Statement": [{
        "Sid": "AlarmAction",
        "Effect": "Allow",
        "Principal": {
            "Service": "lambda.alarms.cloudwatch.amazonaws.com"
        },
        "Action": "lambda:InvokeFunction",
        "Resource": "arn:aws:lambda:us-east-1:444455556666:function:function-name",
        "Condition": {
            "StringEquals": {
                "AWS:SourceAccount": "111122223333"
            }
        }
    }]
}
```

------

다음 예제는 범위가 좁아 지정된 계정의 지정된 경보만 함수를 간접적으로 호출할 수 있습니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "default",
  "Statement": [
    {
      "Sid": "AlarmAction",
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.alarms.cloudwatch.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:us-east-1:444455556666:function:function-name",
      "Condition": {
        "StringEquals": {
          "AWS:SourceAccount": "111122223333",
          "AWS:SourceArn": "arn:aws:cloudwatch:us-east-1:111122223333:alarm:alarm-name"
        }
      }
    }]
}
```

------

소스 계정을 지정하지 않는 정책은 혼동된 대리자 문제에 취약하므로 이러한 정책은 생성하지 않는 것이 좋습니다.

## CloudWatch 조사에 Lambda 지표 추가
<a name="Lambda-metrics-investigation"></a>

활성 CloudWatch 조사에 Lambda 지표를 추가할 수 있습니다. 문제를 조사할 때 Lambda 지표는 함수 성능 및 동작에 대한 중요한 인사이트를 제공할 수 있습니다. 예를 들어 애플리케이션 성능 문제를 조사하는 경우 기간, 오류율 또는 스로틀과 같은 Lambda 지표가 근본 원인을 식별하는 데 도움이 될 수 있습니다.

CloudWatch 조사에 Lambda 지표를 추가하는 방법:

1. [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)에서 AWS Lambda 콘솔을 엽니다.

1. **모니터링** 섹션에서 지표를 찾습니다.

1. 지표의 컨텍스트 메뉴를 열고 **조사**, **조사에 추가**를 선택하세요. 그런 다음 **조사** 창에서 조사 이름을 선택하세요.

## CloudWatch에서 Lambda로 전송된 이벤트 객체
<a name="Lambda-action-payload"></a>

Lambda 함수를 경보 작업으로 구성하면 CloudWatch는 함수를 간접적으로 호출할 때 Lambda 함수에 JSON 페이로드를 전송합니다. 이 JSON 페이로드는 함수의 이벤트 객체 역할을 합니다. 이 JSON 객체에서 데이터를 추출하여 함수에 사용할 수 있습니다. 다음은 지표 경보의 이벤트 객체에 대한 예제입니다.

```
{
  'source': 'aws.cloudwatch',
  'alarmArn': 'arn:aws:cloudwatch:us-east-1:444455556666:alarm:lambda-demo-metric-alarm',
  'accountId': '444455556666',
  'time': '2023-08-04T12:36:15.490+0000',
  'region': 'us-east-1',
  'alarmData': {
    'alarmName': 'lambda-demo-metric-alarm',
    'state': {
      'value': 'ALARM',
      'reason': 'test',
      'timestamp': '2023-08-04T12:36:15.490+0000'
    },
    'previousState': {
      'value': 'INSUFFICIENT_DATA',
      'reason': 'Insufficient Data: 5 datapoints were unknown.',
      'reasonData': '{"version":"1.0","queryDate":"2023-08-04T12:31:29.591+0000","statistic":"Average","period":60,"recentDatapoints":[],"threshold":5.0,"evaluatedDatapoints":[{"timestamp":"2023-08-04T12:30:00.000+0000"},{"timestamp":"2023-08-04T12:29:00.000+0000"},{"timestamp":"2023-08-04T12:28:00.000+0000"},{"timestamp":"2023-08-04T12:27:00.000+0000"},{"timestamp":"2023-08-04T12:26:00.000+0000"}]}',
      'timestamp': '2023-08-04T12:31:29.595+0000'
    },
    'configuration': {
      'description': 'Metric Alarm to test Lambda actions',
      'metrics': [
        {
          'id': '1234e046-06f0-a3da-9534-EXAMPLEe4c',
          'metricStat': {
            'metric': {
              'namespace': 'AWS/Logs',
              'name': 'CallCount',
              'dimensions': {
                'InstanceId': 'i-12345678'
              }
            },
            'period': 60,
            'stat': 'Average',
            'unit': 'Percent'
          },
          'returnData': True
        }
      ]
    }
  }
}
```

다음은 복합 경보의 이벤트 객체에 대한 예제입니다.

```
{
  'source': 'aws.cloudwatch',
  'alarmArn': 'arn:aws:cloudwatch:us-east-1:111122223333:alarm:SuppressionDemo.Main',
  'accountId': '111122223333',
  'time': '2023-08-04T12:56:46.138+0000',
  'region': 'us-east-1',
  'alarmData': {
    'alarmName': 'CompositeDemo.Main',
    'state': {
      'value': 'ALARM',
      'reason': 'arn:aws:cloudwatch:us-east-1:111122223333:alarm:CompositeDemo.FirstChild transitioned to ALARM at Friday 04 August, 2023 12:54:46 UTC',
      'reasonData': '{"triggeringAlarms":[{"arn":"arn:aws:cloudwatch:us-east-1:111122223333:alarm:CompositeDemo.FirstChild","state":{"value":"ALARM","timestamp":"2023-08-04T12:54:46.138+0000"}}]}',
      'timestamp': '2023-08-04T12:56:46.138+0000'
    },
    'previousState': {
      'value': 'ALARM',
      'reason': 'arn:aws:cloudwatch:us-east-1:111122223333:alarm:CompositeDemo.FirstChild transitioned to ALARM at Friday 04 August, 2023 12:54:46 UTC',
      'reasonData': '{"triggeringAlarms":[{"arn":"arn:aws:cloudwatch:us-east-1:111122223333:alarm:CompositeDemo.FirstChild","state":{"value":"ALARM","timestamp":"2023-08-04T12:54:46.138+0000"}}]}',
      'timestamp': '2023-08-04T12:54:46.138+0000',
      'actionsSuppressedBy': 'WaitPeriod',
      'actionsSuppressedReason': 'Actions suppressed by WaitPeriod'
    },
    'configuration': {
      'alarmRule': 'ALARM(CompositeDemo.FirstChild) OR ALARM(CompositeDemo.SecondChild)',
      'actionsSuppressor': 'CompositeDemo.ActionsSuppressor',
      'actionsSuppressorWaitPeriod': 120,
      'actionsSuppressorExtensionPeriod': 180
    }
  }
}
```

# 경보에서 CloudWatch 조사를 시작
<a name="Start-Investigation-Alarm"></a>

경보에서 또는 CloudWatch 경보 기록의 마지막 2주에 속하는 임의의 시점에서 CloudWatch 조사를 시작할 수 있습니다.

CloudWatch 조사에 관한 자세한 내용은 [CloudWatch 조사](Investigations.md) 섹션을 참조하세요.

## 사전 조건
<a name="w2aac19c25b7c17b7"></a>

CloudWatch 경보에서 CloudWatch 조사를 시작하려면 먼저 CloudWatch 서비스 위탁자가 조사를 시작할 수 있도록 함수에 대한 리소스 정책을 생성해야 합니다. AWS CLI를 사용하여 이 작업을 수행하려면 다음 예제와 유사한 명령을 사용합니다.

```
aws aiops put-investigation-group-policy \
    --identifier arn:aws:aiops:us-east-1:111122223333:investigation-group/investigation_group_id \
    --policy "{\"Version\":\"2008-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"aiops.alarms.cloudwatch.amazonaws.com\"},\"Action\":[\"aiops:CreateInvestigation\",\"aiops:CreateInvestigationEvent\"],\"Resource\":\"*\",\"Condition\":{\"StringEquals\":{\"aws:SourceAccount\":\"111122223333\"},\"ArnLike\":{\"aws:SourceArn\":\"arn:aws:cloudwatch:us-east-1:111122223333:alarm:*\"}}}]}" \
    --region eu-north-1
```

예제 값을 자체 AWS 계정 ID, 리전 및 조사 그룹 ID로 바꿉니다.

**CloudWatch 경보에서 조사를 시작**

1. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)에서 CloudWatch 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **경보**, **모든 경보**를 선택합니다.

1. 경보 이름을 선택합니다.

1. 조사하려는 경보 기록에서 기간을 선택합니다.

1. **조사**, **새 조사 시작**을 선택합니다.

1. **New investigation title**에 조사 이름을 입력합니다. 그런 다음, **Start investigation**을 선택합니다.

   CloudWatch 조사 어시스턴트는 원격 분석 데이터를 시작 및 스캔하여 이 상황과 관련이 있을 수 있는 데이터를 찾습니다.

1. CloudWatch 콘솔의 탐색 창에서 **조사**를 선택한 다음 방금 시작한 조사의 이름을 선택합니다.

   **조사 결과** 섹션에는 경보의 상태와 경보가 트리거된 이유에 대한 요약이 자연어로 표시됩니다.

1. (선택 사항) 경보 그래프에서 오른쪽 버튼을 클릭한 다음, 경보 또는 해당 경보가 감시하는 지표를 심층 분석하도록 선택하세요.

1. 화면 오른쪽에서 **제안 사항** 탭을 선택합니다.

   CloudWatch 조사에서 발견했으며 조사와 관련이 있을 수 있는 다른 원격 분석 목록이 표시됩니다. 이러한 조사 결과에는 기타 지표 및 CloudWatch Logs Insights 쿼리 결과가 포함될 수 있습니다. CloudWatch 조사는 경보를 기반으로 이러한 쿼리를 실행했습니다.
   + 각 조사 결과에 대해 **조사 결과에 추가** 또는 **무시**를 선택하세요.

     **조사 결과에 추가**를 선택하면 원격 분석이 **조사 결과** 섹션에 추가되고, CloudWatch 조사에서 이 정보를 사용하여 추가 스캔 및 제안 사항을 지시합니다.
   + CloudWatch Logs Insights 쿼리 결과의 경우 쿼리를 변경 또는 편집하고 다시 실행하려면, 결과별로 컨텍스트 메뉴(오른쪽 버튼 클릭)를 연 다음 **Logs Insights에서 열기**를 선택하세요. 자세한 내용은 [CloudWatch Logs Insights를 사용한 로그 분석](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html)을 참조하세요.

     다른 쿼리를 실행하기 위해 Logs Insights 페이지로 이동한 경우 쿼리 지원을 사용하여 자연어로 쿼리를 구성하도록 선택하세요. 자세한 내용은 [자연어를 사용하여 CloudWatch Log Insights 쿼리 생성 및 업데이트](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatchLogs-Insights-Query-Assist.html)를 참조하세요.
   + (선택 사항) 이 조사에 적용될 수 있는 다른 AWS 서비스의 원격 분석에 대해 알고 있는 경우, 해당 서비스의 콘솔로 이동하여 원격 분석을 조사에 추가하세요.

1. CloudWatch 조사는 **제안** 탭의 목록에 가설을 추가할 수도 있습니다. 이러한 가설은 조사를 통해 자연어로 생성됩니다.

   각 가설에 대해 **조사 결과에 추가** 또는 **무시**를 선택하세요.

1. 조사를 완료했고 문제의 근본 원인을 찾았다고 생각되면 **개요** 탭을 선택한 다음 **조사 요약**을 선택하세요. 이렇게 하면 CloudWatch 조사는 조사의 중요한 조사 결과 및 가설에 대한 요약을 자연어로 생성합니다.

# EC2 인스턴스 중지, 종료, 재부팅 또는 복구
<a name="UsingAlarmActions"></a>

Amazon CloudWatch 경보 작업을 사용하면 EC2 인스턴스를 자동으로 중지, 종료, 재부팅 또는 복구하는 경보를 생성할 수 있습니다. 인스턴스를 더 이상 실행할 필요가 없을 때 중지 또는 종료 작업을 사용하여 비용을 절약할 수 있습니다. 재부팅 및 복구 작업을 사용하면 시스템 장애가 발생할 경우 인스턴스를 자동으로 재부팅하거나 새로운 하드웨어로 인스턴스를 복구할 수 있습니다.

인스턴스를 자동으로 중지하거나 종료해야 하는 경우는 매우 다양합니다. 예를 들어 일정 기간 동안 실행한 다음 작업을 완료하는 일괄 급여 처리 작업 또는 과학적 컴퓨팅 작업 전용 인스턴스가 있을 수 있습니다. 이러한 인스턴스를 유휴 상태로 유지하여 비용이 발생하도록 하는 대신 중지하거나 종료하면 비용을 절감할 수 있습니다. 경보 작업 중지와 종료 간의 주요 차이는 나중에 다시 실행해야 하는 경우 중지된 인스턴스는 쉽게 다시 시작할 수 있다는 점입니다. 또한 동일한 인스턴스 ID 및 루트 볼륨을 유지할 수 있습니다. 그러나 종료된 인스턴스를 다시 시작할 수는 없습니다. 대신, 새 인스턴스를 시작해야 합니다.

Amazon CloudWatch에서 제공하는 기본 및 세부 모니터링 지표(AWS/EC2 네임스페이스)를 비롯한 Amazon EC2 인스턴스별 지표 및 InstanceId 값이 실행 중인 유효한 Amazon EC2 인스턴스를 참조하는 동안에 "InstanceId=" 차원을 포함하는 사용자 지정 지표에 대해 설정된 경보에 중지, 종료 또는 재부팅 작업을 추가할 수 있습니다. `StatusCheckFailed_Instance`를 제외하고 인스턴스당 Amazon EC2 지표에 설정된 경보에 복구 작업을 추가할 수도 있습니다.

**중요**  
Amazon EC2 지표에 구성된 경보는 누락된 지표 데이터 포인트가 있는 경우 일시적으로 INSUFICITENT\$1DATA 상태로 전환될 수 있습니다. 드물기는 하지만, Amazon EC2 인스턴스가 정상인 경우에도 지표 보고가 중단되면 이 문제가 발생할 수 있습니다. 중지, 종료, 재부팅 또는 복구 작업을 수행하도록 구성된 Amazon EC2 지표에 대한 경보의 경우 누락된 데이터를 `missing`으로 처리하고 경보 상태일 때만 해당 경보를 트리거하도록 경보를 구성하는 것이 좋습니다.  
경보가 설정된 누락된 지표에 대해 조치를 취하도록 CloudWatch를 구성하는 방법에 대한 자세한 내용은 [CloudWatch 경보가 누락 데이터를 처리하는 방법 구성](alarms-and-missing-data.md) 섹션을 참조하세요.

인스턴스를 재부팅, 중지 또는 종료할 수 있는 CloudWatch 경보 작업을 설정하려면 서비스 연결 IAM 역할인 *AWSServiceRoleForCloudWatchEvents*를 사용해야 합니다. AWSServiceRoleForCloudWatchEvents IAM 역할을 사용하면 AWS가 사용자를 대신하여 경보 작업을 수행할 수 있습니다.

CloudWatch Events에 대한 서비스 연결 역할을 생성하려면 다음 명령을 사용합니다.

```
aws iam create-service-linked-role --aws-service-name events.amazonaws.com
```

**콘솔 지원**  
CloudWatch 콘솔 또는 Amazon EC2 콘솔을 사용하여 경보를 생성할 수 있습니다. 이 설명서의 절차에서는 CloudWatch 콘솔을 사용합니다. Amazon EC2 콘솔을 사용하는 절차는 *Amazon EC2 사용 설명서*의 [인스턴스를 중지, 종료, 재부팅 또는 복구하는 경보 만들기](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UsingAlarmActions.html)를 참조하세요.

**권한**  
AWS Identity and Access Management(IAM) 계정을 사용하여 EC2 작업 또는 Systems Manager OpsItem 작업을 수행하는 경보를 생성하거나 수정하는 경우 `iam:CreateServiceLinkedRole` 권한이 있어야 합니다.

**Topics**
+ [Amazon CloudWatch 경보에 중지 작업 추가하기](#AddingStopActions)
+ [Amazon CloudWatch 경보에 종료 작업 추가하기](#AddingTerminateActions)
+ [Amazon CloudWatch 경보에 재부팅 작업 추가하기](#AddingRebootActions)
+ [Amazon CloudWatch 경보에 복구 작업 추가하기](#AddingRecoverActions)
+ [트리거한 경보 및 작업 기록 보기](#ViewAlarmHistory)

## Amazon CloudWatch 경보에 중지 작업 추가하기
<a name="AddingStopActions"></a>

특정 임계값에 도달한 경우 Amazon EC2 인스턴스를 중지하는 경보를 만들 수 있습니다. 예를 들어 개발 또는 테스트 인스턴스를 실행한 후 종료하는 것을 잊을 수 있습니다. 24시간 동안 평균 CPU 사용률이 10% 아래로 떨어지는 경우 즉, 유휴 상태로 더 이상 사용되지 않는 경우 트리거되는 경보를 만들 수 있습니다. 필요에 맞춰 임계값 및 기간을 조정할 수 있습니다. 또한 경보가 트리거되면 이메일을 받을 수 있도록 SNS 알림을 추가할 수 있습니다.

Amazon Elastic Block Store 볼륨을 루트 디바이스로 사용하는 Amazon EC2 인스턴스는 중지하거나 종료할 수 있지만, 인스턴스 스토어를 루트 디바이스로 사용하는 인스턴스는 종료만 할 수 있습니다.

**Amazon CloudWatch 콘솔을 사용하여 유휴 인스턴스를 중지하는 경보를 생성하려면**

1. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)에서 CloudWatch 콘솔을 엽니다.

1. 탐색 창에서 **경보(Alarms)** **모든 경보(All Alarms)**를 선택합니다.

1. **경보 생성(Create alarm)**을 선택하세요.

1. **지표 선택(Select Metric)**을 선택합니다.

1. **AWS 네임스페이스( namespaces)**에서 **EC2**를 선택합니다.

1. 해결 방법:

   1. **인스턴스별 지표(Per-Instance Metrics)**를 선택합니다.

   1. 해당 인스턴스와 **CPUUtilization** 지표가 있는 행에서 확인란을 선택합니다.

   1. **그래프로 표시된 지표** 탭을 선택합니다.

   1. 통계의 경우 **평균(Average)**을 선택합니다.

   1. 기간(예: **1 Hour**)을 선택합니다.

   1. **지표 선택**을 선택합니다.

1. **조건(Conditions)**에서 다음을 수행하십시오:

   1. **Static**(정적)을 선택합니다.

   1. **CPUUtilization이 있는 경우 항상(Whenever CPUUtilization is)**에서 **낮음(Lower)**을 선택합니다.

   1. **보다(than)**에 **10**을 입력합니다.

   1. **다음(Next)**을 선택합니다.

   1. **알림(Notification)**의 **알림 보내기(Send notification to)**에서 기존 SNS 주제를 선택하거나 새로 만듭니다.

      SNS 주제를 생성하려면 **새 목록(New list)**을 선택합니다. **알림 보내기(Send notification to)**에 SNS 주제의 이름을 입력합니다(예: Stop\$1EC2\$1Instance). **이메일 목록(Email list)**에서 경보가 `ALARM` 상태로 변경될 때 알림을 받을 이메일 주소 목록을 쉼표로 구분하여 입력합니다. 각 이메일 주소로 주제 구독 확인 이메일이 전송됩니다. 수신자가 구독을 확인해야만 이 이메일 주소로 알림이 전송될 수 있습니다.

   1. **EC2 작업 추가(Add EC2 Action)**를 선택합니다.

   1. **경보 상태 트리거(Alarm state trigger)**에서 **경보(In Alarm)**를 선택합니다. **다음 작업 수행(Take the following action)**에서 **이 인스턴스 중지(Stop this instance)**를 선택합니다.

   1. **다음**을 선택합니다.

   1. 경보 이름 및 설명을 입력합니다. 이름은 ASCII 문자만 포함해야 합니다. 그리고 **다음(Next)**을 선택합니다.

   1. **미리 보기 및 생성(Preview and create)**에서 정보 및 조건이 원하는 내용인지 확인한 다음 **경보 생성(Create alarm)**을 선택합니다.

## Amazon CloudWatch 경보에 종료 작업 추가하기
<a name="AddingTerminateActions"></a>

인스턴스에 대해 종료 보호가 비활성화되어 있는 경우에 한해서 특정 임계값에 도달한 경우 EC2 인스턴스를 자동으로 종료하는 경보를 만들 수 있습니다. 예를 들어 인스턴스의 작업 완료 후 해당 인스턴스가 다시 필요 없는 경우 인스턴스를 종료하려고 할 수 있습니다. 나중에 인스턴스를 사용하려는 경우에는 종료하지 말고 중지해야 합니다. 인스턴스에 대한 종료 보호 사용 및 사용 중지에 대한 자세한 내용은 **Amazon EC2 사용 설명서의 [인스턴스에 대한 종료 보호 활성화](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_ChangingDisableAPITermination.html) 섹션을 참조하세요.

**Amazon CloudWatch 콘솔을 사용하여 유휴 인스턴스를 종료하는 경보를 생성하려면**

1. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)에서 CloudWatch 콘솔을 엽니다.

1. 탐색 창에서 **경보(Alarms)**, **경보 생성(Create Alarm)**을 선택합니다.

1. **지표 선택(Select Metric)** 단계에서 다음을 수행합니다.

   1. **EC2 지표(EC2 Metrics)**에서 **인스턴스별 지표(Per-Instance Metrics)**를 선택합니다.

   1. 해당 인스턴스와 **CPUUtilization** 지표가 있는 행을 선택합니다.

   1. 통계의 경우 **평균(Average)**을 선택합니다.

   1. 기간(예: **1 Hour**)을 선택합니다.

   1. **다음**을 선택합니다.

1. **경보 정의(Define Alarm)** 단계에서 다음을 수행합니다.

   1. **경보 임계값(Alarm Threshold)**에 경보의 고유 이름(예: Terminate EC2 instance)과 경보에 대한 설명(예: CPU 유휴 시간이 너무 길어서 EC2 인스턴스 종료)을 입력합니다. 경보 이름은 ASCII 문자만 포함해야 합니다.

   1. **Whenever**의 **is**에서 **<**를 선택하고 **10**을 입력합니다. **기간(for)**에 연속 기간으로 **24**를 입력합니다.

      **경보 미리 보기(Alarm Preview)** 아래에 임계값이 그래픽으로 표시됩니다.

   1. **알림(Notification)**의 **알림 보내기(Send notification to)**에서 기존 SNS 주제를 선택하거나 새로 만듭니다.

      SNS 주제를 생성하려면 **새 목록(New list)**을 선택합니다. **알림 보내기(Send notification to)**에 SNS 주제의 이름을 입력합니다(예: Terminate\$1EC2\$1Instance). **이메일 목록(Email list)**에서 경보가 `ALARM` 상태로 변경될 때 알림을 받을 이메일 주소 목록을 쉼표로 구분하여 입력합니다. 각 이메일 주소로 주제 구독 확인 이메일이 전송됩니다. 수신자가 구독을 확인해야만 이 이메일 주소로 알림이 전송될 수 있습니다.

   1. **EC2 작업(EC2 Action)**을 선택합니다.

   1. **이 경보가 발생할 경우 항상(Whenever this alarm)**에 **상태가 ALARM입니다(State is ALARM)**를 선택합니다. **이 작업을 수행(Take this action)**에서 **인스턴스 종료(Terminate this instance)**를 선택합니다.

   1. **경보 생성**을 선택합니다.

## Amazon CloudWatch 경보에 재부팅 작업 추가하기
<a name="AddingRebootActions"></a>

Amazon EC2 인스턴스를 모니터링하고 인스턴스를 자동으로 재부팅하는 Amazon CloudWatch 경보를 만들 수 있습니다. 재부팅 경보 작업은 인스턴스 상태 확인 오류(복구 경보 작업은 시스템 상태 확인 오류에 적합)에 권장됩니다. 인스턴스 재부팅은 운영 체제 재부팅과 같습니다. 대부분의 경우 인스턴스를 재부팅하는 데는 몇 분 밖에 걸리지 않습니다. 인스턴스를 재부팅하는 경우 동일한 물리적 호스트에 남아 있으므로 퍼블릭 DNS 이름, 프라이빗 IP 주소 및 인스턴스 저장소 볼륨의 모든 데이터가 유지됩니다.

인스턴스를 재부팅해도 인스턴스를 중지했다가 다시 시작할 때와는 달리 새 인스턴스 청구 시간이 시작되지 않습니다. 인스턴스 재부팅에 대한 자세한 내용은 **Amazon EC2 사용 설명서의 [인스턴스 재부팅](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-reboot.html) 섹션을 참조하세요.

**중요**  
재부팅과 복원 작업 간에 경합 상태가 발생하지 않도록 하려면 재부팅 경보와 복원 경보에 동일한 평가 기간을 설정하지 마십시오. 재부팅 경보를 각각 1분의 평가 기간 3회로 설정하는 것이 좋습니다.

**Amazon CloudWatch 콘솔을 사용하여 인스턴스를 재부팅하는 경보를 생성하려면**

1. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)에서 CloudWatch 콘솔을 엽니다.

1. 탐색 창에서 **경보(Alarms)**, **경보 생성(Create Alarm)**을 선택합니다.

1. **지표 선택(Select Metric)** 단계에서 다음을 수행합니다.

   1. **EC2 지표(EC2 Metrics)**에서 **인스턴스별 지표(Per-Instance Metrics)**를 선택합니다.

   1. 해당 인스턴스와 **StatusCheckFailed\$1Instance** 지표가 있는 행을 선택합니다.

   1. 통계의 경우 **최소(Minimum)**를 선택합니다.

   1. 기간(예: **1 Minute**)을 선택합니다.

   1. **다음**을 선택합니다.

1. **경보 정의(Define Alarm)** 단계에서 다음을 수행합니다.

   1. **경보 임계값(Alarm Threshold)**에 경보의 고유 이름(예: Reboot EC2 instance)과 경보에 대한 설명(예: CPU 유휴 시간이 너무 길어서 EC2 인스턴스 재부팅)을 입력합니다. 경보 이름은 ASCII 문자만 포함해야 합니다.

   1. **Whenever**의 **is**에서 **>**를 선택하고 **0**을 입력합니다. **기간(for)**에 연속 기간으로 **3**를 입력합니다.

      **경보 미리 보기(Alarm Preview)** 아래에 임계값이 그래픽으로 표시됩니다.

   1. **알림(Notification)**의 **알림 보내기(Send notification to)**에서 기존 SNS 주제를 선택하거나 새로 만듭니다.

      SNS 주제를 생성하려면 **새 목록(New list)**을 선택합니다. **알림 보내기(Send notification to)**에 SNS 주제의 이름을 입력합니다(예: Reboot\$1EC2\$1Instance). **이메일 목록(Email list)**에서 경보가 `ALARM` 상태로 변경될 때 알림을 받을 이메일 주소 목록을 쉼표로 구분하여 입력합니다. 각 이메일 주소로 주제 구독 확인 이메일이 전송됩니다. 수신자가 구독을 확인해야만 이 이메일 주소로 알림이 전송될 수 있습니다.

   1. **EC2 작업(EC2 Action)**을 선택합니다.

   1. **이 경보가 발생할 경우 항상(Whenever this alarm)**에 **상태가 ALARM입니다(State is ALARM)**를 선택합니다. **이 작업을 수행(Take this action)**에서 **인스턴스 재부팅(Reboot this instance)**을 선택합니다.

   1. **경보 생성**을 선택합니다.

## Amazon CloudWatch 경보에 복구 작업 추가하기
<a name="AddingRecoverActions"></a>

Amazon EC2 인스턴스를 모니터링하고 기본 하드웨어 장애나 복구에 AWS 개입이 필요한 문제로 인해 인스턴스가 손상된 경우 인스턴스를 자동으로 복구하는 Amazon CloudWatch 경보를 생성할 수 있습니다. 종료한 인스턴스는 복구할 수 없습니다. 복구된 인스턴스는 인스턴스 ID, 프라이빗 IP 주소, 탄력적 IP 주소 및 모든 인스턴스 메타데이터를 포함하여 원본 인스턴스와 동일합니다.

`StatusCheckFailed_System` 경보가 트리거되고 복구 작업이 시작되면 경보를 생성하고 복구 작업을 연결했을 때 선택한 Amazon SNS 주제로 알림을 받게 됩니다. 인스턴스 복구 중에 인스턴스를 재부팅할 때 인스턴스가 마이그레이션되고 모든 인 메모리 데이터가 손실됩니다. 프로세스가 완료되면 해당 경보를 위해 구성해 둔 SNS 주제로 정보가 게시됩니다. 이 SNS 주제에 가입되어 있는 사람은 누구나 복구 시도 상태와 세부 지침이 포함된 이메일 알림을 받게 됩니다. 복구된 인스턴스에서 인스턴스를 재부팅하라는 메시지가 나타납니다.

복구 작업은 `StatusCheckFailed_Instance`가 아닌 `StatusCheckFailed_System`을 통해서만 사용할 수 있습니다.

시스템 상태 확인이 실패하게 되는 문제의 예를 들면 다음과 같습니다.
+ 네트워크 연결 끊김
+ 시스템 전원 중단
+ 물리적 호스트의 소프트웨어 문제
+ 네트워크 연결성에 영향을 주는 물리적 호스트의 하드웨어 문제

복구 작업은 일부 인스턴스 유형에서만 지원됩니다. 지원되는 인스턴스 유형과 기타 요구 사항에 대한 자세한 내용은 [인스턴스 복구](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html)와 [요구 사항](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html#requirements-for-recovery)을 참조하세요.

**중요**  
재부팅과 복원 작업 간에 경합 상태가 발생하지 않도록 하려면 재부팅 경보와 복원 경보에 동일한 평가 기간을 설정하지 마십시오. 복원 경보는 각각 1분의 평가 기간 2회로 설정하고 재부팅 경보는 각각 1분의 평가 기간 3회로 설정하는 것이 좋습니다.

**Amazon CloudWatch 콘솔을 사용하여 인스턴스를 복구하는 경보를 생성하려면**

1. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)에서 CloudWatch 콘솔을 엽니다.

1. 탐색 창에서 **경보(Alarms)** **모든 경보(All Alarms)**를 선택합니다.

1. **경보 생성**을 선택합니다.

1. **지표 선택**을 선택하고 다음 중 하나를 수행합니다.

   1. **EC2 지표**에서 **인스턴스별 지표**를 선택합니다.

   1. 해당 인스턴스와 **StatusCheckFailed\$1System** 지표가 있는 행을 선택한 다음 **지표 선택**을 선택합니다.

   1. 통계의 경우 **최소(Minimum)**를 선택합니다.

   1. 기간(예: **1 Minute**)을 선택합니다.
**중요**  
재부팅과 복원 작업 간에 경합 상태가 발생하지 않도록 하려면 재부팅 경보와 복원 경보에 동일한 평가 기간을 설정하지 마십시오. 복구 경보는 각각 1분의 평가 기간 2회로 설정하는 것이 좋습니다.

1. **조건**에서 다음을 수행합니다.

   1. **임계값 유형**에서 **정적**을 선택합니다.

   1. **언제든지**에서 **큰 값**을 선택하고 **...보다**에 **0**을 입력합니다.

   1. **추가 구성**을 선택한 다음 **경보를 생성할 데이터 포인트**에 대해 2개 **중** 2개를 지정합니다.

1. **다음**을 선택합니다.

1. **알림**에서 다음을 수행합니다.

   1. **경보 상태 트리거**에서 **경보**를 선택합니다.

   1. **다음 SNS 주제에 알림 보내기**에서 기존 SNS 주제를 선택하거나 새로 만듭니다.

   1. **EC2 작업 추가(Add EC2 Action)**를 선택합니다.

   1. **경보 상태 트리거(Alarm state trigger)**에서 **경보(In Alarm)**를 선택합니다.

   1. **다음 작업 수행**에서 **이 인스턴스 복구**를 선택합니다.

   1. **다음**을 선택합니다.

1. **경보 이름**에 경보의 고유한 이름(예: **Recover EC2 instance**)과 경보에 대한 설명(예: **Recover EC2 instance when health checks fail**)을 입력합니다. 경보 이름은 ASCII 문자만 포함해야 합니다.

1. **다음**을 선택합니다.

1. **경보 생성**을 선택합니다.

## 트리거한 경보 및 작업 기록 보기
<a name="ViewAlarmHistory"></a>

Amazon CloudWatch 콘솔을 사용하여 경보 및 작업 기록을 볼 수 있습니다. Amazon CloudWatch는 지난 30일 동안의 경보 및 작업 기록을 보관합니다.

**트리거된 경보 및 작업 기록을 보려면**

1. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)에서 CloudWatch 콘솔을 엽니다.

1. 탐색 창에서 **경보(Alarms)**를 선택한 후 특정 경보를 선택합니다.

1. 가장 최근의 상태 변화와 함께 시간 및 지표 값을 보려면 **세부 정보(Details)**를 선택합니다.

1. 최신 기록 항목을 보려면 **내역(History)**을 선택합니다.

# 경보 이벤트 및 EventBridge
<a name="cloudwatch-and-eventbridge"></a>

CloudWatch는 CloudWatch 경보가 생성, 업데이트, 삭제 또는 변경될 때마다 Amazon EventBridge에 이벤트를 전송합니다. EventBridge 및 이러한 이벤트를 사용하여 경보 상태가 변경될 때 알림과 같은 작업을 수행하는 규칙을 작성할 수 있습니다. 자세한 내용은 [Amazon EventBridge란 무엇인가요?](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) 단원을 참조하세요.

CloudWatch는 EventBridge로의 경보 상태 변경 이벤트 전달을 보장합니다.

## 경보 상태 변경 이벤트
<a name="CloudWatch-state-change-events"></a>

이 섹션에서는 경보 상태가 변경될 때 EventBridge로 전송되는 이벤트 예제를 보여줍니다. 탭을 선택하여 다양한 유형의 경보 상태 변경 이벤트를 확인합니다.

------
#### [ Single Metric Alarm ]

단일 지표 경보가 상태를 변경할 때 생성되는 이벤트. 이러한 이벤트로 경보의 평가 결과가 포함된 `state` 및 `previousState` 필드가 포함됩니다.

```
{
    "version": "0",
    "id": "c4c1c1c9-6542-e61b-6ef0-8c4d36933a92",
    "detail-type": "CloudWatch Alarm State Change",
    "source": "aws.cloudwatch",
    "account": "123456789012",
    "time": "2019-10-02T17:04:40Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:cloudwatch:us-east-1:123456789012:alarm:ServerCpuTooHigh"
    ],
    "detail": {
        "alarmName": "ServerCpuTooHigh",
        "configuration": {
            "description": "Goes into alarm when server CPU utilization is too high!",
            "metrics": [
                {
                    "id": "30b6c6b2-a864-43a2-4877-c09a1afc3b87",
                    "metricStat": {
                        "metric": {
                            "dimensions": {
                                "InstanceId": "i-12345678901234567"
                            },
                            "name": "CPUUtilization",
                            "namespace": "AWS/EC2"
                        },
                        "period": 300,
                        "stat": "Average"
                    },
                    "returnData": true
                }
            ]
        },
        "previousState": {
            "reason": "Threshold Crossed: 1 out of the last 1 datapoints [0.0666851903306472 (01/10/19 13:46:00)] was not greater than the threshold (50.0) (minimum 1 datapoint for ALARM -> OK transition).",
            "reasonData": "{\"version\":\"1.0\",\"queryDate\":\"2019-10-01T13:56:40.985+0000\",\"startDate\":\"2019-10-01T13:46:00.000+0000\",\"statistic\":\"Average\",\"period\":300,\"recentDatapoints\":[0.0666851903306472],\"threshold\":50.0}",
            "timestamp": "2019-10-01T13:56:40.987+0000",
            "value": "OK"
        },
        "state": {
            "reason": "Threshold Crossed: 1 out of the last 1 datapoints [99.50160229693434 (02/10/19 16:59:00)] was greater than the threshold (50.0) (minimum 1 datapoint for OK -> ALARM transition).",
            "reasonData": "{\"version\":\"1.0\",\"queryDate\":\"2019-10-02T17:04:40.985+0000\",\"startDate\":\"2019-10-02T16:59:00.000+0000\",\"statistic\":\"Average\",\"period\":300,\"recentDatapoints\":[99.50160229693434],\"threshold\":50.0}",
            "timestamp": "2019-10-02T17:04:40.989+0000",
            "value": "ALARM"
        },
        "muteDetail": {
            "mutedByArn": "arn:aws:cloudwatch:us-east-1:1234567890:alarm-mute-rule:testMute",
            "muteWindowStart": "2026-01-01T10:00:00.000+0000",
            "muteWindowEnd": "2026-01-01T12:00:00.000+0000"
        }
    }
}
```

------
#### [ Metric Math Alarm ]

지표 수학 경보가 상태를 변경할 때 생성되는 이벤트. 이러한 이벤트로 `configuration` 필드에 수학 표현식 세부 정보가 포함됩니다.

```
{
    "version": "0",
    "id": "2dde0eb1-528b-d2d5-9ca6-6d590caf2329",
    "detail-type": "CloudWatch Alarm State Change",
    "source": "aws.cloudwatch",
    "account": "123456789012",
    "time": "2019-10-02T17:20:48Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:cloudwatch:us-east-1:123456789012:alarm:TotalNetworkTrafficTooHigh"
    ],
    "detail": {
        "alarmName": "TotalNetworkTrafficTooHigh",
        "configuration": {
            "description": "Goes into alarm if total network traffic exceeds 10Kb",
            "metrics": [
                {
                    "expression": "SUM(METRICS())",
                    "id": "e1",
                    "label": "Total Network Traffic",
                    "returnData": true
                },
                {
                    "id": "m1",
                    "metricStat": {
                        "metric": {
                            "dimensions": {
                                "InstanceId": "i-12345678901234567"
                            },
                            "name": "NetworkIn",
                            "namespace": "AWS/EC2"
                        },
                        "period": 300,
                        "stat": "Maximum"
                    },
                    "returnData": false
                },
                {
                    "id": "m2",
                    "metricStat": {
                        "metric": {
                            "dimensions": {
                                "InstanceId": "i-12345678901234567"
                            },
                            "name": "NetworkOut",
                            "namespace": "AWS/EC2"
                        },
                        "period": 300,
                        "stat": "Maximum"
                    },
                    "returnData": false
                }
            ]
        },
        "previousState": {
            "reason": "Unchecked: Initial alarm creation",
            "timestamp": "2019-10-02T17:20:03.642+0000",
            "value": "INSUFFICIENT_DATA"
        },
        "state": {
            "reason": "Threshold Crossed: 1 out of the last 1 datapoints [45628.0 (02/10/19 17:10:00)] was greater than the threshold (10000.0) (minimum 1 datapoint for OK -> ALARM transition).",
            "reasonData": "{\"version\":\"1.0\",\"queryDate\":\"2019-10-02T17:20:48.551+0000\",\"startDate\":\"2019-10-02T17:10:00.000+0000\",\"period\":300,\"recentDatapoints\":[45628.0],\"threshold\":10000.0}",
            "timestamp": "2019-10-02T17:20:48.554+0000",
            "value": "ALARM"
        },
        "muteDetail": {
            "mutedByArn": "arn:aws:cloudwatch:us-east-1:1234567890:alarm-mute-rule:testMute",
            "muteWindowStart": "2026-01-01T10:00:00.000+0000",
            "muteWindowEnd": "2026-01-01T12:00:00.000+0000"
        }
    }
}
```

------
#### [ Anomaly Detection Alarm ]

이상 감지 경보가 상태를 변경할 때 생성되는 이벤트. 이러한 이벤트로 `reasonData` 필드의 상한 및 하한 임계치가 포함됩니다.

```
{
    "version": "0",
    "id": "daafc9f1-bddd-c6c9-83af-74971fcfc4ef",
    "detail-type": "CloudWatch Alarm State Change",
    "source": "aws.cloudwatch",
    "account": "123456789012",
    "time": "2019-10-03T16:00:04Z",
    "region": "us-east-1",
    "resources": ["arn:aws:cloudwatch:us-east-1:123456789012:alarm:EC2 CPU Utilization Anomaly"],
    "detail": {
        "alarmName": "EC2 CPU Utilization Anomaly",
        "state": {
            "value": "ALARM",
            "reason": "Thresholds Crossed: 1 out of the last 1 datapoints [0.0 (03/10/19 15:58:00)] was less than the lower thresholds [0.020599444741798756] or greater than the upper thresholds [0.3006915352732461] (minimum 1 datapoint for OK -> ALARM transition).",
            "reasonData": "{\"version\":\"1.0\",\"queryDate\":\"2019-10-03T16:00:04.650+0000\",\"startDate\":\"2019-10-03T15:58:00.000+0000\",\"period\":60,\"recentDatapoints\":[0.0],\"recentLowerThresholds\":[0.020599444741798756],\"recentUpperThresholds\":[0.3006915352732461]}",
            "timestamp": "2019-10-03T16:00:04.653+0000"
        },
        "previousState": {
            "value": "OK",
            "reason": "Thresholds Crossed: 1 out of the last 1 datapoints [0.166666666664241 (03/10/19 15:57:00)] was not less than the lower thresholds [0.0206719426210418] or not greater than the upper thresholds [0.30076870222143803] (minimum 1 datapoint for ALARM -> OK transition).",
            "reasonData": "{\"version\":\"1.0\",\"queryDate\":\"2019-10-03T15:59:04.670+0000\",\"startDate\":\"2019-10-03T15:57:00.000+0000\",\"period\":60,\"recentDatapoints\":[0.166666666664241],\"recentLowerThresholds\":[0.0206719426210418],\"recentUpperThresholds\":[0.30076870222143803]}",
            "timestamp": "2019-10-03T15:59:04.672+0000"
        },
        "muteDetail": {
            "mutedByArn": "arn:aws:cloudwatch:us-east-1:1234567890:alarm-mute-rule:testMute",
            "muteWindowStart": "2026-01-01T10:00:00.000+0000",
            "muteWindowEnd": "2026-01-01T12:00:00.000+0000"
        },
        "configuration": {
            "description": "Goes into alarm if CPU Utilization is out of band",
            "metrics": [{
                "id": "m1",
                "metricStat": {
                    "metric": {
                        "namespace": "AWS/EC2",
                        "name": "CPUUtilization",
                        "dimensions": {
                            "InstanceId": "i-12345678901234567"
                        }
                    },
                    "period": 60,
                    "stat": "Average"
                },
                "returnData": true
            }, {
                "id": "ad1",
                "expression": "ANOMALY_DETECTION_BAND(m1, 0.8)",
                "label": "CPUUtilization (expected)",
                "returnData": true
            }]
        }
    }
}
```

------
#### [ Composite Alarm ]

복합 경보가 상태를 변경할 때 생성되는 이벤트. 이러한 이벤트로 `actionsSuppressedBy` 및 `actionsSuppressedReason` 필드의 금지 정보가 포함됩니다.

```
{
    "version": "0",
    "id": "d3dfc86d-384d-24c8-0345-9f7986db0b80",
    "detail-type": "CloudWatch Alarm State Change",
    "source": "aws.cloudwatch",
    "account": "123456789012",
    "time": "2022-07-22T15:57:45Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:cloudwatch:us-east-1:123456789012:alarm:ServiceAggregatedAlarm"
    ],
    "detail": {
        "alarmName": "ServiceAggregatedAlarm",
        "state": {
            "actionsSuppressedBy": "WaitPeriod",
            "actionsSuppressedReason": "Actions suppressed by WaitPeriod",
            "value": "ALARM",
            "reason": "arn:aws:cloudwatch:us-east-1:123456789012:alarm:SuppressionDemo.EventBridge.FirstChild transitioned to ALARM at Friday 22 July, 2022 15:57:45 UTC",
            "reasonData": "{\"triggeringAlarms\":[{\"arn\":\"arn:aws:cloudwatch:us-east-1:123456789012:alarm:ServerCpuTooHigh\",\"state\":{\"value\":\"ALARM\",\"timestamp\":\"2022-07-22T15:57:45.394+0000\"}}]}",
            "timestamp": "2022-07-22T15:57:45.394+0000"
        },
        "previousState": {
            "value": "OK",
            "reason": "arn:aws:cloudwatch:us-east-1:123456789012:alarm:SuppressionDemo.EventBridge.Main was created and its alarm rule evaluates to OK",
            "reasonData": "{\"triggeringAlarms\":[{\"arn\":\"arn:aws:cloudwatch:us-east-1:123456789012:alarm:TotalNetworkTrafficTooHigh\",\"state\":{\"value\":\"OK\",\"timestamp\":\"2022-07-14T16:28:57.770+0000\"}},{\"arn\":\"arn:aws:cloudwatch:us-east-1:123456789012:alarm:ServerCpuTooHigh\",\"state\":{\"value\":\"OK\",\"timestamp\":\"2022-07-14T16:28:54.191+0000\"}}]}",
            "timestamp": "2022-07-22T15:56:14.552+0000"
        },
        "configuration": {
            "alarmRule": "ALARM(ServerCpuTooHigh) OR ALARM(TotalNetworkTrafficTooHigh)",
            "actionsSuppressor": "ServiceMaintenanceAlarm",
            "actionsSuppressorWaitPeriod": 120,
            "actionsSuppressorExtensionPeriod": 180
        },
        "muteDetail": {
            "mutedByArn": "arn:aws:cloudwatch:us-east-1:1234567890:alarm-mute-rule:testMute",
            "muteWindowStart": "2026-01-01T10:00:00.000+0000",
            "muteWindowEnd": "2026-01-01T12:00:00.000+0000"
        }
    }
}
```

------
#### [ Multi Time Series Alarm ]

 경보 기고자 또는 경보의 상태가 변경될 때 생성되는 이벤트. 경보 기고자 상태 변경 이벤트에는 경보 기고자의 ID 및 속성과 임계치를 위반한 최신 데이터 포인트가 포함됩니다. 경보 상태 변경 이벤트에는 경보 상태 이유에서 경보를 전환시키는 기고자 수에 대한 요약이 포함됩니다.

**경보 기고자 예제**

```
{
  "version": "0",
  "id": "6d226bbc-07f0-9a31-3359-1736968f8ded",
  "detail-type": "CloudWatch Alarm Contributor State Change",
  "source": "aws.cloudwatch",
  "account": "123456789012",
  "time": "2025-12-01T13:42:04Z",
  "region": "us-east-1",
  "resources": [
    "arn:aws:cloudwatch:us-east-1:123456789012:alarm:DynamoDBInsightsAlarm"
  ],
  "detail": {
    "alarmName": "DynamoDBInsightsAlarm",
    "alarmContributor": {
      "id": "6d442278dba546f6",
      "attributes": {
        "TableName": "example-dynamodb-table-name"
      }
    },
    "state": {
      "value": "ALARM",
      "reason": "Threshold Crossed: 1 datapoint was less than the threshold (1.0). The most recent datapoint which crossed the threshold: [0.0 (01/12/25 13:34:00)].",
      "timestamp": "2025-12-01T13:42:04.919+0000"
    },
    "configuration": {
      "metrics": [
        {
          "id": "m1",
          "expression": "SELECT AVG(ConsumedWriteCapacityUnits) FROM \"AWS/DynamoDB\" GROUP BY TableName ORDER BY MAX() DESC",
          "returnData":true,
          "period": 60
        }
      ],
      "description": "Metrics Insights alarm for DynamoDB ConsumedWriteCapacity per TableName"
    },
    "muteDetail": {
        "mutedByArn": "arn:aws:cloudwatch:us-east-1:1234567890:alarm-mute-rule:testMute",
        "muteWindowStart": "2026-01-01T10:00:00.000+0000",
        "muteWindowEnd": "2026-01-01T12:00:00.000+0000"
    }
  }
}
```

**경보 예제**

```
{
  "version": "0",
  "id": "80ddd249-dedf-7c4d-0708-0eb78132dd78",
  "detail-type": "CloudWatch Alarm State Change",
  "source": "aws.cloudwatch",
  "account": "123456789012",
  "time": "2025-12-01T13:42:04Z",
  "region": "us-east-1",
  "resources": [
    "arn:aws:cloudwatch:us-east-1:123456789012:alarm:DynamoDBInsightsAlarm"
  ],
  "detail": {
    "alarmName": "DynamoDBInsightsAlarm",
    "state": {
      "value": "ALARM",
      "reason": "6 out of 6 time series evaluated to ALARM",
      "timestamp": "2025-12-01T13:42:04.919+0000"
    },
    "previousState": {
      "value": "INSUFFICIENT_DATA",
      "reason": "Unchecked: Initial alarm creation",
      "timestamp": "2025-12-01T13:40:50.600+0000"
    },
    "configuration": {
      "metrics": [
        {
          "id": "m1",
          "expression": "SELECT AVG(ConsumedWriteCapacityUnits) FROM \"AWS/DynamoDB\" GROUP BY TableName ORDER BY MAX() DESC",
          "returnData": true,
          "period": 60
        }
      ],
      "description": "Metrics Insights alarm for DynamoDB ConsumedWriteCapacity per TableName"
    }
  }
}
```

------

## 경보 구성 변경 이벤트
<a name="CloudWatch-config-change-events"></a>

이 섹션에서는 경보 구성이 변경될 때 EventBridge로 전송되는 이벤트 예제를 보여줍니다. 구성 변경에는 경보 생성, 업데이트 또는 삭제가 포함됩니다.

------
#### [ Creation Events ]

새 경보가 생성될 때 생성되는 이벤트. 이러한 이벤트로 `operation`이 'create'로 설정된 `configuration` 필드의 초기 경보 구성이 포함됩니다.

**복합 경보 예제**

```
{
    "version": "0",
    "id": "91535fdd-1e9c-849d-624b-9a9f2b1d09d0",
    "detail-type": "CloudWatch Alarm Configuration Change",
    "source": "aws.cloudwatch",
    "account": "123456789012",
    "time": "2022-03-03T17:06:22Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:cloudwatch:us-east-1:123456789012:alarm:ServiceAggregatedAlarm"
    ],
    "detail": {
        "alarmName": "ServiceAggregatedAlarm",
        "operation": "create",
        "state": {
            "value": "INSUFFICIENT_DATA",
            "timestamp": "2022-03-03T17:06:22.289+0000"
        },
        "configuration": {
            "alarmRule": "ALARM(ServerCpuTooHigh) OR ALARM(TotalNetworkTrafficTooHigh)",
            "alarmName": "ServiceAggregatedAlarm",
            "description": "Aggregated monitor for instance",
            "actionsEnabled": true,
            "timestamp": "2022-03-03T17:06:22.289+0000",
            "okActions": [],
            "alarmActions": [],
            "insufficientDataActions": []
        }
    }
}
```

**억제기를 사용한 복합 경보 예제**

```
{
    "version": "0",
    "id": "454773e1-09f7-945b-aa2c-590af1c3f8e0",
    "detail-type": "CloudWatch Alarm Configuration Change",
    "source": "aws.cloudwatch",
    "account": "123456789012",
    "time": "2022-07-14T13:59:46Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:cloudwatch:us-east-1:123456789012:alarm:ServiceAggregatedAlarm"
    ],
    "detail": {
        "alarmName": "ServiceAggregatedAlarm",
        "operation": "create",
        "state": {
            "value": "INSUFFICIENT_DATA",
            "timestamp": "2022-07-14T13:59:46.425+0000"
        },
        "configuration": {
            "alarmRule": "ALARM(ServerCpuTooHigh) OR ALARM(TotalNetworkTrafficTooHigh)",
            "actionsSuppressor": "ServiceMaintenanceAlarm",
            "actionsSuppressorWaitPeriod": 120,
            "actionsSuppressorExtensionPeriod": 180,
            "alarmName": "ServiceAggregatedAlarm",
            "actionsEnabled": true,
            "timestamp": "2022-07-14T13:59:46.425+0000",
            "okActions": [],
            "alarmActions": [],
            "insufficientDataActions": []
        }
    }
}
```

------
#### [ Update Events ]

기존 경보가 수정될 때 생성되는 이벤트. 이러한 이벤트로 변경된 내용을 표시하는 `configuration` 및 `previousConfiguration` 필드가 모두 포함됩니다.

**지표 경보 예제**

```
{
    "version": "0",
    "id": "bc7d3391-47f8-ae47-f457-1b4d06118d50",
    "detail-type": "CloudWatch Alarm Configuration Change",
    "source": "aws.cloudwatch",
    "account": "123456789012",
    "time": "2022-03-03T17:06:34Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:cloudwatch:us-east-1:123456789012:alarm:ServerCpuTooHigh"
    ],
    "detail": {
        "alarmName": "ServerCpuTooHigh",
        "operation": "update",
        "state": {
            "value": "INSUFFICIENT_DATA",
            "timestamp": "2022-03-03T17:06:13.757+0000"
        },
        "configuration": {
            "evaluationPeriods": 1,
            "threshold": 80,
            "comparisonOperator": "GreaterThanThreshold",
            "treatMissingData": "ignore",
            "metrics": [
                {
                    "id": "86bfa85f-b14c-ebf7-8916-7da014ce23c0",
                    "metricStat": {
                        "metric": {
                            "namespace": "AWS/EC2",
                            "name": "CPUUtilization",
                            "dimensions": {
                                "InstanceId": "i-12345678901234567"
                            }
                        },
                        "period": 300,
                        "stat": "Average"
                    },
                    "returnData": true
                }
            ],
            "alarmName": "ServerCpuTooHigh",
            "description": "Goes into alarm when server CPU utilization is too high!",
            "actionsEnabled": true,
            "timestamp": "2022-03-03T17:06:34.267+0000",
            "okActions": [],
            "alarmActions": [],
            "insufficientDataActions": []
        },
        "previousConfiguration": {
            "evaluationPeriods": 1,
            "threshold": 70,
            "comparisonOperator": "GreaterThanThreshold",
            "treatMissingData": "ignore",
            "metrics": [
                {
                    "id": "d6bfa85f-893e-b052-a58b-4f9295c9111a",
                    "metricStat": {
                        "metric": {
                            "namespace": "AWS/EC2",
                            "name": "CPUUtilization",
                            "dimensions": {
                                "InstanceId": "i-12345678901234567"
                            }
                        },
                        "period": 300,
                        "stat": "Average"
                    },
                    "returnData": true
                }
            ],
            "alarmName": "ServerCpuTooHigh",
            "description": "Goes into alarm when server CPU utilization is too high!",
            "actionsEnabled": true,
            "timestamp": "2022-03-03T17:06:13.757+0000",
            "okActions": [],
            "alarmActions": [],
            "insufficientDataActions": []
        }
    }
}
```

**억제기를 사용한 지표 경보 예제**

```
    {
    "version": "0",
    "id": "4c6f4177-6bd5-c0ca-9f05-b4151c54568b",
    "detail-type": "CloudWatch Alarm Configuration Change",
    "source": "aws.cloudwatch",
    "account": "123456789012",
    "time": "2022-07-14T13:59:56Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:cloudwatch:us-east-1:123456789012:alarm:ServiceAggregatedAlarm"
    ],
    "detail": {
        "alarmName": "ServiceAggregatedAlarm",
        "operation": "update",
        "state": {
            "actionsSuppressedBy": "WaitPeriod",
            "value": "ALARM",
            "timestamp": "2022-07-14T13:59:46.425+0000"
        },
        "configuration": {
            "alarmRule": "ALARM(ServerCpuTooHigh) OR ALARM(TotalNetworkTrafficTooHigh)",
            "actionsSuppressor": "ServiceMaintenanceAlarm",
            "actionsSuppressorWaitPeriod": 120,
            "actionsSuppressorExtensionPeriod": 360,
            "alarmName": "ServiceAggregatedAlarm",
            "actionsEnabled": true,
            "timestamp": "2022-07-14T13:59:56.290+0000",
            "okActions": [],
            "alarmActions": [], Remove 
            "insufficientDataActions": []
        },
        "previousConfiguration": {
            "alarmRule": "ALARM(ServerCpuTooHigh) OR ALARM(TotalNetworkTrafficTooHigh)",
            "actionsSuppressor": "ServiceMaintenanceAlarm",
            "actionsSuppressorWaitPeriod": 120,
            "actionsSuppressorExtensionPeriod": 180,
            "alarmName": "ServiceAggregatedAlarm",
            "actionsEnabled": true,
            "timestamp": "2022-07-14T13:59:46.425+0000",
            "okActions": [],
            "alarmActions": [],
            "insufficientDataActions": []
        }
    }
}
```

------
#### [ Deletion Events ]

경보가 삭제될 때 생성되는 이벤트. 이러한 이벤트로는 최종 경보 구성과 `operation`을 'delete'로 설정이 포함됩니다.

**지표 수학 경보 예제**

```
{
    "version": "0",
    "id": "f171d220-9e1c-c252-5042-2677347a83ed",
    "detail-type": "CloudWatch Alarm Configuration Change",
    "source": "aws.cloudwatch",
    "account": "123456789012",
    "time": "2022-03-03T17:07:13Z",
    "region": "us-east-*",
    "resources": [
        "arn:aws:cloudwatch:us-east-1:123456789012:alarm:TotalNetworkTrafficTooHigh"
    ],
    "detail": {
        "alarmName": "TotalNetworkTrafficTooHigh",
        "operation": "delete",
        "state": {
            "value": "INSUFFICIENT_DATA",
            "timestamp": "2022-03-03T17:06:17.672+0000"
        },
        "configuration": {
            "evaluationPeriods": 1,
            "threshold": 10000,
            "comparisonOperator": "GreaterThanThreshold",
            "treatMissingData": "ignore",
            "metrics": [{
                    "id": "m1",
                    "metricStat": {
                        "metric": {
                            "namespace": "AWS/EC2",
                            "name": "NetworkIn",
                            "dimensions": {
                                "InstanceId": "i-12345678901234567"
                            }
                        },
                        "period": 300,
                        "stat": "Maximum"
                    },
                    "returnData": false
                },
                {
                    "id": "m2",
                    "metricStat": {
                        "metric": {
                            "namespace": "AWS/EC2",
                            "name": "NetworkOut",
                            "dimensions": {
                                "InstanceId": "i-12345678901234567"
                            }
                        },
                        "period": 300,
                        "stat": "Maximum"
                    },
                    "returnData": false
                },
                {
                    "id": "e1",
                    "expression": "SUM(METRICS())",
                    "label": "Total Network Traffic",
                    "returnData": true
                }
            ],
            "alarmName": "TotalNetworkTrafficTooHigh",
            "description": "Goes into alarm if total network traffic exceeds 10Kb",
            "actionsEnabled": true,
            "timestamp": "2022-03-03T17:06:17.672+0000",
            "okActions": [],
            "alarmActions": [],
            "insufficientDataActions": []
        }
    }
}
```

**억제기를 사용한 지표 수학 경보 예제**

```
{
    "version": "0",
    "id": "e34592a1-46c0-b316-f614-1b17a87be9dc",
    "detail-type": "CloudWatch Alarm Configuration Change",
    "source": "aws.cloudwatch",
    "account": "123456789012",
    "time": "2022-07-14T14:00:01Z",
    "region": "us-east-*",
    "resources": [
        "arn:aws:cloudwatch:us-east-1:123456789012:alarm:ServiceAggregatedAlarm"
    ],
    "detail": {
        "alarmName": "ServiceAggregatedAlarm",
        "operation": "delete",
        "state": {
            "actionsSuppressedBy": "WaitPeriod",
            "value": "ALARM",
            "timestamp": "2022-07-14T13:59:46.425+0000"
        },
        "configuration": {
            "alarmRule": "ALARM(ServerCpuTooHigh) OR ALARM(TotalNetworkTrafficTooHigh)",
            "actionsSuppressor": "ServiceMaintenanceAlarm",
            "actionsSuppressorWaitPeriod": 120,
            "actionsSuppressorExtensionPeriod": 360,
            "alarmName": "ServiceAggregatedAlarm",
            "actionsEnabled": true,
            "timestamp": "2022-07-14T13:59:56.290+0000",
            "okActions": [],
            "alarmActions": [],
            "insufficientDataActions": []
        }
    }
}
```

------