Моя команда и я пытаемся найти лучший способ реализовать сине-зеленый для AWS ECS, но, похоже, мы не можем окончательно ответить на один вопрос о балансировщиках нагрузки приложений.
Пока что метод, который, кажется, больше всего соответствует нашим целям, - это развертывание синей службы и зеленой службы в отдельные целевые группы и обновление слушателя в нашем балансировщике нагрузки приложений. Однако у нас есть несколько более длительных транзакций, и согласно этой статье:
https://aws.amazon.com/blogs/compute/bluegreen-deployments-with-amazon-ecs/
Этот метод синих / зеленых соединений не обеспечивает изящного слива. Однако недавно я прочитал сообщение другого инженера AWS, которое противоречит этому и утверждает, что изменение прослушивателя влияет только на новые входящие соединения и, следовательно, истощает изящно.
Может ли кто-нибудь пролить свет на то, что на самом деле происходит, когда я изменяю слушателя для ELB?
Вам следует иметь ELB как часть вашего стека, т.е. один ELB для синий стек и один ELB для зеленый стек.
Таким образом, вы можете провести полный комплект приемочных испытаний нового ELB и однажды довольны заменить имя ELB в DNS. Это не повлияет на ваши длительные сеансы, поскольку они сохранят свои подключения к старому ELB, даже если DNS изменится.
Надеюсь, это поможет :)
Документация AWS по балансировщикам нагрузки приложений заявляет, что когда вы отменяете регистрацию цели, ее соединения разряжаются. Что вы можете сделать, так это отменить регистрацию целей в вашей целевой группе, чтобы изящно осушить соединения. Конечно, это не так идеально, как выбор между несколькими целевыми группами.
Помните, что у вас также не может быть нескольких слушателей в одном ELB с одним и тем же протоколом порта.
Как заявил другой пользователь в своем ответе, у вас должны быть отдельные ELB в вашем развертывании и просто переключаться между ними в Route53. Таким образом, вы можете легко использовать политики маршрутизации для отправки только части трафика в соответствующую ELB / целевую группу (скажем, 80% на синий, 20% на зеленый).