Можно ли выполнить развертывание кода aws на месте с нулевым временем простоя?

Можно ли добиться развертывания с нулевым временем простоя при развертывании на месте? Я знаю, что в описании группы развертывания (для развертывания на месте) у нас есть это:

Обновляет экземпляры в группе развертывания последней версией приложения. Во время развертывания каждый экземпляр будет ненадолго переведен в автономный режим для обновления.

Мой вопрос: предположим, у меня есть как минимум два экземпляра, подключенных к балансировщику нагрузки. Можно ли выполнить развертывание на месте, используя эту последовательность:

  • экземпляр A отключен от LB (балансировщик нагрузки)
  • экземпляр A устанавливает последние обновления и перезагружается
  • экземпляр A обновлен до последней версии кода
  • LB отключается от экземпляра B, который все еще имеет старую версию кода, и указывает исключительно на экземпляр A.
  • экземпляр B устанавливает последнюю версию и перезагружается
  • экземпляр B обновлен до последней версии кода
  • LB также подключается к экземпляру B

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


person abbood    schedule 08.08.2018    source источник
comment
Уважаемый @abbood В настоящее время у меня есть несколько клиентов с непрерывным развертыванием с использованием облачного формирования, автоматического масштабирования с последовательными обновлениями и балансировщиком нагрузки приложений без каких-либо проблем. Если вы поделитесь более подробной информацией о вашей текущей среде, я могу что-нибудь придумать.   -  person Alessandro Oliveira    schedule 08.08.2018


Ответы (2)


Я думаю, что одним из вариантов было бы создать ревизию для каждого развертывания в отдельной папке и в конечном итоге связать ее с помощью символической ссылки, используя хук afterInstall после завершения развертывания.

eg.

 releases
    ├── release1
    └── release2

public_html -> (symlink) release2
person Sujan    schedule 13.12.2018

Да, вы можете сделать именно то, что вы описываете. Если вы настраиваете группу развертывания с параметром вариант развертывания WITH_TRAFFIC_CONTROL и настройте балансировщик нагрузки, CodeDeploy удалит ваши экземпляры из балансировщика нагрузки, прежде чем он запустит обычный набор скриптов-ловушек жизненного цикла.

Вы можете увидеть диаграмму здесь, демонстрирующий порядок выполнения хуков (обратите внимание, что BlockTraffic и AllowTraffic выполняют привязку и отвязку). Логика выбора хоста будет такой же — ваши минимальные настройки исправного хоста. Если вы установите развертывание по одному, CodeDeploy не будет выполнять развертывание в нескольких экземплярах одновременно.

person EmptyArsenal    schedule 20.11.2018