亚马逊 EC2 Auto Scaling 的亚马逊 SNS 通知选项 - Amazon EC2 Auto Scaling

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

亚马逊 EC2 Auto Scaling 的亚马逊 SNS 通知选项

您可以将 Auto Scaling 组配置为在影响您的应用程序的重要事件时通知您。通过通知,您还可以取消轮询,并且不会遇到轮询有时会导致的RequestLimitExceeded错误。

有两种方法可以接收有关 Amazon EC2 Auto Scaling 的通知:

  • 亚马逊简单通知服务 — Amazon SNS 可以在您的 Auto Scaling 组启动或终止实例时通知您。您只能打开或关闭 Amazon SNS 通知。有关更多信息,请参阅 亚马逊 SNS 和亚马逊 EC2 Auto Scaling

  • 亚马逊 EventBridge — EventBridge 提供更高级的事件驱动型通知,这些通知符合指定标准,并发送到各种目标,包括 Amazon SNS。 EventBridge 还可以监控更广泛的 Auto Scaling 事件,以实现更精确的监控。有关更多信息,请参阅 使用 EventBridge 处理 Auto Scaling 事件

当实例在启动或终止期间进入待处理状态时,您还可以使用生命周期挂钩和服务(例如 Amazon SNS 和 Amazon SQS)执行自定义操作。 EventBridge在 Amazon EC2 Auto Scaling 将新实例添加到组之前,生命周期挂钩还可以为新实例提供额外的时间来完成用户数据中指定的脚本。有关更多信息,请参阅 Amazon EC2 Auto Scaling 生命周期钩子

亚马逊 SNS 和亚马逊 EC2 Auto Scaling

本节介绍如何使用 Amazon SNS 来监控您的 Auto Scaling 组何时启动或终止实例。

例如,如果将 Auto Scaling 组配置为使用 autoscaling: EC2_INSTANCE_TERMINATE 通知类型,并且您的 Auto Scaling 组终止了某个实例,则它会发送电子邮件通知。该电子邮件包含已终止实例的详细信息,如实例 ID 以及终止该实例的原因。

请注意,当 Amazon EC2 Auto Scaling 在组中添加或移除实例时,会向您发送有关这些更改的通知,每个实例只会发送一条通知。但是,这些通知的交付是尽力而为,您的实例在初始通知后仍可能失败,例如,如果以后的运行状况检查失败。因此,即使 Amazon EC2 Auto Scaling 一开始会通知你,但实例以后仍可能出现故障。请注意,您可以配置启动实例后 Amazon EC2 Auto Scaling 在执行第一次运行状况检查之前等待多长时间。有关更多信息,请参阅 设置自动扩缩组的运行状况检查宽限期

有关 Amazon SNS 的更多信息,请参阅《亚马逊简单通知服务开发者指南》。

SNS 通知

Amazon EC2 Auto Scaling 支持在发生以下事件时发送 Amazon SNS 通知。

事件 描述

autoscaling:EC2_INSTANCE_LAUNCH

实例启动成功

autoscaling:EC2_INSTANCE_LAUNCH_ERROR

实例启动失败

autoscaling:EC2_INSTANCE_TERMINATE

实例终止成功

autoscaling:EC2_INSTANCE_TERMINATE_ERROR

实例终止失败

消息包含以下信息:

  • Event — 事件。

  • AccountId — Amazon Web Services 账户 ID。

  • AutoScalingGroupName — Auto Scaling 组的名称。

  • AutoScalingGroupARN — Auto Scaling 组的 ARN。

  • EC2InstanceId — EC2 实例的 ID。

例如:

Service: AWS Auto Scaling Time: 2016-09-30T19:00:36.414Z RequestId: 4e6156f4-a9e2-4bda-a7fd-33f2ae528958 Event: autoscaling:EC2_INSTANCE_LAUNCH AccountId: 123456789012 AutoScalingGroupName: my-asg AutoScalingGroupARN: arn:aws:autoscaling:region:123456789012:autoScalingGroup... ActivityId: 4e6156f4-a9e2-4bda-a7fd-33f2ae528958 Description: Launching a new EC2 instance: i-0598c7d356eba48d7 Cause: At 2016-09-30T18:59:38Z a user request update of AutoScalingGroup constraints to ... StartTime: 2016-09-30T19:00:04.445Z EndTime: 2016-09-30T19:00:36.414Z StatusCode: InProgress StatusMessage: Progress: 50 EC2InstanceId: i-0598c7d356eba48d7 Details: {"Subnet ID":"subnet-id","Availability Zone":"zone"} Origin: AutoScalingGroup Destination: EC2

为 Amazon EC2 Auto Scaling 配置 Amazon SNS 通知

要使用 Amazon SNS 发送电子邮件通知,必须先创建一个主题,然后用您的电子邮件地址订阅该主题。

创建 Amazon SNS 主题

SNS 主题是一个逻辑接入点,即 Auto Scaling 组用来发送通知的通信通道。您可通过为主题指定名称来创建主题。

您在创建主题名称时,该名称必须满足以下要求:

  • 介于 1 到 256 个字符之间

  • 包含大写和小写 ASCII 字母、数字、下划线或连字符

有关更多信息,请参阅 Amazon Simple Notification Service 开发人员指南中的创建 Amazon SNS 主题

订阅 Amazon SNS 主题

要接收您的 Auto Scaling 组发送到该主题的通知,必须让一个终端节点订阅该主题。在此过程中,为端点指定要用来接收来自 Amazon EC2 Auto Scaling 的通知的电子邮件地址。

有关更多信息,请参阅 Amazon Simple Notification Service 开发人员指南中的订阅 Amazon SNS 主题

确认您的 Amazon SNS 订阅

Amazon SNS 向在上一步骤中指定的电子邮件地址发送确认电子邮件。

确保打开来自 AWS 通知的电子邮件并选择链接以确认订阅,然后再继续执行下一步。

您将收到来自的确认消息。 AWS Amazon SNS 现已配置为接收通知并以电子邮件形式将通知发送到指定的电子邮件地址。

配置 Auto Scaling 组以发送通知

您可以配置 Auto Scaling 组,以便在发生扩展事件(例如,启动实例或终止实例)时向 Amazon SNS 发送通知。Amazon SNS 向您指定的电子邮件地址发送通知,通知中包含有关实例的信息。

为 Auto Scaling 组配置 Amazon SNS 通知(控制台)
  1. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。

  2. 选中您的自动扩缩组旁边的复选框。

    将在页面底部打开一个拆分窗格,其中显示有关所选组的信息。

  3. 活动选项卡上,选择活动通知创建通知

  4. Create notifications 窗格上,执行以下操作:

    1. 对于 SNS 主题,选择您的 SNS 主题。

    2. 对于事件类型,选择要发送通知的事件。

    3. 选择 创建

为 Auto Scaling 组配置 Amazon SNS 通知 (AWS CLI)

使用以下 put-notification-configuration 命令。

aws autoscaling put-notification-configuration --auto-scaling-group-name my-asg --topic-arn arn --notification-types "autoscaling:EC2_INSTANCE_LAUNCH" "autoscaling:EC2_INSTANCE_TERMINATE"

测试通知

要为启动事件生成通知,请通过将 Auto Scaling 组的所需容量增加 1 来更新 Auto Scaling 组。您将在实例启动后的几分钟内收到通知。

更改所需容量(控制台)
  1. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。

  2. 选中您的自动扩缩组旁边的复选框。

    将在 Auto Scaling groups(Auto Scaling 组)页面底部打开一个拆分窗格,其中显示有关所选组的信息。

  3. Details(详细信息)选项卡上,选择 Group details(组详细信息)、Edit (编辑)

  4. 对于 Desired capacity (所需容量),将当前值增加 1。如果此值超过 Maximum capacity (最大容量),则还必须将 Maximum capacity (最大容量) 的值增加 1。

  5. 选择更新

  6. 在数分钟后,您将收到事件的通知。如果您不需要您为此测试启动的其他实例,则可以将 Desired capacity (所需容量) 减少 1。在数分钟后,您将收到事件的通知。

删除通知配置

如果您的 Amazon EC2 Auto Scaling 通知配置不再使用,您可以将其删除。

删除 Amazon EC2 Auto Scaling 通知配置(控制台)
  1. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。

  2. 选择您的 Auto Scaling 组。

  3. 活动选项卡上,选中您要删除的通知旁边的复选框,然后选择操作删除

删除 Amazon EC2 Auto Scaling 通知配置 (AWS CLI)

使用以下 delete-notification-configuration 命令。

aws autoscaling delete-notification-configuration --auto-scaling-group-name my-asg --topic-arn arn

有关删除 Amazon SNS 主题以及与您的 Auto Scaling 组关联的所有订阅的信息,请参阅 Amazon Simple Notification Service 开发人员指南中的删除 Amazon SNS 订阅和主题

加密 Amazon SNS 主题的密钥策略

您指定的 Amazon SNS 主题可能会使用通过 AWS Key Management Service创建的客户托管密钥进行加密。要授予 Amazon EC2 Auto Scaling 发布加密主题的权限,您必须先创建您的 KMS 密钥,然后将以下语句添加到 KMS 密钥的策略中。将示例 ARN 替换为允许访问密钥的相应服务相关角色的 ARN。有关更多信息,请参阅 Amazon Simple Notification Service 开发人员指南中的配置 AWS KMS 权限

在此示例中,策略声明向名为的服务相关角色AWSServiceRoleForAutoScaling授予使用客户托管密钥的权限。要了解有关 Amazon EC2 Auto Scaling 服务相关角色的更多信息,请参阅 Amazon EC2 Auto Scaling 的服务相关角色

{ "Sid": "Allow service-linked role use of the customer managed key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling" }, "Action": [ "kms:GenerateDataKey*", "kms:Decrypt" ], "Resource": "*" }

允许 Amazon EC2 Auto Scaling 发布加密主题的密钥策略不支持 aws:SourceArnaws:SourceAccount 条件键。