Назад | Перейти на главную страницу

Как развернуть веб-страницы на EC2, когда новые экземпляры создаются динамически?

У нас есть сайт, страницы которого нужно время от времени обновлять. В любой момент на сайте работает около 8 экземпляров EC2, но иногда он становится намного больше. Мы используем балансировщик нагрузки и автомасштабирование, чтобы создать больше экземпляров. Страницы - это просто файлы на диске; нет системы управления контентом. Веб-сервер - это Jetty.

Если я изменю страницу, как я могу развернуть ее на всех текущих и будущее экземпляры?

Очевидно, я не могу использовать такой инструмент управления, как Fabric, потому что он не будет обновлять AMI, из которых будут создаваться будущие экземпляры. Также было бы ошибкой создать новый AMI и развернуть его, потому что, во-первых, это громоздкий процесс, а во-вторых, он уничтожил бы все текущие пользовательские сеансы в существующих экземплярах.

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

Я думал разместить страницы на S3, но это не начало, потому что 1) S3 не имеет возможности уведомлять экземпляры об изменении страниц, 2) поэтому вам нужно опрашивать S3 постоянно, 3) что дорого, и 4) вы приходиться делать это для каждой страницы индивидуально.

Как это сделать проще всего? Какой лучший способ, если лучший! = Простой?

Вы делаете это, используя некоторые шаги после клонирования в автоматическом масштабировании. Точные методы зависят от вашего уровня комфорта, но подобное решение, вероятно, много для вас сделает:

  • Создайте свой веб-каталог в стиле git.
  • В AMI создайте cron-задачу для git-pull с репо-сервера по расписанию.
  • В AMI создайте git-pull как часть задач при загрузке.

Это метод пакетного режима. Существующие серверы не получают уведомления о новых файлах, но все они получат их примерно одновременно из-за времени выполнения cron. Новые серверы будут получать новые файлы при запуске.

Ключевым моментом здесь является отделение вашего контента от самого AMI.

На мой взгляд, есть несколько вариантов:

  1. Используйте S3; Я знаю, что вы указали, что это не стартер, но новые серверы должны откуда-то получать код. Предполагая, что ваше развертывание уже запрограммировано для развертывания на запущенных экземплярах, добавьте строку для отправки на S3. Это также может быть выполнено автоматически с помощью инструментов управления исходным кодом man.
  2. Создайте главный сервер, который все остальные серверы могут опрашивать на предмет кода по ssh.
  3. Извлечь из службы хостинга кода, такой как github