Что касается первоначальной проблемы, которую вы описываете, экспериментировали ли вы с льготным периодом проверки здоровья? Это должно предотвратить проблемы, которые вы описываете при неудачной проверке состояния, когда экземпляр попадает в целевую группу.
Альтернативный подход (который имеет множество собственных недостатков) заключается в адаптации шаблона CloudFormation для компенсации поведения, когда CodeDeploy заменяет ASG в сине-зеленом развертывании.
- В шаблоне ASG создайте параметр "да / нет" с именем
"ManageAutoScalingGroup". Создайте ASG условно по значению
этим параметром является "да". Установить политику удаления на ASG
сохранить, чтобы CloudFormation оставил группу на месте, когда
параметр изменен на "нет".
- Раскрутите группу со стандартным "да"
по этому параметру.
- Как только экземпляры исправны, и CodeDeploy завершил начальное развертывание на месте, вы можете изменить группу развертывания на Blue-Green, где CodeDeploy заменит вашу ASG.
- Обязательно обновите 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. Это решение, которое я рассматриваю, как только у меня будет время.