Мы используем Terraform для запуска ASG для большинства наших инстансов AWS EC2. Проблема в том, что время от времени мы хотим проделать дополнительную работу перед завершением экземпляра; например: вывод из эксплуатации узла из кластера до того, как экземпляр EC2, на котором он работал, прекращается. Если бы мы просто опустили min
== max
(наше значение по умолчанию), то экземпляр прекращает работу, и мы не можем выполнить постепенное списание.
Вместо этого то, что я пробовал, снижает min
к новому желаемому значению (пример: 6) и сохраняя max
при старом значении (пример: 10) в этом случае происходит то, что desired
значение остается на уровне 10 ( max
), а завершение экземпляра EC2 вызывает запуск нового экземпляра ASG. ПРИМЕЧАНИЕ: мы не устанавливаем Terraform desired_capacity
установка вообще.
Если я установлю desired_capacity
вручную, я рискую, что ASG завершит работу узла, который не был корректно выведен из эксплуатации, поэтому я не думаю, что это вариант для меня.
В идеале я бы хотел, чтобы ASG ничего не делала, когда текущее количество инстансов EC2 для этой ASG находится между min
и max
и позвольте мне вручную завершить экземпляры. Очевидно, если счет идет ниже min
Я все еще хочу, чтобы ASG запустила новый экземпляр EC2.
Есть ли способ добиться этого?
Есть два возможных способа добиться желаемого:
Опция 1: Приостановить процессы автоматического масштабирования
Вы можете приостановить обработку группы 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
Предполагаемые решения:
Опция 1: Ваша ASG должна быть создана с защитой экземпляра НА - Документы Terraform
В этом случае у нас могла бы быть следующая последовательность операций, например, вывод из эксплуатации:
aws autoscaling set-instance-protection --instance-ids <instances_ids> --auto-scaling-group-name <asg_name> --no-protected-from-scale-in
Вариант 2: Ваша ASG была не создан с защитой экземпляра.
В этом случае у нас могла бы быть следующая последовательность операций, например, вывод из эксплуатации:
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