Назад | Перейти на главную страницу

Как заставить AWS ASG ничего не делать, когда количество экземпляров находится в диапазоне от минимального до максимального

Мы используем 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, пока вносите изменения.

Например, вы можете попробовать:

  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

Предполагаемые решения:

Опция 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 не уменьшится до желаемого размера, и снимите флаг защиты с других экземпляров.