Auto Scaling
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

在 Auto Scaling 组扩展时获取 SNS 通知

使用 Auto Scaling 自动扩展应用程序时,知道 Auto Scaling 何时启动或终止 Auto Scaling 组中的 EC2 实例会很有用。Amazon SNS 协调并管理传输,或将通知发送到订阅客户端或终端节点。您可以将 Auto Scaling 配置为在 Auto Scaling 组扩展时发送 SNS 通知。

Amazon SNS 能够以 HTTP 或 HTTPS POST 以及电子邮件(SMTP,纯文本或 JSON 格式)的形式传输通知,或将通知作为消息发布到 Amazon SQS 队列。有关更多信息,请参阅 Amazon Simple Notification Service 开发人员指南 中的什么是 Amazon SNS

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

提示

如果您愿意,可以使用 Amazon CloudWatch Events 将目标配置为在 Auto Scaling 组扩展时或在执行生命周期操作时调用 Lambda 函数。有关更多信息,请参阅 在 Auto Scaling 组扩展时获取 CloudWatch Events

SNS 通知

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

事件 说明

autoscaling:EC2_INSTANCE_LAUNCH

实例启动成功

autoscaling:EC2_INSTANCE_LAUNCH_ERROR

实例启动失败

autoscaling:EC2_INSTANCE_TERMINATE

实例终止成功

autoscaling:EC2_INSTANCE_TERMINATE_ERROR

实例终止失败

消息包含以下信息:

  • Event — 活动。

  • AccountId — AWS 账户 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:us-west-2: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-c9663da0","Availability Zone":"us-west-2b"}

配置 Amazon SNS

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

创建一个 Amazon SNS 主题

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

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

订阅 Amazon SNS 主题

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

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

确认 Amazon SNS 订阅

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

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

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

配置 Auto Scaling 组以发送通知

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

使用控制台为 Auto Scaling 组配置 Amazon SNS 通知

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格上的 Auto Scaling 下,选择 Auto Scaling Groups

  3. 选择您的 Auto Scaling 组。

  4. Notifications 选项卡上,选择 Create notification

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

    1. 对于 Send a notification to:,选择您的 SNS 主题。

    2. 对于 Whenever instances,选择要为其发送通知的事件。

    3. 选择 Save

使用 AWS CLI 为 Auto Scaling 组配置 Amazon SNS 通知

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

Copy
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 组。Auto Scaling 会启动 EC2 实例,您将在数分钟内收到电子邮件通知。

使用控制台更改所需容量

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格上的 Auto Scaling 下,选择 Auto Scaling Groups

  3. 选择您的 Auto Scaling 组。

  4. Details 选项卡上,选择 Edit

  5. 对于 Desired,将当前值增加 1。请注意,如果此值超过 Max,您还必须将 Max 的值增加 1。

  6. 选择 Save

  7. 在数分钟后,您将收到启动事件的通知电子邮件。如果您不需要您为此测试启动的其他实例,则可以将 Desired 减少 1。在数分钟后,您将收到终止事件的通知电子邮件。

使用 AWS CLI 更改所需容量

使用以下 set-desired-capacity 命令:

Copy
aws autoscaling set-desired-capacity --auto-scaling-group-name my-asg --desired-capacity 2

验证是否收到扩展事件的通知

检查来自 Amazon SNS 的电子邮件消息并打开电子邮件。在收到 Auto Scaling 组的扩展事件通知后,您可通过查看 Auto Scaling 组的描述来确认该扩展事件。您将需要通知电子邮件中的信息,例如已启动或终止的实例的 ID。

使用控制台验证 Auto Scaling 组已启动新实例

  1. 选择您的 Auto Scaling 组。

  2. Activity History 选项卡上,Status 列显示实例的当前状态。例如,如果通知指示实例已启动,则使用刷新按钮来验证启动活动的状态是否为 Successful

  3. Instances 选项卡上,可以查看通知电子邮件中收到的 ID 的实例的当前 Lifecycle 状态。新实例启动后,其生命周期状态更改为 InService

使用 AWS CLI 验证 Auto Scaling 组已启动新实例

使用以下 describe-auto-scaling-groups 命令确认已更改 Auto Scaling 组的大小:

Copy
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg

下面的示例输出表明该组有两个实例。检查通知电子邮件中收到的 ID 的实例。

{
    "AutoScalingGroups": [
        {
            "AutoScalingGroupARN": "arn",
            "HealthCheckGracePeriod": 0,
            "SuspendedProcesses": [],
            "DesiredCapacity": 2,
            "Tags": [],
            "EnabledMetrics": [],
            "LoadBalancerNames": [],
            "AutoScalingGroupName": "my-asg",
            "DefaultCooldown": 300,
            "MinSize": 1,
            "Instances": [
                {
                    "InstanceId": "i-d95eb0d4",
                    "AvailabilityZone": "us-west-2b",
                    "HealthStatus": "Healthy",
                    "LifecycleState": "InService",
                    "LaunchConfigurationName": "my-lc"
                },
                {
                    "InstanceId": "i-13d7dc1f",
                    "AvailabilityZone": "us-west-2a",
                    "HealthStatus": "Healthy",
                    "LifecycleState": "InService",
                    "LaunchConfigurationName": "my-lc"
                }
            ],
            "MaxSize": 5,
            "VPCZoneIdentifier": null,
            "TerminationPolicies": [
                "Default"
            ],
            "LaunchConfigurationName": "my-lc",
            "CreatedTime": "2015-03-01T16:12:35.608Z",
            "AvailabilityZones": [
                "us-west-2b",
                "us-west-2a"
            ],
            "HealthCheckType": "EC2"
        }
    ]
}

删除通知配置

您可以随时删除 Auto Scaling 通知配置。

使用控制台删除 Auto Scaling 通知配置

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格上的 Auto Scaling 下,选择 Auto Scaling Groups

  3. 选择您的 Auto Scaling 组。

  4. Notifications 选项卡上,选择通知旁边的 Delete

使用 AWS CLI 删除 Auto Scaling 通知配置

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

Copy
aws autoscaling delete-notification-configuration --auto-scaling-group-name my-asg --topic-arn arn:aws:sns:us-west-2:123456789012:my-sns-topic

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