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

21

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

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

платформы
источник
2
Вероятно, более эффективно, если после создания новой конфигурации запуска и обновления группы автоматического масштабирования вы помечаете каждый экземпляр как нездоровый (например, с использованием as-set-instance-health), так что автоматическое масштабирование просто заменяет его новым экземпляром.
cyberx86

Ответы:

10

Я хотел бы предложить "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 .

Колин Джонсон
источник
9

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

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

Сергей Кузнецов
источник
Ура, это очень удобный, простой способ.
Elad Nava
1
Это не всегда будет работать, согласно документам AWS, даже при выборе настраиваемой политики завершения ASG будет поддерживать баланс AZ до применения политики завершения. Таким образом, только удвоение и уменьшение размера вдвое может оставить вас в паре старых случаев. Это особенно вероятно при использовании ASG с несколькими типами экземпляров и опциями покупки, поскольку ASG сохранит сбалансированный AZ и рыночный вариант (спот по требованию) до применения политики «Самый старый экземпляр»: docs.aws.amazon.com / autoscaling / ec2 / userguide /…
Shahad
6

способ управления этим сценарием заключается в использовании функции 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

Graeme
источник
Спасибо большое @graeme. Я понятия не имел, Cloudformation предложила эту функциональность.
AJB
Именно то, что я искал. Мы развертываем наши стеки через Jenkins, поскольку изменения через консоль AWS заблокированы.
Грег Байлс
3

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

платформы
источник
Вы имеете в виду "Netflix Asgard"
4
Netflix Asgard теперь устарела, его заменили на Netflix Spinnaker
dlaidlaw
0

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

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

bwight
источник
0

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

Дейч
источник