Как обновлять все экземпляры в группе автоматического масштабирования AWS после развертывания нового кода? - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь построить более динамичную / масштабируемую систему в AWS .Я запустил 2 экземпляра в группе автоматического масштабирования , где минимальное количество экземпляров равно 2 и максимальное 5 с балансировкой нагрузки перед ними.У меня включена «Защита от прерывания» в первых двух экземплярах, поскольку они будут теми, которые я использую для развертывания моего Rails-приложения через Capistrano .

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

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

1- AWS CodeDeploy: выглядит довольно круто, используя Синий / ЗеленыйРазвертывание выглядит так, как если бы оно работало довольно стабильно с нулевым временем простоя.Я не знаю, есть ли для этого эмпирическое правило, но, по моему мнению, время развертывания немного длиннее , я не уверен , будет ли оно применимо, когдаМне нужно выпустить исправление .

2- через скрипт: Я также не уверен, как реализовать это с помощью AWS, но идея заключается в том, когда новый код загружается вмои 2 "главных (?)" экземпляра,

  1. Я создам a новую конфигурацию запуска , используя новый AMI
  2. Обновите группу автоматического масштабирования , чтобы использовать эту новую конфигурацию запуска
  3. Уменьшите мою группу автоматического масштабирования до , завершите экземпляры , которые работает со старой конфигурацией
  4. Надеемся, что политики автоматического масштабирования создадут новые экземпляры с использованием новой конфигурации запуска

проблема с этим подходом состоит в том, что требует ручной операции , на которую я не хочу полагатьсяh.

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

Так что это решения, которые я видел до сих пор, какое из них было бы лучшим решением?

Ура!

1 Ответ

0 голосов
/ 23 сентября 2018

В итоге я использовал расширение gem (мое приложение написано в ruby ​​on rails) для развертывания.Я уже использовал Capistrano для развертывания, затем я обнаружил гем elbas, который внутренне выполняет следующее:

  • Развертывание вашего кода на каждом работающем экземпляре, подключенном кзаданная группа AutoScale
  • После развертывания создайте AMI из одного из работающих экземпляров
  • Присоедините AMI с новым кодом к новой конфигурации запуска AWS
  • Обновите группу AutoScaleиспользовать новую конфигурацию запуска
  • Удалить все старые AMI, созданные ELBAS
  • Удалить все старые конфигурации запуска, созданные ELBAS

Это в основном 2-й вариант (черезСценарий) и поиск драгоценного камня, который делает это для меня, снимает проблему ручной обработки вещей.

Надеюсь, это поможет, ура!

...