当实例数介于最小值和最大值之间时,如何让 AWS ASG 不执行任何操作

当实例数介于最小值和最大值之间时,如何让 AWS ASG 不执行任何操作

我们正在使用 Terraform 为大多数 AWS EC2 实例启动 ASG。问题是,我们有时想在终止实例之前做一些额外的工作;例如:在终止运行该节点的 EC2 实例之前,从集群中退役该节点。如果我们只是降低min== max(我们的默认值),那么实例就会被终止,我们无法运行正常退役。

相反,我尝试降低min到新的期望值(例如:6)并将保持max为旧值(例如:10),在这种情况下发生的情况是该desired值保持在 10( )并且终止 EC2 实例会导致 ASG 启动一个新实例。注意:我们根本max没有设置 Terraform 设置。desired_capacity

如果我desired_capacity手动设置,则 ASG 可能会终止尚未正常退役的节点,因此我认为这对我来说不是一个选择。

我理想情况下希望 ASG 当前 EC2 实例数量介于和之间时不执行任何操作minmax并允许我手动终止实例。显然,如果数量低于这个数字,min我仍然希望 ASG 启动一个新的 EC2 实例。

有什么方法可以实现这个吗?

答案1

假定的解决方案:

选项1:您的 ASG 应使用实例保护功能进行创建-Terraform 文档

在这种情况下,我们可以进行下一步操作,例如退役:

  1. 执行特定实例的退役(从中删除数据)
  2. 减少数数ASG 规模与期望值之比
  3. 应用 Terraform 状态
  4. 从已退役的实例中删除保护标志:aws autoscaling set-instance-protection --instance-ids <instances_ids> --auto-scaling-group-name <asg_name> --no-protected-from-scale-in

选项 2:你的 ASG 是不是使用实例保护创建。

在这种情况下,我们可以进行下一步操作,例如退役:

  1. 在 ASG 的所有实例上添加保护标志:aws autoscaling set-instance-protection --instance-ids <instances_ids> --auto-scaling-group-name <asg_name> --protected-from-scale-in
  2. 执行特定实例的退役(从中删除数据)
  3. 减少数数ASG 规模与期望值之比
  4. 应用 Terraform 状态
  5. 从已退役的实例中删除保护标志:aws autoscaling set-instance-protection --instance-ids <instances_ids> --auto-scaling- group-name <asg_name> --no-protected-from-scale-in
  6. (可选)等待 ASG 缩小到所需大小并从其他实例中删除保护标志

答案2

有两种可能的方法可以实现你想要的:

选项1:暂停自动扩展流程

您可以在进行调整时将 Auto Scaling 组的处理“暂停”。

例如,您可以尝试:

  1. 暂停自动缩放处理:aws autoscaling suspend-processes --auto-scaling-group-name MyGroup
  2. 退役并终止您的 EC2 实例,
  3. 手动调整所需数量,
  4. 恢复自动扩展处理:aws autoscaling resume-processes --auto-scaling-group-name MyGroup

http://docs.aws.amazon.com/cli/latest/reference/autoscaling/suspend-processes.html

选项 2:使用 Auto Scaling 生命周期挂钩

使用生命周期挂钩,您启动和/或终止的 EC2 实例将有机会进行初始或终止前处理。例如,您可以让挂钩通知终止实例即将终止,并且它可以从您的集群中退出。

http://docs.aws.amazon.com/autoscaling/latest/userguide/lifecycle-hooks.html

相关内容