у меня есть VPC
с общедоступными и частными подсетями.
Nating
и Bastion
экземплярыec2
экземпляры, запускающие tomcat7 с моим файлом войны проекта). Эти 3 экземпляра лежат в основе ELB
Каждый раз, когда я хочу обновить файл войны, я могу сделать это двумя способами.
Руководство
Bastion
сервер (только это может быть SSHed)Я повторяю вышеуказанные шаги для каждого экземпляра (в настоящее время 3 экземпляра)
Полу руководство Вот шаги
Первый способ быстрый, но требует большого количества ручных действий. SSH-вход и выход из экземпляров (SSH в экземплярах разрешен только с сервера BASTION). скачать, остановить, заменить, запустить.
Второй метод медленный и не автоматический. Старое время завершения инстанса + Время запуска нового инстанса + Развертывание новой войны
Я хочу добиться следующих целей
Кто-то может подумать, почему бы мне не использовать Beanstalk, его простой и просто загрузить новый файл войны, автоматически обновить все экземпляры с функцией отката, если что-то пойдет не так?
Вот мои причины (некоторые вещи могут быть просто моим предположением или отсутствием знаний).
mode_jk
), а затем этот Apache находится за ELB. И я думаю, что ELB-> Apache-mode_jk-> tomcat немного излишне (я ошибаюсь).Теперь вы знаете предысторию. Давайте придерживаться простой версии примера, который я объяснил вверху.
Я хочу, чтобы обновление было быстрым и автоматическим, а также чтобы не использовать сторонние инструменты для обмена моими учетными данными с этими инструментами (я слышал о некоторых облачных инструментах, которые могут обеспечить вам прозрачность и выполнить все задачи в выбранной вами облачной среде) .
Единственное, о чем я могу думать, - это написать ANT-скрипт или какой-то Java-код, который может выполнять все шаги, описанные в первом методе. хотя не уверен, что им разрешат выполнять эти операции с aws.
Используйте CodeDeploy, у вас уже есть война в ведре S3, поэтому единственное, что вам нужно, это aws cli https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html команда.
Чтобы это работало, вам понадобится агент CodeDeploy на экземпляре - вы можете следовать этому https://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent-operations-install-linux.html
Агенту CodeDeploy требуется один простой файл конфигурации и по крайней мере один сценарий конфигурации (cp .war файл для Tomcat + перезагрузка службы).
CodeDeploy может обновлять экземпляры на основе тега или в группе автомасштабирования. Я также предлагаю поместить ваши экземпляры в группу автомасштабирования, но это можно сделать в качестве второго шага.
Можно удалить экземпляр из ELB (ожидания) перед обновлением и вернуть его после обновления, чтобы у вас было нулевое время простоя. Вместе с проверками работоспособности вы можете получить полностью автоматизированное решение.
С CodeDeploy вы можете иметь функции, аналогичные Beanstalk, но при этом сохраняя гибкость прямого доступа к экземпляру и использования собственных шаблонов. Экземпляры также не обязательно должны быть доступны из Интернета.
Та же проблема, потратив около двух дней, я понял, что есть плагин под названием Publish artifacts over SSH для jenkins (если у вас есть CI) и внес некоторые изменения в конфигурацию, чтобы позволить NAT разговаривать с сервером jenkins, по крайней мере, это помогло меня.
У меня такая же настройка, как у серверов в частной подсети и NAT в публичной подсети, откуда я использую ssh для развертывания войны на частных машинах.
Надеюсь это поможет!