Amazon EC2 Auto Scaling 的手动扩缩 - Amazon EC2 Auto Scaling

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

Amazon EC2 Auto Scaling 的手动扩缩

您可以随时手动调整 Auto Scaling 组中的 EC2 实例数量。手动更改实例计数的过程称为手动扩展。手动缩放是 auto Scaling 的替代方案,尤其是在您想要进行一次性容量更改时。

在您手动扩展群组后,Amazon EC2 Auto Scaling 会根据您定义的扩展策略和计划操作恢复正常的自动扩展活动。对于启用了默认实例预热的群组,任何新实例都要经过一段预热期,然后才会开始为用于自动扩展的指标做出贡献。这个热身期有助于将小组稳定在新的容量上。有关更多信息,请参阅 为 Auto Scaling 组设置原定设置实例预热

有时,您可能需要在手动扩展组之前暂时禁用扩展策略和计划操作。这样可以防止手动扩展操作和自动扩展活动之间产生冲突。有关更多信息,请参阅 关闭缩放活动

更改现有自动扩缩组的所需容量

当您更改 Auto Scaling 组的所需容量时,Amazon EC2 Auto Scaling 会管理启动和终止实例的过程,以达到新的所需大小。

Console
要更改您自动扩缩组的大小
  1. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。

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

    分割窗格显示在页面底部。

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

  4. 对于所需容量,请增加或减少所需的容量。例如,要将组的大小增加一个,如果当前值为1,则输入2

    如果所需容量的新值大于所需的最小容量所需的最大容量,则所需的最大容量将自动增加到新的所需容量值。

  5. 完成后,选择 Update(更新)。

验证您指定的组大小是否导致启动的实例数量相同。例如,如果您将组的大小增加一个,请验证您的 Auto Scaling 组是否已启动另一个实例。

要验证 Auto Scaling 组的容量是否已更改
  1. 在 “活动” 选项卡的 “活动历史记录” 中,您可以查看与 Auto Scaling 组关联的活动的进度。Status(状态)列显示您实例的当前状态。当您的实例启动时,状态列将显示 Not yet in service。该实例启动后,状态会变为 Successful。您也可以使用刷新图标查看实例的当前状态。有关更多信息,请参阅 验证 Auto Scaling 组的扩缩活动

  2. 实例管理选项卡的实例中,您可以查看实例的状态。启动实例只需很短的时间。

    • Lifecycle(生命周期)列显示您的实例的状态。最初,您的实例处于 Pending 状态。在实例准备好接收流量时,其状态为 InService

    • 运行状况列显示对您的实例进行 Amazon EC2 Auto Scaling 运行状况检查的结果。

AWS CLI

以下示例假设您创建了一个最小大小为 1,最大大小为 5 的 Auto Scaling 组。因此,该组目前正在运行的实例是 1 个。

要更改 Auto Scaling 组的大小

使用set-desired-capacity命令更改 Auto Scaling 组的大小,如以下示例所示。

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

如果您选择遵守 Auto Scaling 组的默认冷却时间,必须指定 –-honor-cooldown 选项,如下面的示例所示。有关更多信息,请参阅 Amazon EC2 Auto Scaling 的缩放冷却时间

aws autoscaling set-desired-capacity --auto-scaling-group-name my-asg \ --desired-capacity 2 --honor-cooldown
验证 Auto Scaling 组的大小

使用describe-auto-scaling-groups命令确认 Auto Scaling 组的大小是否已更改,如以下示例所示。

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

以下是示例输出,其中提供了有关组和已启动实例的详细信息。

{ "AutoScalingGroups": [ { "AutoScalingGroupName": "my-asg", "AutoScalingGroupARN": "arn", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "MinSize": 1, "MaxSize": 5, "DesiredCapacity": 2, "DefaultCooldown": 300, "AvailabilityZones": [ "us-west-2a" ], "LoadBalancerNames": [], "TargetGroupARNs": [], "HealthCheckType": "EC2", "HealthCheckGracePeriod": 300, "Instances": [ { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2a", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-05b4f7d5be44822a6", "InstanceType": "t3.micro", "HealthStatus": "Healthy", "LifecycleState": "Pending" }, { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2a", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-0c20ac468fa3049e8", "InstanceType": "t3.micro", "HealthStatus": "Healthy", "LifecycleState": "InService" } ], "CreatedTime": "2019-03-18T23:30:42.611Z", "SuspendedProcesses": [], "VPCZoneIdentifier": "subnet-c87f2be0", "EnabledMetrics": [], "Tags": [], "TerminationPolicies": [ "Default" ], "NewInstancesProtectedFromScaleIn": false, "ServiceLinkedRoleARN": "arn", "TrafficSources": [] } ] }

注意 DesiredCapacity 显示了新值。Auto Scaling 组已启动另一个实例。

终止您自动扩缩组中的实例(AWS CLI)

有时,您可能想要在自动扩缩组中手动进行横向缩减,但同时又想终止指定的实例。您可以使用-scaling-group 命令在 Auto terminate-instance-in-autoScaling-group 中手动缩放,并指定要终止的实例的 ID 和--should-decrement-desired-capacity选项,如以下示例所示。

aws autoscaling terminate-instance-in-auto-scaling-group \ --instance-id i-026e4c9f62c3e448c --should-decrement-desired-capacity

以下是示例输出,其中提供了有关扩展活动的详细信息。

{ "Activities": [ { "ActivityId": "b8d62b03-10d8-9df4-7377-e464ab6bd0cb", "AutoScalingGroupName": "my-asg", "Description": "Terminating EC2 instance: i-026e4c9f62c3e448c", "Cause": "At 2023-09-23T06:39:59Z instance i-026e4c9f62c3e448c was taken out of service in response to a user request, shrinking the capacity from 1 to 0.", "StartTime": "2023-09-23T06:39:59.015000+00:00", "StatusCode": "InProgress", "Progress": 0, "Details": "{\"Subnet ID\":\"subnet-6194ea3b\",\"Availability Zone\":\"us-west-2c\"}" } ] }

此选项在控制台中不可用。但是,您可以使用 Amazon EC2 控制台的实例页面来终止您的 Auto Scaling 组中的实例。当您执行此操作时,Amazon EC2 Auto Scaling 会检测到该实例已停止运行,并在运行状况检查过程中自动替换该实例。在您终止实例后需要一两分钟,然后才会启动新实例。有关如何终止实例的信息,请参阅 Amazon EC2 Linux 实例用户指南中的终止实例

如果您终止了组中的实例,从而导致可用区之间的分布不均衡,Amazon EC2 Auto Scaling 会重新平衡该组以重新建立均衡分配,除非您暂停该AZRebalance流程。有关更多信息,请参阅 暂停和恢复 Amazon EC2 Auto Scaling 流程