Как развернуть код на нескольких экземплярах Amazon EC2 Autocaling group? - PullRequest
0 голосов
/ 16 января 2019

Итак, мы запускаем интернет-магазин, основанный на magento. Мы рассчитываем развернуть его на экземпляре Amazon EC2, используя RDS в качестве службы базы данных и используя автоматическое масштабирование amazon и эластичный балансировщик нагрузки для масштабирования приложения при необходимости.

Что я не понимаю, так это: Я установил и настроил свою рабочую среду magento на экземпляре EC2 (база данных находится в RDS). Это очень хорошо работает. Но теперь, когда я хочу динамически масштабировать количество экземпляров

  • как я буду каждый раз развертывать код на динамически генерируемых экземплярах?
  • Будет копировать весь экземпляр, назначать ему новый ip и создавать его как новый экземпляр или мне придется написать код для автоматизации этого процесс
  • Кроме того, не будет ли непростой задачей извлекать код из git и развертывать каждый раз, когда создается новый экземпляр?

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

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Для начала проверьте AWS CloudFormation . Вы будете создавать шаблоны для проектирования работы инфраструктуры вашего приложения - инфраструктуры как кода. С этими шаблонами вы можете развернуть обновление своей инфраструктуры, отправив изменения в ваши шаблоны и / или код вашего приложения.

В моем текущем проекте у нас есть хранилище github, предназначенное для этих шаблонов инфраструктуры, и отдельное хранилище для кода нашего приложения. Создайте конвейер для создания ресурсов AWS, который будет развертывать обновленное в AWS каждый раз, когда вы отправляете в хранилище в определенной ветви.

  • Создание конвейера инфраструктуры
  • ваш первый этап конвейера запускает сборку всякий раз, когда в ваших шаблонах инфраструктуры происходят изменения кода. См. AWS CodePipeline , а также AWS CodeBuild . Это не единственные ресурсы AWS, которые вам понадобятся, но они, вероятно, являются основными, конечно, за исключением того, что делается в шаблоне облачной информации, как упоминалось ранее.

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

  • Проверьте, как работает containers, было бы лучше и значительно дополнит ваше обучение тому, как работает запуск новой версии приложения. Для начала посмотрите docker , но не стесняйтесь проверять любые ресурсы в вашем распоряжении
  • Продолжение моего текущего проекта: у нас есть отдельный конвейер, предназначенный для нашего приложения, но он также будет запущен после обновления нашего конвейера инфраструктуры. Наш конвейер приложений предназначен для создания новой версии нашего приложения через AWS Codebuild, это создаст image, который станет контейнером ~ из документации докера.
  • у нас есть два триггера или два источника, которые будут запускать развертывание обновлений в нашем конвейере приложений, один - когда происходят изменения в конвейере инфраструктуры, и он успешно собран, а второй - когда происходят изменения в нашем репозитории github, подключенном через AWS CodeBuild.
  • Проверьте AWS AutoScaling , в этих областях описывается динамический запуск новых экземпляров, выключение экземпляров при необходимости, замена нездоровых экземпляров при необходимости. См. Также AWS CloudWatch , с его помощью можно разработать критерии для запуска масштабирования вниз / вверх и / или входа / выхода.

Будет ли aws копировать весь экземпляр, назначать ему новый ip и порождать его как новый экземпляр, или мне придется написать некоторый код для автоматизации этого процесса?

  • См. AWS ElasticLoadBalancing , а также узнайте больше об AWS AutoScaling. В процессе автоматизации, если вы когда-нибудь будете использовать CloudFormation, экземпляры и / или контейнеры (в зависимости от вашего дизайна) будут управляться изящно.

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

  • Как уже упоминалось, ранее, имея конвейер для развертывания новых версий вашего приложения через CodeBuild, это создаст образ с новыми изменениями кода, и когда все будет готово, он будет развернут ~ становится контейнером. Старый экземпляр EC2 или старый контейнер (в зависимости от того, как вы хотите, чтобы ваше приложение было развернуто) будут корректно закрыты после запуска и запуска новой версии вашего приложения. Это даст вам нулевое время простоя.
0 голосов
/ 16 января 2019

Вы делаете это в конфигурации запуска AutoScalingGroup. В LaunchConfiguration в CloudFormation есть раздел UserData, в котором вы могли бы написать сценарий, который запускается, когда ASG масштабируется и развертывает новый экземпляр.

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html#cfn-as-launchconfig-userdata

Это то же самое, что и раздел UserData в экземпляре EC2. Вы можете использовать ловушки LifeCycle, которые скажут ASG не загружать экземпляр EC2 до тех пор, пока все, что вы хотите сконфигурировать, не настроит его.

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-lifecyclehook.html

Я связал все страницы CloudFormation, но вы можете использовать какой-то другой инструмент CI / CD для развертывания вашей инфраструктуры, но, надеюсь, это поможет вам начать работу.

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