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

Как я могу автоматически циклически сменять новое изображение в группе AWS Auto Scaling?

У меня есть настройка веб-приложения с балансировщиком нагрузки и группой автоматического масштабирования для управления масштабированием. Исходный код находится в репозитории git, поэтому мне не нужно обновлять изображения при изменении кода, но иногда среда меняется, поэтому мы создаем новое изображение. Затем это изображение нужно циклически включить в группу автоматического масштабирования.

Есть ли способ автоматически переключать изображения? Прямо сейчас я планирую действие по увеличению и уменьшению масштаба, которое избавляет от старых экземпляров.

Более простой способ - увеличить количество минимальных экземпляров в группе автоматического масштабирования (ASG) до удвоения текущего количества, дождаться, когда все они будут запущены, а затем изменить это минимальное количество экземпляров до прежнего. ELB уничтожит старые экземпляры и оставит новые экземпляры с кодом. Для достижения этой политики завершения необходимо установить значение 'OldestInstance'работать по назначению. Политика завершения по умолчанию может иметь нежелательные побочные эффекты.

Вы можете посмотреть параметры и примеры AWS CLI здесь: http://docs.aws.amazon.com/cli/latest/reference/autoscaling/update-auto-scaling-group.html

Я хотел бы предложить для этого "AWS-HA-Release" - как работает AWS-HA-Release:

  1. Если текущая группа автомасштабирования и ELB сообщают о 5 исправных экземплярах,
  2. AWS-HA-Release запускает новый экземпляр в производственную среду и ожидает, пока ELB определит его как работоспособный (доведите общее количество работоспособных экземпляров до 6).
  3. Удаляет старый экземпляр (всего 5)
  4. Приводит в эксплуатацию еще один экземпляр (всего 6)
  5. Удаляет старый экземпляр (всего 5)
  6. и так далее, пока не будут заменены все экземпляры

В этом случае вы можете отправлять новый код или новые версии AMI без простоев и пользоваться преимуществами совершенно новых экземпляров. Инструмент AWS-HA-Release доступен по адресу https://github.com/colinbjohnson/aws-missing-tools.

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

некоторые ссылки. http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html

Также взгляните на Netflix Asgard инструмент с открытым исходным кодом. Он может не только настраивать группы автоматического масштабирования, но и выполнять скользящие выпуски новых образов AMI для группы экземпляров.

По состоянию на 16.06.2020 EC2 AutoScaling поддерживает обновление экземпляра - один вызов API для безопасной и автономной замены каждого экземпляра в ASG.

Чтобы использовать его, обновите свой ASG, установив конфигурацию запуска или шаблон запуска, содержащий желаемый AMI, а затем вызовите StartInstanceRefresh.

https://aws.amazon.com/blogs/compute/introduction-instance-refresh-for-ec2-auto-scaling/

Честно говоря, нет действительно хорошего способа сделать это. Лучший способ, который я нашел, - это указать версию в имени ASG. Каждый раз, когда я обновляю AMI, я создаю новую конфигурацию запуска ASG + с новой версией, чтобы она не конфликтовала с другой группой. Затем я завершаю все экземпляры в старой группе.

Если требуется более отказоустойчивое развертывание, я рекомендую добавить еще один шаг, включая создание нового балансировщика нагрузки. Это позволяет изолировать обе ASG друг от друга. Это также позволяет вам иметь «промежуточную» область для последней проверки ваших изменений перед обновлением. Затем, когда вы будете готовы к переключению, обновите записи DNS и завершите все экземпляры в старой группе.

Как я писал Вот (аналогичный вопрос, только с Terraform), он никак не встроен в ASG, кроме случаев, когда вы используете облачную информацию. Я тоже боролся с этим, поэтому в итоге написал "ролик", который следит за несколькими ASG, проверяет их состояние и обновления. Всегда рады вашим отзывам. http://github.com/deitch/aws-asg-roller