

# 停止、终止、重启或恢复 EC2 实例
<a name="UsingAlarmActions"></a>

利用 Amazon CloudWatch 告警操作，您可创建自动停止、终止、重启或恢复 EC2 实例的告警。当不再需要某个实例运行时，您可使用停止或终止操作来帮助您节省资金。如果发生了系统损害，您可使用重启和恢复操作自动重启这些实例或将它们恢复到新硬件上。

在许多情况下，您可能需要自动终止或停止实例。例如，您可能拥有专用于批工资单处理作业或科学计算任务的实例，这些实例在运行一段时间后就完成了其工作。与其让这些实例空闲（并产生费用），不如将其停止或终止以帮助节省开支。使用停止警报操作和终止警报操作的主要区别是，停止的警报可以在以后需要运行时轻松重启。您还可以保留相同的实例 ID 和根卷。而终止的实例则无法重新启动。如此就必须启动一个新的实例。

您可以向为 Amazon EC2 每个实例指标设置的任何告警添加停止、终止或重启操作，这些指标包括 Amazon CloudWatch 提供的基本和详细监控指标（在亚马逊云科技/EC2 命名空间中），以及包含“InstanceId=”维度的任何自定义指标，只要 InstanceId 值引用有效运行的 Amazon EC2 实例。您还可以将恢复操作添加到针对任何 Amazon EC2 每个实例指标设置的告警中，但以下情况除外：`StatusCheckFailed_Instance`。

**重要**  
如果缺失指标数据点，则在 Amazon EC2 指标上配置的警报可能会暂时进入 INSUFFICIENT\$1DATA 状态。这种情况很少见，但在指标报告中断时可能会发生，即使在 Amazon EC2 实例运行正常的情况下也是如此。对于配置为采取停止、终止、重启或恢复操作的 Amazon EC2 指标的警报，我们建议您将这些警报配置为将缺失的数据视为 `missing`，并使这些警报仅在处于 ALARM 状态时被触发。  
有关如何配置 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 实例的警报。例如，您可能运行了开发或测试实例而偶尔忘记将其关闭。可以创建当平均 CPU 使用率低于 10% 达 24 小时时触发的警报，同时告知其为空闲并不再使用。可以根据需要调整阈值、时长和时间段，还可以添加 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. 选择**创建警报**。

1. 选择 **Select Metric（选择指标）**。

1. 对于 **AWS 命名空间**，请选择 **EC2**。

1. 执行以下操作：

   1. 选择 **Per-Instance Metrics**（每个实例的指标）。

   1. 选择包含正确实例和 **CPUUtilization** 指标的行中的复选框。

   1. 选择**绘成图表的指标**选项卡。

   1. 对于统计数据，选择 **Average（平均值）**。

   1. 选择时间段（例如 **1 Hour**）。

   1. 选择**选择指标**。

1. 在 **Conditions**（条件）下，执行以下操作：

   1. 选择 **Static**（静态）。

   1. 在 **Whenever CPUUtilization is**（每当 CPUUtilization）下，选择 **Lower**（降低）。

   1. 对于 **than**（比较），键入 **10**。

   1. 选择**下一步**。

   1. 在 **Notification** 下，为 **Send notification to** 选择一个现有 SNS 主题或创建一个新 SNS 主题。

      要创建 SNS 主题，请选择 **New list（新列表）**。对于**发送通知到**，键入 SNS 主题的名称（例如“Stop\$1EC2\$1Instance”）。对于 **Email list (电子邮件列表)**，请键入警报变为 `ALARM` 状态时将通知发送到的电子邮件地址列表（以逗号分隔）。将向每个电子邮件地址发送一封主题订阅确认电子邮件。您必须先确认订阅，然后才能将通知发送到电子邮件地址。

   1. 选择 **Add EC2 Action**（添加 EC2 操作）。

   1. 对于 **Alarm state trigger**（告警状态触发器），选择 **In alarm**（在告警中）。对于 **Take the following action**（请执行以下操作），选择 **Stop this instance**（停止此实例）。

   1. 选择**下一步**。

   1. 输入警报的名称和说明。名称只能包含 ASCII 字符。然后选择**下一步**。

   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. 通过以下网址打开 CloudWatch 控制台：[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在导航窗格中，依次选择 **Alarms** 和 **Create Alarm**。

1. 对于 **Select Metric** 步骤，执行以下操作：

   1. 在 **EC2 Metrics** 下，选择 **Per-Instance Metrics**。

   1. 选择包含实例和 **CPUUtilization** 指标的行。

   1. 对于统计数据，选择 **Average（平均值）**。

   1. 选择时间段（例如 **1 Hour**）。

   1. 选择**下一步**。

1. 对于 **Define Alarm** 步骤，执行以下操作：

   1. 在 **Alarm Threshold** 下，键入警报的唯一名称 (例如“Terminate EC2 instance”) 和警报的描述 (例如“Terminate EC2 instance when CPU is idle for too long”)。警报名称必须仅包含 ASCII 字符。

   1. 在**每当**下，为 **是**选择 **<** 并键入 **10**。对于**对于**，键入 **24** 作为连续时段数。

      **Alarm Preview（告警预览）**下会显示阈值的图形表示。

   1. 在 **Notification** 下，为 **Send notification to** 选择一个现有 SNS 主题或创建一个新 SNS 主题。

      要创建 SNS 主题，请选择 **New list（新列表）**。对于**发送通知到**，键入 SNS 主题的名称（例如“Terminate\$1EC2\$1Instance”）。对于 **Email list (电子邮件列表)**，请键入警报变为 `ALARM` 状态时将通知发送到的电子邮件地址列表（以逗号分隔）。将向每个电子邮件地址发送一封主题订阅确认电子邮件。您必须先确认订阅，然后才能将通知发送到电子邮件地址。

   1. 选择 **EC2 Action**。

   1. 对于**每当此警报**，请选择**状态为“警报”**。对于 **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)。

**重要**  
为了避免重启操作与恢复操作之间的竞争情况，请避免为重启警报和恢复警报设置相同的评估期。我们建议您将重启警报设置为 3 个 1 分钟的评估期。

**使用 Amazon CloudWatch 控制台创建重启实例的告警**

1. 通过以下网址打开 CloudWatch 控制台：[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在导航窗格中，依次选择 **Alarms** 和 **Create Alarm**。

1. 对于 **Select Metric** 步骤，执行以下操作：

   1. 在 **EC2 Metrics** 下，选择 **Per-Instance Metrics**。

   1. 选择包含实例和 **StatusCheckFailed\$1Instance** 指标的行。

   1. 对于统计数据，选择 **Minimum**。

   1. 选择时间段（例如 **1 Minute**）。

   1. 选择**下一步**。

1. 对于 **Define Alarm** 步骤，执行以下操作：

   1. 在 **Alarm Threshold** 下，键入警报的唯一名称 (例如“Reboot EC2 instance”) 和警报的描述 (例如“Reboot EC2 instance when health checks fail”)。警报名称必须仅包含 ASCII 字符。

   1. 在**每当**下，为**是**选择 **>** 并键入 **0**。对于**对于**，键入 **3** 作为连续时段数。

      **Alarm Preview（告警预览）**下会显示阈值的图形表示。

   1. 在 **Notification** 下，为 **Send notification to** 选择一个现有 SNS 主题或创建一个新 SNS 主题。

      要创建 SNS 主题，请选择 **New list（新列表）**。对于**发送通知到**，键入 SNS 主题的名称（例如“Reboot\$1EC2\$1Instance”）。对于 **Email list (电子邮件列表)**，请键入警报变为 `ALARM` 状态时将通知发送到的电子邮件地址列表（以逗号分隔）。将向每个电子邮件地址发送一封主题订阅确认电子邮件。您必须先确认订阅，然后才能将通知发送到电子邮件地址。

   1. 选择 **EC2 Action**。

   1. 对于**每当此警报**，请选择**状态为“警报”**。对于 **Take this action**，选择 **Reboot this instance**。

   1. 选择**创建警报**。

## 在 Amazon CloudWatch 告警中添加恢复操作
<a name="AddingRecoverActions"></a>

您可以创建 Amazon CloudWatch 警报用于监控 Amazon EC2 实例，并且在实例受损（由于发生底层硬件故障或需要 AWS 参与才能修复的问题）时自动恢复实例。无法恢复终止的实例。恢复的实例与原始实例相同，包括实例 ID、私有 IP 地址、弹性 IP 地址以及所有实例元数据。

当 `StatusCheckFailed_System` 告警触发且恢复操作启动时，您在创建告警及相关恢复操作时所选择的 Amazon SNS 主题将向您发出通知。在实例恢复过程中，实例将在重启时迁移，并且内存中的所有数据都将丢失。当该过程完成后，会向您已配置警报的 SNS 主题发布信息。任何订阅此 SNS 主题的用户都将收到一封电子邮件通知，其中包括恢复尝试的状态以及任何进一步的指示。您会注意到，实例在已恢复的实例上重启。

恢复操作仅适用于 `StatusCheckFailed_System`，而不能用于 `StatusCheckFailed_Instance`。

导致系统状态检查出现故障的问题示例包括：
+ 网络连接丢失
+ 系统电源损耗
+ 物理主机上的软件问题
+ 物理主机上影响到网络连接状态的硬件问题

只有某些实例类型支持恢复操作。有关支持的实例类型和其他要求的更多信息，请参阅[恢复实例](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)。

**重要**  
为了避免重启操作与恢复操作之间的竞争情况，请避免为重启警报和恢复警报设置相同的评估期。我们建议您将恢复警报设置为 2 个 1 分钟的评估期，并将重启警报设置为 3 个 1 分钟的评估期。

**使用 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**）。
**重要**  
为了避免重启操作与恢复操作之间的竞争情况，请避免为重启警报和恢复警报设置相同的评估期。我们建议您将恢复警报设置为 2 个 1 分钟的评估期。

1. 对于**条件**，执行以下操作：

   1. 在**阈值类型**下，选择**静态**。

   1. 在**每当**下，选择**大于**，然后对于**比...** 输入 **0**。

   1. 选择**其他配置**，然后在**待警报的数据点**中指定 2 个（**共** 2 个）。

1. 选择**下一步**。

1. 在**通知**下，执行以下操作：

   1. 对于 **Alarm state trigger**（告警状态触发器），选择 **In alarm**（在告警中）。

   1. 对于**发送通知到如下 SNS 主题**，选择一个现有 SNS 主题或创建一个新 SNS 主题。

   1. 选择 **Add EC2 Action**（添加 EC2 操作）。

   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. 要查看最近的状态转换以及时间和指标值，请选择**详细信息**。

1. 要查看最近的历史记录条目，请选择 **History (历史记录)**。