

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

# 从自动扩缩组中分离或附加实例
<a name="ec2-auto-scaling-detach-attach-instances"></a>

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

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

建议使用备用程序将实例暂时从组中删除，而不是将实例分离然后重新附加到同一个组。有关更多信息，请参阅 [临时从 Auto Scaling 组中移除实例](as-enter-exit-standby.md)。

**Topics**
+ [分离实例的注意事项](#detach-instances-considerations)
+ [附加实例的注意事项](#attach-instances-considerations)
+ [使用分离和附加将实例移至其他组](#detach-attach-instances)

## 分离实例的注意事项
<a name="detach-instances-considerations"></a>

分离实例时，请记住以下几点：
+ 仅当实例处于 `InService` 或 `StandBy` 状态时，您才能将其分离。如果您要分离的实例位于 `StandBy` 状态，请谨慎行事。将实例置于 `StandBy` 状态后尝试分离实例时，在 API 调用中添加 `ShouldDecrementDesiredCapacity` 标志可能会导致其他实例意外终止。
+ 分离实例后，该实例会继续运行并产生费用。为避免不必要的费用，请确保在不再需要时重新附加或终止已分离的实例。
+ 您可以选择按照要分离的实例数量递减所需容量。如果您选择不递减容量，Amazon EC2 Auto Scaling 会启动新实例替换分离的实例以维持所需容量。
+ 如果要分离的实例数将使自动扩缩组容量降到低于其最小容量，则必须递减最小容量。
+ 如果在未递减所需容量的情况下从同一可用区分离多个实例，除非暂停 `AZRebalance` 进程，否则组将自行重新平衡。有关更多信息，请参阅 [暂停和恢复 Amazon EC2 Auto Scaling 进程](as-suspend-resume-processes.md)。
+ 如果您将实例从已附加负载均衡器目标组或经典负载均衡器的 Auto Scaling 组分离，则将从该负载均衡器取消注册实例。如果为负载均衡器启用了连接耗尽（取消注册延迟），则 Amazon EC2 Auto Scaling 会等待未送达请求完成。

## 附加实例的注意事项
<a name="attach-instances-considerations"></a>

附加实例时应注意以下几点：
+ Amazon EC2 Auto Scaling 对附加的实例与组本身启动的实例同等对待。这意味着，如果选择了附加的实例，则可以在横向缩减事件期间将其终止。AWSServiceRoleForAutoScaling 服务相关角色授予的权限允许 Amazon EC2 Auto Scaling 执行此操作。
+ 当您附加实例时，该组的所需容量将增加要附加的实例数。如果添加新实例后的所需容量超出了组的最大大小，则附加更多实例的请求会失败。
+ 如果您向组中添加实例，导致跨可用区分布不均衡，Amazon EC2 Auto Scaling 会重新平衡该组以重新建立均衡分配，除非您暂停 `AZRebalance` 流程。有关更多信息，请参阅 [暂停和恢复 Amazon EC2 Auto Scaling 进程](as-suspend-resume-processes.md)。
+ 如果您将实例附加到已附加负载均衡器目标组或经典负载均衡器的 Auto Scaling 组，则会将实例注册到该负载均衡器。

对于要附加的实例，必须满足以下条件：
+ 该实例通过 Amazon EC2 处于 `running` 的状态。
+ 用于启动实例的 AMI 必须仍然存在。
+ 实例不是其他 Auto Scaling 组的成员。
+ 实例会启动到自动扩缩组中定义的可用区之一。
+ 如果 Auto Scaling 组具有附加的负载均衡器目标组或经典负载均衡器，则实例和负载均衡器必须都位于同一 VPC 中。

## 使用分离和附加将实例移至其他组
<a name="detach-attach-instances"></a>

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

要从分离的实例创建新的自动扩缩组，请参阅[使用现有实例创建 Auto Scaling 组 Amazon CLI](create-asg-from-instance.md)（不推荐，创建启动配置）。

------
#### [ Console ]

**将实例与自动扩缩组分离**

1. 在上打开 Amazon EC2 控制台 [https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)，然后从导航窗格中选择 A **uto Scaling Gro** ups。

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

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

1. 在 **Instance management**（实例管理）选项卡上的 **Instances**（实例）中，选择一个实例，然后选择 **Actions**（操作）、**Detach**（分离）。

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

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

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

**将实例附加到自动扩缩组**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/) 的 Amazon EC2 控制台。

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

1. 在导航窗格上的 **Instances**（实例）下，选择 **Instances**（实例），然后选择一个实例。

1. 依次选择**操作**、**实例设置**和**附加到 Auto Scaling 组**。

1. 在**附加到 Auto Scaling 组**页面上，为 **Auto Scaling 组**，输入组名称，然后选择**附加**。

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

------
#### [ Amazon CLI ]

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

**将实例与自动扩缩组分离**

1. 要描述当前实例，请使用以下[describe-auto-scaling-instances](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-instances.html)命令。

   ```
   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"
           }
       ]
   }
   ```

1. 要分离实例而不递减所需容量，请使用以下 [detach-instances](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/detach-instances.html) 命令。

   ```
   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](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/attach-instances.html) 命令。

   ```
   aws autoscaling attach-instances --instance-ids i-05b4f7d5be44822a6 --auto-scaling-group-name my-asg-for-testing
   ```

1. 要在连接实例后验证 Auto Scaling 组的大小，请使用以下[describe-auto-scaling-groups](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-groups.html)命令。

   ```
   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"
                   }
               ],
               ...
           }
       ]
   }
   ```

------