分离或附加实例 - Amazon EC2 Auto Scaling

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

分离或附加实例

您可以将实例与 Auto Scaling 组分离。分离实例后,该实例将变得独立,可以单独管理,也可以附加到与其所属的原始组分开的其他 Auto Scaling 组。例如,当您想要使用已在运行应用程序的现有实例进行测试时,这可能很有用。

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

我们建议您使用备用程序暂时从组中移除实例,而不是将实例分离并重新连接到同一组。有关更多信息,请参阅 临时从 Auto Scaling 组中移除实例

分离实例的注意事项

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

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

  • 分离实例后,它会继续运行并产生费用。为避免不必要的费用,请务必在不再需要已分离的实例时重新连接或终止它们。

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

  • 如果您要分离的实例数量会使 Auto Scaling 组低于其最小容量,则必须减少最小容量。

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

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

注意

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

连接实例的注意事项

连接实例时请注意以下几点:

  • 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 组中定义的其中一个可用区。

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

使用分离和连接将实例移至其他组

使用以下过程之一将实例与 Auto Scaling 组分离,然后将其附加到其他 Auto Scaling 组。

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

Console
将实例与 Auto Scaling 组分离
  1. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。

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

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

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

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

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

现在,您可以将该实例连接到其他 Auto Scaling 组。

要将实例附上某个 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 组相同的可用区中。选择 “关闭”,然后使用符合条件的 Auto Scaling 群组重试。

AWS CLI

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

将实例与 Auto Scaling 组分离
  1. 要描述当前实例,请使用以下 desc ribe-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. 要在不减少所需容量的情况下分离实例,请使用以下 d etach-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 组。

要将实例附上某个 Auto Scaling 组
  1. 要将实例连接到其他 Auto Scaling 组,请使用以下 attach-instan ces 命令。

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