使用 AWS 运行状况 监控 Amazon CloudWatch Events 事件 - AWS Health
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 AWS 运行状况 监控 Amazon CloudWatch Events 事件

您可以使用 Amazon CloudWatch Events 检测和响应 AWS 运行状况 事件的更改。然后,CloudWatch Events 会根据您创建的规则,在事件与您在规则中指定的值匹配时调用一个或多个目标操作。根据事件的类型,您可以发送通知、捕获事件信息、采取纠正措施、启动事件或采取其他操作。例如,如果AWS 运行状况您的账户中有计划更新AWS的资源,例如 AWS (Amazon Elastic Compute Cloud) 实例,则可以使用 Amazon EC2 接收电子邮件通知。

Notes
  • 本主题使用 CloudWatch Events 控制台创建规则。您还可以使用 Amazon EventBridge 控制台创建规则。有关更多信息,请参阅 AWS 用户指南 中的为 服务Amazon EventBridge创建规则。

  • 对于这两种服务, 会尽最大努力AWS 运行状况传送事件。并非始终保证事件传送到 CloudWatch Events 或 EventBridge。

在 CloudWatch Events 工作流中使用 AWS 运行状况 时,可以选择以下类型的目标:

  • AWS Lambda 函数

  • Amazon Kinesis Data Streams

  • Amazon Simple Queue Service (Amazon SQS) 队列

  • 内置目标(CloudWatch 警报操作)

  • Amazon Simple Notification Service (Amazon SNS) 主题

例如,您可以使用 Lambda 函数,以在发生 AWS 运行状况 事件时将通知传递至 Slack 通道。或者,您也可以使用 Lambda 和 CloudWatch Events,以在发生 Amazon SNS 事件时通过 AWS 运行状况 发送自定义文本或 SMS 通知。

关于 AWS 的区域 AWS 运行状况

您必须为要接收 CloudWatch Events 事件通知的每个区域创建一个 AWS 运行状况 规则。如果您不创建规则,则不会收到事件。例如,要从 中国(北京) 区域接收事件,您必须为此区域创建 规则。

某些AWS 运行状况事件不是特定于区域的,而是全局性的,例如为 AWS Identity and Access Management (IAM) 发送的事件。要接收全局事件,您必须为中国 (宁夏)区域创建 规则。

关于 的公共事件 AWS 运行状况

只有特定于您的账户AWS 运行状况的事件AWS才会传送到 CloudWatch Events。例如,这可以包括一些事件,例如,对 Amazon EC2 实例的必需更新,以及其他可能影响您的账户和资源的计划更改事件。

目前,您无法使用 从CloudWatch Events服务运行状况控制面板返回公有事件。服务运行状况控制面板中的事件提供有关服务的区域可用性的公有信息。这些事件并非特定于 AWS 账户,因此不会传输到 CloudWatch Events。

相反,您可以使用 AWS 运行状况 控制台和 DescribeEventDetails 操作。您可以使用任一选项返回有关事件的信息,然后确定事件是来自服务运行状况控制面板的公有事件还是影响您的账户的特定于账户的事件。

您可以使用以下选项确定事件是公共事件还是特定于账户的事件:

  • 在 Personal Health Dashboard 中,选择 Event log (事件日志) 页上的 Affected resources (受影响的资源) 选项卡。具有资源的事件特定于您的账户。没有资源的事件是公共的,并不是特定于您的账户。有关更多信息,请参阅 AWS Personal Health Dashboard入门

  • 使用 AWS 运行状况 API 返回 eventScopeCode 参数。事件可以具有 PUBLICACCOUNT_SPECIFICNONE 值。有关详细信息,请参阅 AWS Health API 参考 中的 DescribeEventDetails 操作。

您还可以使用AWS 运行状况服务运行状况控制面板通知器工具来获取公开事件的通知。有关更多信息,请参阅 GitHub 网站上的 aws-health-tools

为 CloudWatch Events 创建 AWS 运行状况 规则

您可以创建 CloudWatch Events 规则来获取账户中AWS 运行状况事件的通知。在为 AWS 运行状况 创建事件规则之前,您应该先执行以下操作:

为 CloudWatch Events 创建 AWS 运行状况 规则

  1. 通过以下网址打开 CloudWatch 控制台:https://console.amazonaws.cn/cloudwatch/

  2. 要更改 AWS 区域,请使用页面右上角的 Region selector (区域选择器)。选择要在其中跟踪 AWS 运行状况 事件的区域。

  3. 在导航窗格中的 Events (事件) 下,选择 Rules (规则)。

  4. 选择 Create rule,然后在 Event Source 下,对于 Service Name,选择 Health

  5. 对于 Event Type (事件类型),选择以下选项之一。

    • 选择 All Events (所有事件) 以创建适用于所有AWS服务的规则。此规则监控 中的所有事件AWS 运行状况。如果选择此选项,则无法指定事件类型类别或事件类型代码。

    • 选择 Specific Health events (特定运行状况事件)、Specific service(s) 特定服务),然后从列表中选择服务名称。这将创建一个规则,该规则仅监控一个服务的事件。例如,您可以选择 EC2以便 仅CloudWatch Events监控 Amazon EC2 事件。您无法选择多个服务。

    提示

    要监控特定服务的所有AWS 运行状况事件,我们建议您选择 Any event type categoryAny resource。这可确保您的规则监控指定服务的任何AWS 运行状况事件,包括任何新的事件类型代码。有关示例规则,请参阅所有Amazon EC2事件

  6. 如果您选择了特定服务,请选择以下选项之一。

    • 选择 Any event type category (任何事件类型类别) 以创建适用于所有事件类型类别的规则。

    • 选择 Specific event type category(s) (特定事件类型类别),然后从列表中选择一个值。这将创建一个仅适用于一个事件类型类别(如 scheduledChange的规则。您无法选择多个类别。

  7. 如果您选择了特定服务和事件类型类别,请为事件类型代码选择以下选项之一。

    • 选择 Any event type code (任何事件类型代码) 以创建适用于所有事件类型代码的规则。

    • 选择 Specific event type code(s) (特定事件类型代码),然后从列表中选择一个或多个值。这将创建一个仅适用于特定事件类型代码的规则。例如,如果您选择 AWS_EC2_INSTANCE_STOP_SCHEDULEDAWS_EC2_PERSISTENT_INSTANCE_RETIREMENT_SCHEDULED则您的规则仅在这些事件在您的账户中发生时应用于这些事件。

  8. 为受影响的资源选择以下选项之一。

    • 选择 Any resource (任何资源) 以创建应用于所有资源的规则。

    • 选择 Specific resource(s) (特定资源),然后输入一个或多个资源的 IDs。例如,您可以指定 Amazon EC2 实例 ID(如 i-EXAMPLEa1b2c3de4 ),以监控仅影响此资源的事件。

  9. 检查您的规则设置,使其满足您的事件监控要求。

  10. Targets 区域,选择 Add target*

  11. Select target type (选择目标类型) 列表中,选择您准备用于此规则的目标的类型,然后配置该类型所需的任何其他选项。

  12. 选择 Configure details

  13. Configure rule details (配置规则详细信息) 页面上,输入规则的名称和描述,然后选中 State (状态) 复选框以在创建规则后立即启用它。

  14. 选择 Create rule (创建规则)

例 :所有Amazon EC2事件的规则

以下示例创建一个规则,以便 CloudWatch Events 监控所有Amazon EC2事件,包括事件类型类别、事件代码和资源。


          仅为所有CloudWatch Events事件创建Amazon EC2规则的屏幕截图。

例 :特定Amazon EC2事件的规则

以下示例创建一个规则,以便 CloudWatch Events 监控以下内容:

  • Amazon EC2 服务

  • scheduledChange 事件类型类别

  • AWS_EC2_INSTANCE_TERMINATION_SCHEDULEDAWS_EC2_INSTANCE_RETIREMENT_SCHEDULED 的事件类型代码

  • 具有 i-EXAMPLEa1b2c3de4 ID 的实例


          仅为特定CloudWatch Events事件创建Amazon EC2规则的屏幕截图。

使用 接收AWS 运行状况事件 AWS Chatbot

您可以直接在聊天客户端中接收AWS 运行状况事件,例如 Slack 和 Amazon Chime。使用此事件可以确定可能影响您的AWS应用程序和基础设施的最近AWS服务问题。然后,您可以登录您的 Personal Health Dashboard 以了解有关更新的更多信息。例如,如果您正在监控AWS_EC2_INSTANCE_STOP_SCHEDULED账户中的AWS事件类型,则AWS 运行状况事件可以直接显示在 Slack 通道中。

Prerequisites

在开始之前,您必须满足以下条件:

使用 接收AWS 运行状况事件 AWS Chatbot

  1. 按照为 CloudWatch Events 创建 AWS 运行状况 规则中过程操作。

    1. 当您在步骤 11 中选择目标时,请选择 SNS 主题。您将在 AWS Chatbot 控制台中使用此 SNS 主题。

    2. 完成此过程的其余部分以创建规则。

  2. 打开 AWS Chatbot 控制台 (https://console.aws.amazon.com/chatbot/)。

  3. 选择您的聊天客户端(例如 Slack 通道名称),然后选择 Edit (编辑)。

  4. Notifications - optional (通知 - 可选) 部分中,对于 Topics (主题),选择您指定的相同 SNS 主题。

  5. 选择 Save

    当 向 AWS 运行状况 发送与您的规则CloudWatch Events匹配的事件时AWS 运行状况,该事件将显示在您的聊天客户端中。

  6. 选择事件名称以在 中查看更多信息Personal Health Dashboard。

例 :发送到 Slack AWS 运行状况 的事件

以下是 Slack 通道AWS 运行状况中显示的 中 Amazon EC2 和 Amazon Simple Storage Service (Amazon S3) 的两个美国东部(弗吉尼亚北部)地区事件的示例。


          Slack 通道中显示两个AWS 运行状况事件的方式的屏幕截图。

针对 EC2 实例实现自动化操作

您可以针对 EC2 实例,通过自动化操作来响应新的计划事件。例如,您可以使用为 CloudWatch Events 服务生成的 EC2 计划事件创建 AWS 运行状况 规则。然后,这些规则可以触发目标(如 AWS Systems Manager (Systems Manager) Automation 文档)以自动执行操作。有关更多信息,请参阅 Amazon EC2 中的EventBridge使用 实现 Amazon EC2 用户指南(适用于 Linux 实例) 自动化。

例如,在为 Amazon EC2 (Amazon Elastic Block Store) 支持的 EC2 实例计划 Amazon EBS 实例停用事件时,您可以自动完成实例的停止和启动,这样就无需手动执行这些操作。

Notes
  • 此过程使用 CloudWatch Events 控制台创建规则。您还可以使用 EventBridge 控制台创建规则。有关更多信息,请参阅 AWS 用户指南 中的为 服务Amazon EventBridge创建规则。

  • 要自动为您的Amazon EC2实例执行 操作,实例必须由 管理Systems Manager。

针对计划停用的 EBS 支持的 EC2 实例自动停止和启动实例

  1. 打开 CloudWatch 控制台以创建 CloudWatch Events 规则:

    1. 导航到 https://console.amazonaws.cn/cloudwatch/

    2. 事件下,选择规则

  2. 编辑事件模式预览并提供以下输入。

    { "source": [ "aws.health" ], "detail-type": [ "AWS Health Event" ], "detail": { "service": [ "EC2" ], "eventTypeCategory": [ "scheduledChange" ], "eventTypeCode": [ "AWS_EC2_INSTANCE_RETIREMENT_SCHEDULED" ] } }

    您应看到 控制台中显示以下字段。

    • 对于 Service Name (服务名称), AWS 运行状况

    • 对于 Event Type (事件类型),为 Specific Health events (特定运行状况事件)

    • Amazon EC2 服务

    • scheduledChange 事件类型类别

    • AWS_EC2_INSTANCE_RETIREMENT_SCHEDULED 事件类型代码

    • 任何资源

    
              为 AWS 运行状况 屏幕截图创建“事件模式”。
  3. 选择 Save

  4. 添加 Systems Manager Automation 文档目标。选择 Add target* (添加目标*),然后选择 SSM Automation,如下图所示。

    
              CloudWatch Events 控制台中“SSM Automation”示例的屏幕截图。
  5. 从列表中选择 AWS-RestartEC2Instance Systems Manager 文档。

  6. 如此处所示配置输入转换器,将 {"Instances":"$.resources"} 作为 InputPathsMap,将 {"InstanceId": <Instances>} 作为输入模板

  7. 选择现有IAM角色,然后创建一个有权运行 SSM Automation 文档的新角色。

如果您没有具备所需 EC2 和 IAM 权限的现有 Systems Manager 角色,则创建此角色。

创建具有 EC2 和 IAM 权限的 Systems Manager 角色

  1. 通过创建 IAM 策略,为 CloudWatch Events 设置所需的 IAM 权限。然后,将策略与 IAM 的 CloudWatch 角色关联。在本例中,我们将 IAM 角色命名为 AutomationCWRole

    例 :IAMPolicy

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:StartInstances", "ec2:StopInstances", "ec2:DescribeInstanceStatus" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "ssm:*" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": [ "arn:aws:sns:*:*:Automation*" ] }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::123456789012:role/AutomationCWRole" } ] }
  2. 使用账户 ID 和角色名称更新角色 Amazon 资源名称 (ARN)。此外,请确保该角色已将 events.amazonaws.com ssm.amazonaws.com 配置为IAM角色的可信实体,如以下示例所示。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "ssm.amazonaws.com", "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }