Как я могу предотвратить завершение экземпляра EC2 с помощью автоматического масштабирования?
Я хотел бы предотвратить завершение экземпляра EC2 функцией Auto Scaling, если этот экземпляр находится в середине какой-то обработки.
Фон:
Предположим, у меня есть группа Auto Scaling, в которой в настоящее время работает 5 экземпляров.
Я создаю сигнал тревоги при среднем использовании ЦП...
Предположим, что 4 экземпляра простаивают, а один выполняет некоторую тяжелую обработку...
Средняя загрузка процессора вызовет тревогу, и в результате будет выполнена политика масштабирования.
Как получить автоматическое масштабирование для завершения одного из экземпляров idle, а не того, что находится в середине обработки?
Ответы
Ответ 1
Update
Как отмеченный Райаном Уоллсом (+1), AWS тем временем предоставляет Защита экземпляра для контроля того, может ли Auto Scaling завершать конкретный экземпляр при масштабировании (см. вводный пост в блоге Защита экземпляра для автоматического масштабирования для ходьбы ):
Вы можете включить параметр защиты экземпляра при автоматическом масштабировании группы или отдельного экземпляра Auto Scaling. При автоматическом масштабировании запускает экземпляр, экземпляр наследует защиту экземпляра настройка группы Auto Scaling. [...]
Стоит отметить, что защита этого экземпляра применяется только к шкале обычного масштабирования шкалы в событиях:
Защита экземпляра не защищает экземпляры Auto Scaling от ручное завершение через консоль Amazon EC2, terminate-examples или API TerminateInstances. Пример защита не защищает экземпляр Auto Scaling от завершения если он не прошел проверку работоспособности и должен быть заменен. Кроме того, экземпляр защита не защищает экземпляры Spot в группе Auto Scaling от прерывания.
Как обычно, эта функция доступна через консоль управления AWS (меню "Действия" - "Защита экземпляра" - "Установить масштаб в защите" )), AWS CLI ( set-instance-protection) и API (SetInstanceProtection действие API).
Последние два варианта позволяют автоматизировать сценарий под рукой, т.е. нужно будет включить защиту экземпляра до запуска заданий "тяжелой обработки" и отключить защиту экземпляра, как только они будут завершены, чтобы экземпляр снова имел право на завершение.
Исходный ответ
Эта функция в настоящее время недоступна для Auto Scaling Amazon EC2 - в то время как вы действительно можете Настроить [] политику завершения экземпляра для вашей группы автоматического масштабирования, доступные политики не включают такую (довольно продвинутую) концепцию:
Автоматическое масштабирование предоставляет для вас следующие параметры политики завершения выбирать из. Вы можете указать один или несколько из этих параметров в своем политика завершения.
-
OldestInstance. Укажите это, если вы хотите, чтобы самый старый экземпляр в вашей группе автоматического масштабирования был завершен. [...]
-
NewestInstance. Укажите это, если вы хотите, чтобы последний запущенный экземпляр был завершен. [...]
-
OldestLaunchConfiguration. Укажите это, если вы хотите, чтобы экземпляр, запущенный с использованием самой старой конфигурации запуска, был прекращается. [...]
-
ClosestToNextInstanceHour. Укажите это, если вы хотите, чтобы экземпляр, ближайший к завершающему счету оплаты, был прекращается. [...]
-
По умолчанию - укажите это, если вы хотите, чтобы Auto Scaling использовал политику завершения по умолчанию для выбора экземпляров для завершения.
Ответ 2
Я только что успешно справился с проблемой долгосрочных заданий в группе автоматического масштабирования, используя относительно недавнюю функцию привязки к жизненному циклу.
Проблема с попыткой выбрать idle node для завершения, в моем случае, заключалась в том, что процесс, который выбирает idle node, будет гоняться против процессов, которые отправляют работу узлам. В этом случае лучше использовать стратегию, в которой любой node может быть прерван, но прекращение происходит изящно, так что никакая работа не будет потеряна. Затем вы можете использовать все стандартные средства политики автоматического масштабирования для управления масштабированием и масштабированием.
Крюк жизненного цикла завершения позволяет пользователю (или процессу) выполнять действия на node после того, как он был помещен в промежуточное состояние (обозначенное Terminating: Wait) группой автоматического масштабирования. Затем пользователь (или процесс) отвечает за завершение действия жизненного цикла посредством вызова API AWS, в результате чего завершается завершение экземпляра EC2.
То, как я это задал, короче:
- Создайте роль, которая позволяет автоматически масштабировать сообщение в очередь SQS.
- Создайте очередь SQS для сообщений о завершении.
- Создайте монитор script, который запускается как служба в каждом node. Мой script - это простой конечный автомат, управляемый событиями, который последовательно переходит из MONITORING (опроса SQS для сообщения о завершении для node) для DRAINING (опроса очереди заданий до тех пор, пока на node не будет выполняться никакая работа) to TERMINATED (вызов полного цикла).
- Стандартная конфигурация для автоматического масштабирования AWS, управляемого событиями; то есть создания аварийных сигналов CloudWatch и политик автоматического масштабирования для масштабирования и масштабирования.
Одним из препятствий для этого подхода является то, что управление привязкой жизненного цикла еще не поддерживается в SDK (boto, по крайней мере, не поддерживает его AFAIK), и нет ресурсов Cloud Formation для перехватов.дел >
Соответствующая документация AWS находится здесь:
http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/AutoScalingGroupLifecycle.html
Ответ 3
Amazon наконец-то решила этот вопрос. Теперь существует "защита экземпляра", где вы можете пометить свой экземпляр как защищенный, и он не будет прерван во время "шкалы в".
См. https://aws.amazon.com/blogs/aws/new-instance-protection-for-auto-scaling
Ответ 4
aws-cli - ваш лучший друг..
Ответ 5
Вы можете использовать Amazon CloudWatch для достижения этой цели:
http://aws.typepad.com/aws/2013/01/amazon-cloudwatch-alarm-actions.html. Из статьи:
Вы можете использовать аналогичную стратегию, чтобы избавиться от экземпляров, которым поручено обрабатывать пакетные процессы с интенсивным вычислением. Как только процессор простаивает, и работа завершена, завершите экземпляр и сохраните деньги!
В этом случае, поскольку вы будете обрабатывать завершение, вам нужно будет удалить политику масштабирования. Также см. Другой вариант: fooobar.com/info/445553/....