将警报更改通知用户 - Amazon CloudWatch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

将警报更改通知用户

本节说明了如何使用 Amazon User Notifications 或 Amazon Simple Notification Service,来让用户收到有关警报更改的通知。

设置 Amazon User Notifications

您可以使用 Amazon User Notifications 来设置传输渠道,以用于接收有关 CloudWatch 警报状态更改和配置更改事件的通知。当事件与指定的规则匹配时,会收到通知。您可以通过多个渠道接收事件通知,包括电子邮件、Amazon Chatbot 聊天通知或 Amazon 控制台移动应用程序推送通知。您还可以在 控制台通知中心 中查看通知。用户通知支持聚合,这可以减少在具体事件期间收到的通知数量。

您使用 Amazon User Notifications 创建的通知配置不会计入您可以为每个目标警报状态配置的操作数量限制。当 Amazon User Notifications 对发送给 Amazon EventBridge 的事件进行匹配时,除非您指定高级筛选条件来将特定的警报或模式列入允许列表或拒绝列表,否则会针对您账户和选定区域中的所有警报发送通知。

以下高级筛选条件示例将对名为 ServerCpuTooHigh 的警报从“正常”变为“警报”的警报状态更改进行匹配。

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

您可以使用警报在 EventBridge 事件中发布的任何属性来创建筛选条件。有关更多信息,请参阅告警事件和 EventBridge

设置 Amazon SNS 通知

您可以使用 Amazon Simple Notification Service 来发送应用程序到应用程序(A2A)消息和应用程序对人(A2P)消息,包括手机短信(SMS)和电子邮件。有关更多信息,请参阅 Amazon SNS 事件目标

对于警报可能处于的每种状态,您都可以将警报配置为向某个 SNS 主题发送消息。您为给定警报状态配置的每个 Amazon SNS 主题,都将计入您可以为该警报和状态配置的操作数量限制。您可以从账户中的任何警报向同一 Amazon SNS 主题发送消息,并为应用程序(A2A)和个人(A2P)消费端使用相同的 Amazon SNS 主题。由于此配置是在警报级别进行的,因此只有您配置的警报才会向所选的 Amazon SNS 主题发送消息。

首先,创建一个主题,然后订阅此主题。您可以选择将测试消息发布到此主题。有关示例,请参阅使用 Amazon Web Services Management Console 设置 Amazon SNS 主题。有关更多信息,请参阅 Amazon SNS 入门

或者,如果您计划使用 Amazon Web Services Management Console来创建 CloudWatch 警报,则可跳过此过程,因为您可在创建警报时创建主题。

创建 CloudWatch 警报时,您可以为任何警报目标状态添加操作。为您想要收到通知的状态添加 Amazon SNS 通知,然后选择您在上一步中创建的 Amazon SNS 主题,从而在警报进入选定状态时发送电子邮件通知。

注意

在创建 Amazon SNS 主题时,您可以选择将其设为标准主题FIFO 主题。CloudWatch 定会将所有告警通知发布到这两种类型的主题。但是,即使您使用 FIFO 主题,在极少数情况下,CloudWatch 也会不按顺序将通知发送到该主题。如果您使用 FIFO 主题,告警会将告警通知的消息组 ID 设置为告警的 ARN 的哈希值。

防止混淆代理问题

为防止跨服务混淆代理安全问题,我们建议您使用 Amazon SNS 资源策略中的 aws:SourceArnaws:SourceAccount 全局条件键,向 CloudWatch 授予访问您的 Amazon SNS 资源的权限。

下面的资源策略示例使用 aws:SourceArn 条件键将 SNS:Publish 权限缩小为只能由指定账户中的 CloudWatch 警报使用。

{ "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 全局条件键限制权限。

使用 Amazon Web Services Management Console 设置 Amazon SNS 主题

首先,创建一个主题,然后订阅此主题。您可以选择将测试消息发布到此主题。

创建 SNS 主题
  1. 通过 https://console.aws.amazon.com/sns/v3/home 打开 Amazon SNS 控制台。

  2. 在 Amazon SNS 控制面板上的 Common actions(常用操作)下,选择 Create Topic(创建主题)

  3. Create new topic(创建新主题)对话框中,为 Topic name(主题名称)输入主题的名称(例如 my-topic)。

  4. 选择 Create topic(创建主题)

  5. 复制下一个任务的 Topic ARN(主题 ARN)(例如 arn:aws:sns:us-east-1:111122223333:my-topic)。

订阅 SNS 主题
  1. 通过 https://console.aws.amazon.com/sns/v3/home 打开 Amazon SNS 控制台。

  2. 在导航窗格中,依次选择 Subscriptions(订阅)Create subscription(创建订阅)

  3. Create subscription(创建订阅)对话框中,为 Topic ARN(主题 ARN)粘贴在上一任务中创建的主题 ARN。

  4. 对于协议,选择电子邮件

  5. 对于 Endpoint(端点),输入一个可用于接收通知的电子邮件地址,然后选择 Create subscription(创建订阅)

  6. 从您的电子邮件应用程序中,打开来自 Amazon 通知的消息并确认您的订阅。

    您的 Web 浏览器将显示来自 Amazon SNS 的确认响应。

向 SNS 主题发布测试消息
  1. 通过 https://console.aws.amazon.com/sns/v3/home 打开 Amazon SNS 控制台。

  2. 在导航窗格中,选择 Topics(主题)

  3. Topics(主题)页面上,选择一个主题,然后选择 Publish to topic(发布到主题)

  4. Publish(发布消息)页面中,为 Subject(主题)输入消息的主题行,并为 Message(消息)输入简短的消息。

  5. 选择 Publish Message(发布消息)

  6. 查看电子邮件,确认您已收到消息。

使用 Amazon CLI 设置 SNS 主题

首先,您创建一个 SNS 主题,然后将一条消息直接发布到该主题,以测试您是否正确配置了该主题。

设置 SNS 主题
  1. 使用 create-topic 命令创建主题,如下所示。

    aws sns create-topic --name my-topic

    Amazon SNS 返回具有以下格式的主题 ARN:

    { "TopicArn": "arn:aws:sns:us-east-1:111122223333:my-topic" }
  2. 使用 subscribe 命令以通过您的电子邮件地址订阅该主题。如果订阅请求成功,您将收到一封确认电子邮件。

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

    Amazon SNS 将返回以下内容:

    { "SubscriptionArn": "pending confirmation" }
  3. 从您的电子邮件应用程序中,打开来自 Amazon 通知的消息并确认您的订阅。

    您的 Web 浏览器将显示来自 Amazon Simple Notification Service 的确认响应。

  4. 使用 list-subscriptions-by-topic 命令检查订阅。

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

    Amazon SNS 将返回以下内容:

    { "Subscriptions": [ { "Owner": "111122223333", "Endpoint": "me@mycompany.com", "Protocol": "email", "TopicArn": "arn:aws:sns:us-east-1:111122223333:my-topic", "SubscriptionArn": "arn:aws:sns:us-east-1:111122223333:my-topic:64886986-bf10-48fb-a2f1-dab033aa67a3" } ] }
  5. (可选)使用 publish 命令向主题发布测试消息。

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

    Amazon SNS 将返回以下内容。

    { "MessageId": "42f189a0-3094-5cf6-8fd7-c2dde61a4d7d" }
  6. 查看电子邮件,确认您已收到消息。