Сине-зеленые развертывания с группами автоматического масштабирования, CloudFormation и CodeDeploy - PullRequest
0 голосов
/ 09 ноября 2018

Я попытался настроить развертывание Blue / Green путем копирования AutoScalingGroup, однако при этом стек CloudFormation отсоединяется от своих исходных ресурсов, так как CodeDeploy создает новую копию и удаляет оригинал.Из другого поста (https://forums.aws.amazon.com/thread.jspa?messageID=861085) я понимаю, что AWS разрабатывает улучшения для этого, однако сейчас я пробую следующий обходной путь. Любые идеи будут действительно полезны.

CloudFormation создает следующее:

  • Эластичный балансировщик нагрузки
  • Целевая группа
  • AutoScalingGroup One (с LaunchConfiguration)
  • AutoScalingGroup Two (аналогично одному, но не имеет экземпляров)
  • DeploymentGroup (с In-Place DeploymentStyle), который развертывает ревизию в AutoScalingGroup One

После завершения CloudFormation в консоли вручную выполняю следующие действия:

  1. Iобновите созданную группу развертывания так, чтобы она имела синий / зеленый стиль развертывания, и установите для ее исходной среды значение AutoScalingGroup One.
  2. Я добавляю экземпляр в AutoScalingGroup Two
  3. Я создаю развертывание в CodeDeploy. Однако, это не работает, так как когда новый экземпляр присоединяется к AutoScalingGroup Two, он добавляется в цельtGroup немедленно и не проходит проверки здоровья.

Есть какие-нибудь идеи о том, как реализовать набор ресурсов с CloudFormation, который сделает развертывание сине-зеленых простым, то есть один щелчок в ресурсах CodeDeploy и CloudFormation, все еще оставаясь неизменным?

1 Ответ

0 голосов
/ 18 декабря 2018

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

Альтернативный подход (который имеет множество собственных недостатков) заключается в адаптации шаблона CloudFormation для компенсации поведения, когда CodeDeploy заменяет ASG в сине-зеленом развертывании.

  1. В шаблоне ASG создайте параметр "да / нет" с именем "ManageAutoScalingGroup". Создайте ASG условно по значению этим параметром является "да". Установить политику удаления на ASG сохранить, чтобы CloudFormation оставил группу на месте, когда параметр изменен на "нет".
  2. Раскрутите группу со стандартным "да" по этому параметру.
  3. Как только экземпляры исправны, и CodeDeploy завершил начальное развертывание на месте, вы можете изменить группу развертывания на Blue-Green, где CodeDeploy заменит вашу ASG.
  4. Обязательно обновите ASG и измените ManageAutoScalingGroup на «нет». CloudFormation удалит ссылку из вашего стека, но оставит ресурс на месте.

Это даст вам возможность развертывания в один клик через CodeDeploy, которое вам нужно, но имейте в виду, что оно сопряжено с некоторыми расходами:

  • CodeDeploy не будет копировать параметр TargetGroup вашей группы автоматического масштабирования (как описано другими в https://forums.aws.amazon.com/thread.jspa?threadID=249406&tstart=0).. Вы сможете обойти это с умным использованием правил событий CloudWatch и SSM Automation для маркировки экземпляра. нездоровый, когда ALB меняет свой статус.
  • Копии, производимые CodeDeploy, кажутся довольно ненадежными. По крайней мере, однажды я видел, как моя версия LaunchTemplate была сброшена до неверного значения. Я также столкнулся со сценариями, в которых группа развертывания потеряла информацию о том, какую ASG она должна была отслеживать.
  • Продолжать применять изменения из вашего шаблона в ASG - это хлопотно. Процесс «обновления» группы: 1) Отменить параметр, описанный ранее, чтобы CloudFormation сгенерировал новую группу. 2) Измените группу развертывания, чтобы она была нацелена на эту группу, и выполните развертывание на месте. 3) Измените группу развертывания, чтобы восстановить сине-зеленые развертывания и соответственно обновить свой стек.

Я не слишком впечатлен CodeDeploy в этом отделе. Мне бы хотелось, чтобы они работали так же, как и ASG, которая должна заменить себя при применении новой версии LaunchTemplate. Если вы чувствуете себя немного амбициозно, вы можете имитировать это поведение, используя пошаговые функции с хуками жизненного цикла экземпляра ASG. Это решение, которое я рассматриваю, как только у меня будет время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...