从自动扩缩组中分离或附加实例 - Amazon A EC2 uto Scaling

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

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

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

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

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

分离实例的注意事项

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

  • 仅当实例处于 InService 状态时,您才能将其分离。

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

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

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

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

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

注意

如果您要分离的实例位于 Standby 状态,请谨慎行事。在将实例置于 Standby 状态后尝试分离实例可能会导致其他实例意外终止。

附加实例的注意事项

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

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

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

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

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

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

  • 该实例的running状态为 Amazon EC2。

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

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

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

  • 如果 Auto Scaling 组附加了负载均衡器目标组或 Classic Load Balancer,则实例和负载均衡器必须位于同一组中VPC。

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

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

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

Console
将实例与自动扩缩组分离
  1. 在上打开亚马逊EC2控制台 https://console.aws.amazon.com/ec2/,然后从导航窗格中选择 A uto Scaling Gro ups。

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

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

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

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

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

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

将实例附加到自动扩缩组
  1. 打开亚马逊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 组相同的可用区中。选择关闭并使用符合条件的自动扩缩组重试。

AWS CLI

要分离和附加实例,请使用以下示例命令。替换每个 user input placeholder 用你自己的信息。

将实例与自动扩缩组分离
  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

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

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

    aws autoscaling attach-instances --instance-ids i-05b4f7d5be44822a6 --auto-scaling-group-name my-asg-for-testing
  2. 要在连接实例后验证 Auto Scaling 组的大小,请使用以下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" } ], ... } ] }