Для AWS ASG, как настроить пользовательскую проверку готовности для новых экземпляров?

У нас есть группа AutoScaling, которая запускает контейнеры (используя ECS). Когда мы добавляем ИЛИ заменяем экземпляры EC2 в ASG, на них нет нужных нам образов докеров. Итак, мы запускаем несколько docker pull команды, использующие cloud-init для получения изображений при загрузке.

Однако ASG считает, что новый экземпляр готов, и завершает работу старого. Но на самом деле этот новый экземпляр не готов, пока не будут извлечены все образы докеров.


Например, предположим, что желаемый счетчик моей ASG равен 5, и мне нужно вытащить 5 контейнеров, используя cloud-init. Теперь я хочу заменить все экземпляры EC2 в моей ASG.

Когда новые экземпляры начнут загружаться, ASG прекратит работу старых экземпляров. Но из-за docker pull Во время развертывания будет время, когда фактические действительные экземпляры будут меньше 3 или 2.


Как я могу "пометить экземпляр как готовый", только когда завершение cloud-init?

Примечание: я думаю, что Cloudformation может восполнить этот пробел в коммуникации, используя CFN-Bootstrap. Но я не использую Cloudformation.

1 ответ

Решение

То, что вы выглядите, это AutoScaling Lifecycle Hooks. Вы можете сохранить экземпляр в состоянии Pending: Подождите, пока завершится извлечение докера. Затем вы можете переместить экземпляр в InService. все это можно сделать с помощью интерфейса командной строки AWS, поэтому его можно реализовать с помощью команды автоматического масштабирования AWS до и после команд докера.

Ссылка на предоставленную мною документацию подробно объясняет эту функцию и предоставляет отличные примеры того, как ее использовать.

Другие вопросы по тегам