从自动扩缩组中分离或附加实例 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

从自动扩缩组中分离或附加实例

您可以从自动扩缩组中分离实例。分离实例后,该实例将变为独立,可以自行管理,也可以附加到与其所属原始组分开的其他自动扩缩组。例如,当您想要使用已经运行应用程序的现有实例执行测试时,这可能很有用。

本主题提供有关如何分离和附加实例的说明。附加实例时,您也可以使用现有实例而不是已分离的实例。

建议使用备用程序将实例暂时从组中删除,而不是将实例分离然后重新附加到同一个组。有关更多信息,请参阅 临时从 Auto Scaling 组中移除实例

分离实例的注意事项

分离实例时,请记住以下几点:

  • 仅当实例处于 InServiceStandBy 状态时,您才能将其分离。如果您要分离的实例位于 StandBy 状态,请谨慎行事。将实例置于 StandBy 状态后尝试分离实例时,在 API 调用中添加 ShouldDecrementDesiredCapacity 标志可能会导致其他实例意外终止。

  • 分离实例后,该实例会继续运行并产生费用。为避免不必要的费用,请确保在不再需要时重新附加或终止已分离的实例。

  • 您可以选择按照要分离的实例数量递减所需容量。如果您选择不递减容量,Amazon EC2 Auto Scaling 会启动新实例替换分离的实例以维持所需容量。

  • 如果要分离的实例数将使自动扩缩组容量降到低于其最小容量,则必须递减最小容量。

  • 如果在未递减所需容量的情况下从同一可用区分离多个实例,除非暂停 AZRebalance 进程,否则组将自行重新平衡。有关更多信息,请参阅 暂停和恢复 Amazon EC2 Auto Scaling 进程

  • 如果您将实例从已附加负载均衡器目标组或经典负载均衡器的 Auto Scaling 组分离,则将从该负载均衡器取消注册实例。如果为负载均衡器启用了连接耗尽(取消注册延迟),则 Amazon EC2 Auto Scaling 会等待未送达请求完成。

附加实例的注意事项

附加实例时应注意以下几点:

  • Amazon EC2 Auto Scaling 对附加的实例与组本身启动的实例同等对待。这意味着,如果选择了附加的实例,则可以在横向缩减事件期间将其终止。AWSServiceRoleForAutoScaling 服务相关角色授予的权限允许 Amazon EC2 Auto Scaling 执行此操作。

  • 当您附加实例时,该组的所需容量将增加要附加的实例数。如果添加新实例后的所需容量超出了组的最大大小,则附加更多实例的请求会失败。

  • 如果您向组中添加实例,导致跨可用区分布不均衡,Amazon EC2 Auto Scaling 会重新平衡该组以重新建立均衡分配,除非您暂停 AZRebalance 流程。有关更多信息,请参阅 暂停和恢复 Amazon EC2 Auto Scaling 进程

  • 如果您将实例附加到已附加负载均衡器目标组或经典负载均衡器的 Auto Scaling 组,则会将实例注册到该负载均衡器。

对于要附加的实例,必须满足以下条件:

  • 该实例通过 Amazon EC2 处于 running 的状态。

  • 用于启动实例的 AMI 必须仍然存在。

  • 实例不是其他 Auto Scaling 组的成员。

  • 实例会启动到自动扩缩组中定义的可用区之一。

  • 如果 Auto Scaling 组具有附加的负载均衡器目标组或经典负载均衡器,则实例和负载均衡器必须都位于同一 VPC 中。

使用分离和附加将实例移至其他组

使用以下程序之一将实例与自动扩缩组分离,然后将其附加到其他自动扩缩组。

要从分离的实例创建新的自动扩缩组,请参阅使用 Amazon CLI 从现有实例中创建自动扩缩组(不推荐,创建启动配置)。

Console
将实例与自动扩缩组分离
  1. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台,然后从导航窗格中选择 自动扩缩组

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

    这时将在页面底部打开一个拆分窗格。

  3. Instance management(实例管理)选项卡上的 Instances(实例)中,选择一个实例,然后选择 Actions(操作)、Detach(分离)。

  4. 分离实例对话框中,保持替换实例复选框处于选中状态以启动替换实例。清除该复选框可减少所需容量。

  5. 当系统提示进行确认时,键入 detach 以确认从自动扩缩组中删除指定的实例,然后选择 Detach instance

现在,您可以将该实例附加到其他自动扩缩组。

要将实例附上某个 Auto Scaling 组
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. (可选)在导航窗格上的 Auto Scaling 下,选择 Auto Scaling Groups(Auto Scaling 组)。选择 Auto Scaling 组并验证 Auto Scaling 组的最大大小足以再添加一个实例。否则,在 Details(详细信息)选项卡上,增加最大容量。

  3. 在导航窗格上的 Instances(实例)下,选择 Instances(实例),然后选择一个实例。

  4. 依次选择操作实例设置附加到 Auto Scaling 组

  5. 附加到 Auto Scaling 组页面上,为 Auto Scaling 组,输入组名称,然后选择附加

  6. 如果实例不符合条件,则会显示一条错误消息并提供详细信息。例如,实例可能没有位于与 Auto Scaling 组相同的可用区中。选择关闭并使用符合条件的自动扩缩组重试。

Amazon CLI

要分离和附加实例,请使用以下示例命令。将每个用户输入占位符替换为您自己的信息。

将实例与自动扩缩组分离
  1. 要描述当前实例,请使用以下 describe-auto-scaling-instances 命令。

    aws autoscaling describe-auto-scaling-instances \ --query 'AutoScalingInstances[?AutoScalingGroupName==`my-asg`]'

    下面的示例显示运行此命令时产生的输出。

    记下您打算从该组中移除的实例的 ID。在下一步骤中,您需要用到此 ID。

    { "AutoScalingInstances": [ { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2a", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-05b4f7d5be44822a6", "InstanceType": "t3.micro", "AutoScalingGroupName": "my-asg", "HealthStatus": "HEALTHY", "LifecycleState": "InService" }, { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2a", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-0c20ac468fa3049e8", "InstanceType": "t3.micro", "AutoScalingGroupName": "my-asg", "HealthStatus": "HEALTHY", "LifecycleState": "InService" }, { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2a", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-0787762faf1c28619", "InstanceType": "t3.micro", "AutoScalingGroupName": "my-asg", "HealthStatus": "HEALTHY", "LifecycleState": "InService" }, { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2a", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-0f280a4c58d319a8a", "InstanceType": "t3.micro", "AutoScalingGroupName": "my-asg", "HealthStatus": "HEALTHY", "LifecycleState": "InService" } ] }
  2. 要分离实例而不递减所需容量,请使用以下 detach-instances 命令。

    aws autoscaling detach-instances --instance-ids i-05b4f7d5be44822a6 \ --auto-scaling-group-name my-asg

    要分离实例并递减所需容量,请包含 --should-decrement-desired-capacity 选项。

    aws autoscaling detach-instances --instance-ids i-05b4f7d5be44822a6 \ --auto-scaling-group-name my-asg --should-decrement-desired-capacity

现在,您可以将该实例附加到其他自动扩缩组。

要将实例附上某个 Auto Scaling 组
  1. 要将实例附加到其他自动扩缩组,请使用以下 attach-instances 命令。

    aws autoscaling attach-instances --instance-ids i-05b4f7d5be44822a6 --auto-scaling-group-name my-asg-for-testing
  2. 要验证附加实例后自动扩缩组的大小,请使用以下 describe-auto-scaling-groups 命令。

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names my-asg-for-testing

    以下示例响应显示该组有两个正在运行的实例,其中一个是您附加的实例。

    { "AutoScalingGroups": [ { "AutoScalingGroupName": "my-asg-for-testing", "AutoScalingGroupARN": "arn", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "2", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "MinSize": 1, "MaxSize": 5, "DesiredCapacity": 2, ... "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": "InService" }, { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2a", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "2", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-00dcdfffdf5175890", "InstanceType": "t3.micro", "HealthStatus": "Healthy", "LifecycleState": "InService" } ], ... } ] }