Сценарий:
В настоящее время у нас есть один производственный сервер, работающий на экземпляре EC2. Поскольку мы получаем много трафика, мы хотели бы использовать функцию автомасштабирования, но мы в этом новичок.
Ниже я понимаю:
- Мы создаем собственный AMI из существующего производственного сервера.
- Создайте конфигурацию запуска из этого AMI
- Создайте группу AutoScaling с этой конфигурацией запуска
- Задайте условия, если загрузка ЦП больше 60%, добавьте экземпляр, если меньше 40%, завершите 1 экземпляр.
- Добавить балансировщик нагрузки в эту группу автомасштабирования
- Теперь, насколько я понял, чтобы развернуть новый код в группе автоматического масштабирования, мы должны создать новый AMI с нашей обновленной версией приложения и изменить AMI, используемый в группе автоматического масштабирования, на этот новый. Затем завершите все предыдущие экземпляры и создайте новые из обновленного AMI.
Вопросы:
1. Чтобы создать обновленный AMI, нужно ли мне сохранить предыдущий экземпляр EC2, не входящий в группу автоматического масштабирования?
Развернуть там новый код и создать AMI из этого экземпляра?
2. Или вместо того, чтобы создавать новые AMI, мы могли бы просто подключиться к каждому серверу по ssh и получить оттуда новый код? но новый экземпляр, который появится, будет использовать предыдущий код.
3. Кроме того, после добавления нового AMI, как правильно завершить все предыдущие экземпляры?
4. Наконец, как это правильно автоматизировать?
Никогда полагаться на ssh'ing для вновь созданных экземпляров - они могут приходить и уходить в любое время.
Вы можете автоматизировать настройку экземпляра с помощью Запустить данные пользователя конфигурации где вы можете запустить любой сценарий bash, который вам нравится. Этот сценарий может установить и настроить ваш веб-сервер и получить любой код. Однако, если позже вы обновите код, вам придется использовать SSH для каждого экземпляра для развертывания новой версии. Так что это не оптимальная стратегия.
Лучший использовать такой инструмент, как AWS CodeDeploy чем могу сделать все за тебя. При развертывании кода процесс работает следующим образом:
Создайте свой AMI с предварительно настроенным веб-сервером (или используйте вышеупомянутый Данные пользователя настроить его при запуске). Обратите внимание, что на данный момент у вас есть только веб-сервер, а не фактический код веб-сайта.
Запустить агент CodeDeploy автоматически в конце скрипта UserData.
Агент подключится к серверу CodeDeploy и вытащить последние файлы веб-сайта (PHP, Java, ...).
Если вы разовьете новая версия веб-сайта (например, новый файл WAR Java), вы дадите команду CodeDeploy отправить его на все активные в данный момент узлы.
Таким образом хосты, которые присоединяются к Auto Scaling Group, автоматически получают последний код веб-сайта, и вам не придется постоянно перестраивать свои AMI.
Надеюсь, это поможет :)