创建告警以停止、终止、重启或恢复 EC2 实例 - Amazon CloudWatch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

创建告警以停止、终止、重启或恢复 EC2 实例

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

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

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

要设置可重启、停止或终止实例的 CloudWatch 告警操作,您必须使用服务相关的 IAM 角色 AWSServiceRoleForCloudWatchEvents。AWSServiceRoleForCloudWatchEvents IAM 角色允许 Amazon 代表您执行告警操作。

要为 CloudWatch Events 创建服务相关角色,请使用以下命令:

aws iam create-service-linked-role --aws-service-name events.amazonaws.com
控制台支持

您可使用 CloudWatch 控制台或 Amazon EC2 控制台创建告警。本文档中的程序使用 CloudWatch 控制台。有关使用 CloudWatch 控制台的程序,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的创建停止、终止、重启或恢复实例的告警

权限

如果您使用 Amazon Identity and Access Management (IAM) 账户来创建或修改执行 EC2 操作或 Systems Manager OpsItem 操作的告警,您必须拥有 iam:CreateServiceLinkedRole 权限。

在 Amazon CloudWatch 告警中添加停止操作

可以创建当达到一定阈值后停止 Amazon EC2 实例的警报。例如,您可能运行了开发或测试实例而偶尔忘记将其关闭。可以创建当平均 CPU 使用率低于 10% 达 24 小时时触发的警报,同时告知其为空闲并不再使用。可以根据需要调整阈值、时长和时间段,还可以添加 SNS 通知,以便您在触发警报后能够收到电子邮件。

可以停止或终止将 Amazon Elastic Block Store 卷用作根设备的 Amazon EC2 实例,但只能终止将实例存储用作根设备的实例。

使用 Amazon CloudWatch 控制台创建停止空闲实例的告警
  1. 访问 https://console.aws.amazon.com/cloudwatch/,打开 CloudWatch 控制台。

  2. 在导航窗格中,依次选择 Alarms(警报)All alarms(所有警报)

  3. 选择Create alarm(创建警报)

  4. 选择 Select Metric(选择指标)

  5. 对于 Amazon 命名空间,请选择 EC2

  6. 执行以下操作:

    1. 选择 Per-Instance Metrics(每个实例的指标)。

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

    3. 选择 Graphed metrics(绘制的指标)。

    4. 对于统计数据,选择 Average(平均值)

    5. 选择时间段(例如 1 Hour)。

    6. 选择选择指标

  7. 对于 Define Alarm 步骤,执行以下操作:

    1. Conditions(条件)下,选择 Static(静态)

    2. Whenever CPUUtilization is(每当 CPUUtilization)下,选择 Lower(降低)。

    3. 对于 than(比较),键入 10

    4. 选择 Next(下一步)。

    5. Notification 下,为 Send notification to 选择一个现有 SNS 主题或创建一个新 SNS 主题。

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

    6. 选择 Add EC2 Action(添加 EC2 操作)。

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

    8. 选择 Next(下一步)。

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

    10. Preview and create 下面,确认具有所需的信息和条件,然后选择 Create alarm

在 Amazon CloudWatch 告警中添加终止操作

可以创建当达到一定阈值时自动终止 EC2 实例的警报 (只要该实例未启用终止保护)。例如,某个实例已经完成工作,您不再需要此实例而希望将其终止。如果可能在之后使用该实例,则应该选择停止而不是终止。有关为实例启用和禁用终止保护的信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的为实例启用终止保护

使用 Amazon CloudWatch 控制台创建终止空闲实例的告警
  1. 通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/

  2. 在导航窗格中,依次选择 AlarmsCreate Alarm

  3. 对于 Select Metric 步骤,执行以下操作:

    1. EC2 Metrics 下,选择 Per-Instance Metrics

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

    3. 对于统计数据,选择 Average(平均值)

    4. 选择时间段(例如 1 Hour)。

    5. 选择 Next(下一步)。

  4. 对于 Define Alarm 步骤,执行以下操作:

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

    2. 每当下,为 选择 < 并键入 10。对于对于,键入 24 作为连续时段数。

      Alarm Preview(告警预览)下会显示阈值的图形表示。

    3. Notification 下,为 Send notification to 选择一个现有 SNS 主题或创建一个新 SNS 主题。

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

    4. 选择 EC2 Action

    5. 对于每当此警报,请选择状态为“警报”。对于 Take this action,选择 Terminate this instance

    6. 选择 Create Alarm(创建告警)

在 Amazon CloudWatch 告警中添加重启操作

您可创建监控 Amazon EC2 实例并自动重启此实例的 Amazon CloudWatch 警报。在实例运行状况检查失败时,推荐重启警报操作(与恢复警报操作相反,该操作适合系统运行状况检查失败的情况)。实例重启相当于操作系统重启。在许多情况下,只需要几分钟时间即可重启您的实例。重启实例时,其仍驻留在相同的物理主机上,因此您的实例将保留其公有 DNS 名称、私有 IP 地址及其实例存储卷上的任何数据。

重启实例不会启动新的实例计费时间,这与停止并重新启动您的实例不同。有关重新启动实例的更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的重启实例

重要

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

使用 Amazon CloudWatch 控制台创建重启实例的告警
  1. 通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/

  2. 在导航窗格中,依次选择 AlarmsCreate Alarm

  3. 对于 Select Metric 步骤,执行以下操作:

    1. EC2 Metrics 下,选择 Per-Instance Metrics

    2. 选择包含实例和 StatusCheckFailed_Instance 指标的行。

    3. 对于统计数据,选择 Minimum

    4. 选择一个时间段(例如,1 Minute),然后选择下一步

  4. 对于 Define Alarm 步骤,执行以下操作:

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

    2. 每当下,为选择 > 并键入 0。对于对于,键入 3 作为连续时段数。

      Alarm Preview(告警预览)下会显示阈值的图形表示。

    3. Notification 下,为 Send notification to 选择一个现有 SNS 主题或创建一个新 SNS 主题。

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

    4. 选择 EC2 Action

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

    6. 选择 Create Alarm(创建告警)

在 Amazon CloudWatch 告警中添加恢复操作

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

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

恢复操作仅适用于 StatusCheckFailed_System,而不能用于 StatusCheckFailed_Instance

导致系统状态检查出现故障的问题示例包括:

  • 网络连接丢失

  • 系统电源损耗

  • 物理主机上的软件问题

  • 物理主机上影响到网络连接状态的硬件问题

只有某些实例类型支持恢复操作。有关支持的实例类型和其他要求的更多信息,请参阅恢复实例要求

重要

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

使用 Amazon CloudWatch 控制台创建恢复实例的告警
  1. 通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/

  2. 在导航窗格中,依次选择 AlarmsCreate Alarm

  3. 对于 Select Metric 步骤,执行以下操作:

    1. EC2 Metrics 下,选择 Per-Instance Metrics

    2. 选择包含实例和 StatusCheckFailed_System 指标的行。

    3. 对于统计数据,选择 Minimum

    4. 选择时间段(例如 1 Minute)。

      重要

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

    5. 选择 Next(下一步)。

  4. 对于 Define Alarm 步骤,执行以下操作:

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

    2. 每当下,为选择 > 并键入 0。对于对于,键入 2 作为连续时段数。

    3. Notification 下,为 Send notification to 选择一个现有 SNS 主题或创建一个新 SNS 主题。

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

    4. 选择 EC2 Action

    5. 对于每当此警报,请选择状态为“警报”。对于 Take this action,选择 Recover this instance

    6. 选择 Create Alarm(创建告警)

查看已触发的告警和操作的历史记录

您可以在 Amazon CloudWatch 控制台中查看警报和操作历史记录。Amazon CloudWatch 会保留最近两周的警报和操作历史记录。

要查看已触发的警报和操作的历史记录
  1. 通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/

  2. 在导航窗格中,选择 Alarms (警报),然后选择一个警报。

  3. 要查看最近的状态转换以及时间和指标值,请选择详细信息

  4. 要查看最近的历史记录条目,请选择 History (历史记录)