我们使用Terraform为大多数AWS EC2实例启动ASG。 问题是,偶尔我们想在终止一个实例之前做一些额外的工作; 例如:在集群运行的EC2实例终止之前,从集群中解散节点。 如果我们只是为了降低min == max (我们的默认值),那么一个实例被终止,我们不能运行一个优雅的退役。
相反,我试图将min降到新的期望值(例如:6),并将max保持在旧值(例如10),在这种情况下会发生什么情况是desired值保持在10( max )终止EC2实例导致ASG启动新的实例。 注意:我们没有设置Terraform desired_capacity设置。
如果手动设置desired_capacity ,我冒ASG终止一个尚未正常退役的节点,所以我不认为这是我的select。
我理想的情况是当ASG的当前EC2实例计数在min和max之间并让我手动终止实例时,ASG不做任何事情。 显然,如果计数低于min我仍然希望ASG启动一个新的EC2实例。
有没有办法做到这一点?
假设的解决scheme:
选项1 :您的ASG应创build实例保护打开 – Terraform文档
在这种情况下,我们可以有下一个操作序列,例如:
aws autoscaling set-instance-protection --instance-ids <instances_ids> --auto-scaling-group-name <asg_name> --no-protected-from-scale-in 选项2 :您的ASG 未创build实例保护。
在这种情况下,我们可以有下一个操作序列,例如:
aws autoscaling set-instance-protection --instance-ids <instances_ids> --auto-scaling-group-name <asg_name> --protected-from-scale-in aws autoscaling set-instance-protection --instance-ids <instances_ids> --auto-scaling- group-name <asg_name> --no-protected-from-scale-in 有两种可能的方法来实现你想要的:
选项1:暂停Auto Scaling进程
您可以在进行调整时将Auto Scaling组的处理置于“保持”状态。
例如,你可以尝试:
aws autoscaling suspend-processes --auto-scaling-group-name MyGroup 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