在 Auto Scaling 组扩展时获取 Amazon SNS 通知
当 Amazon EC2 Auto Scaling 启动或终止 Auto Scaling 组中的 EC2 实例时,您可以收到通知。您可以使用 Amazon Simple Notification Service (Amazon SNS) 管理通知。
Amazon SNS 协调并管理传输,或将通知发送到订阅客户端或终端节点。Amazon SNS 提供了各种通知选项,包括以 HTTP 或 HTTPS POST、电子邮件(SMTP,采用纯文本或 JSON 格式)的形式传输通知,或将通知作为消息发布到 Amazon SQS 队列,从而使您能够以编程方式处理这些通知。有关更多信息,请参阅 Amazon Simple Notification Service 开发人员指南。
例如,如果将 Auto Scaling 组配置为使用 autoscaling:
EC2_INSTANCE_TERMINATE
通知类型,并且您的 Auto Scaling 组终止了某个实例,则它会发送电子邮件通知。该电子邮件包含已终止实例的详细信息,如实例 ID 以及终止该实例的原因。
通知有助于设计事件驱动型应用程序。如果您使用通知来检查资源是否进入所需状态,则可以不再使用轮询,并且您不会遇到 RequestLimitExceeded
错误,这有时是由轮询引起的。
Amazon 提供了各种可用于发送通知的工具。或者,您可以使用 EventBridge 和 Amazon SNS 在您的 Auto Scaling 组启动或终止实例时发送通知。在 EventBridge 中,该规则描述向您通知的事件。在 Amazon SNS 中,该主题描述您接收的通知的类型。使用此选项,您可以决定某些事件是否应该触发 Lambda 函数。有关更多信息,请参阅使用 EventBridge 处理 Auto Scaling 事件。
目录
SNS 通知
Amazon EC2 Auto Scaling 支持在发生以下事件时发送 Amazon SNS 通知。
事件 | 描述 |
---|---|
|
实例启动成功 |
|
实例启动失败 |
|
实例终止成功 |
|
实例终止失败 |
消息包含以下信息:
-
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"}
为 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 向在上一步骤中指定的电子邮件地址发送确认电子邮件。
确保打开并选择链接以确认订阅,然后再继续执行下一步。
您将收到来自 Amazon 的确认消息。Amazon SNS 现已配置为接收通知并以电子邮件形式将通知发送到指定的电子邮件地址。
配置 Auto Scaling 组以发送通知
您可以配置 Auto Scaling 组,以便在发生扩展事件(例如,启动实例或终止实例)时向 Amazon SNS 发送通知。Amazon SNS 向您指定的电子邮件地址发送通知,通知中包含有关实例的信息。
为 Auto Scaling 组配置 Amazon SNS 通知(控制台)
访问 https://console.aws.amazon.com/ec2/
,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。 -
选中您的 Auto Scaling 组旁边的复选框。
将在页面底部打开一个拆分窗格,其中显示有关所选组的信息。
-
在活动选项卡上,选择活动通知、创建通知。
-
在 Create notifications 窗格上,执行以下操作:
-
对于 SNS 主题,选择您的 SNS 主题。
-
对于事件类型,选择要发送通知的事件。
-
选择 Create(创建)。
-
为 Auto Scaling 组配置 Amazon SNS 通知 (Amazon CLI)
使用以下 put-notification-configuration 命令。
aws autoscaling put-notification-configuration --auto-scaling-group-name
my-asg
--topic-arnarn
--notification-types "autoscaling:EC2_INSTANCE_LAUNCH" "autoscaling:EC2_INSTANCE_TERMINATE"
测试通知
要为启动事件生成通知,请通过将 Auto Scaling 组的所需容量增加 1 来更新 Auto Scaling 组。您将在实例启动后的几分钟内收到通知。
更改所需容量(控制台)
访问 https://console.aws.amazon.com/ec2/
,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。 -
选中您的 Auto Scaling 组旁边的复选框。
将在 Auto Scaling groups(Auto Scaling 组)页面底部打开一个拆分窗格,其中显示有关所选组的信息。
-
在 Details(详细信息)选项卡上,选择 Group details(组详细信息)、Edit (编辑)。
-
对于 Desired capacity (所需容量),将当前值增加 1。如果此值超过 Maximum capacity (最大容量),则还必须将 Maximum capacity (最大容量) 的值增加 1。
-
选择 Update(更新)。
-
在数分钟后,您将收到事件的通知。如果您不需要您为此测试启动的其他实例,则可以将 Desired capacity (所需容量) 减少 1。在数分钟后,您将收到事件的通知。
删除通知配置
如果您的 Amazon EC2 Auto Scaling 通知配置不再使用,您可以将其删除。
删除 Amazon EC2 Auto Scaling 通知配置(控制台)
访问 https://console.aws.amazon.com/ec2/
,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。 -
选择您的 Auto Scaling 组。
-
在活动选项卡上,选中您要删除的通知旁边的复选框,然后选择操作、删除。
删除 Amazon EC2 Auto Scaling 通知配置 (Amazon CLI)
使用以下 delete-notification-configuration 命令。
aws autoscaling delete-notification-configuration --auto-scaling-group-name
my-asg
--topic-arnarn
有关删除 Amazon SNS 主题以及与您的 Auto Scaling 组关联的所有订阅的信息,请参阅 Amazon Simple Notification Service 开发人员指南中的删除 Amazon SNS 订阅和主题。