Наличие доступа к конкретному веб-сайту на конкретном экземпляре EC2 под ELB

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

Под доступом я подразумеваю регулярный доступ к веб-сайту через веб-браузер (например, www.domain.com/some-post/).

Я хочу, чтобы мой сайт продолжал работать. В настоящее время у меня есть один сервер EC2, который находится под www.domain.com. Если я добавлю еще один сервер через Elastic Load Balancer, у меня не будет контроля над тем, какой сервер мне отправляет балансировщик нагрузки.

У меня есть сайт Wordpress, на котором я хочу обновить его тему, плагины и основные файлы, поэтому я хочу, чтобы только я имел доступ к этому серверу и протестировал его. Я мог бы открыть сервер и протестировать его на общедоступном IP-адресе, я сделал это, и он не работает должным образом, поэтому мне нужно запустить его под исходным адресом, чтобы убедиться, что если он работает нормально, он будет работать ОК живи.

Единственный способ, которым я думал об этом, - это создать образ сервера, создать экземпляр EC2, использовать другое доменное имя, ограничить доступ к серверу моим IP-адресом, изменить в БД на новое доменное имя, чем после того, как все заработает, измените домен обратно на исходный и сделайте эластичный IP-адрес указывающим на новый сервер.


person Idan Shechter    schedule 24.02.2016    source источник


Ответы (3)


Нет, вы не можете добиться такого поведения с помощью ELB. Это полностью нарушит цель ELB - цель которой - равномерно распределять трафик между экземплярами, связанными с ним.

Судя по всему, вы ищете этап тестирования, который можно использовать для проверки новых обновлений и т. Д., Не повреждая работающий сайт.

Вы всегда можете настроить DNS-имя для своего домена на этапе тестирования - например, «alpha.mysite.com».

Довольно распространена практика использования переменных среды для подобных случаев. У вас может быть установлена ​​переменная среды на машинах, которые на prod могут быть, например, stage = prod, а на стадии тестирования - stage = test. Затем в своем коде вы можете получить эту переменную среды и сделать что-то другое в зависимости от того, на каком этапе выполняется код. Например, используйте базу данных prod / development.

Возможно, стоит начать использовать Code Deploy для продвижения вашего код. Таким образом, у вас могут быть обработчики развертывания для настройки вашей среды на каждом экземпляре - установка зависимостей, загрузка кода, запуск приложения и т. Д. А затем, используя переменные среды, уже существующие в экземплярах, на которые развертывается, ваш код будет делать правильные вещи.

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

Фактически, некоторые люди даже идут на использование разных учетных записей AWS для управления тестовыми средами.

Возможно, вам будет интересен Code Pipeline, который поможет вам в этом.

person mickzer    schedule 24.02.2016

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

Я могу придумать несколько способов добиться этого. Вот два практических варианта:
1. Удалите экземпляр из балансировщика нагрузки с помощью консоли AWS или интерфейса командной строки. Никакие запросы к ELB не будут поступать в этот экземпляр. Получите доступ к экземпляру, который хотите обновить, прямо по его собственному адресу. Для этого группа безопасности на экземпляре должна быть настроена на разрешение HTTP-подключений извне. Например, вы можете разрешить доступ только с вашего собственного IP-адреса и балансировщика нагрузки.
2. Создайте еще один ELB для тестовых целей. Убедитесь, что обновляемый экземпляр отвечает только на тестовый ELB, а не на рабочий ELB. Это можно сделать двумя способами: либо удалить его из производственного ELB вручную, либо отключить проверку работоспособности ELB на экземпляре. (в последнем случае вам потребуются разные проверки работоспособности для тестового и производственного elb).

Мой совет: когда речь идет о расходах, выбирайте первый вариант. Если дополнительные затраты на дополнительный ELB не являются проблемой, перейдите к варианту 2, вручную удалите экземпляр из производственного ELB во время обновления и повторно подключите его, когда это будет сделано и протестировано.

Обновление (я понял, что не ответил на ваш вопрос полностью): чтобы это работало без изменения домена в вашей базе данных, вам нужно будет указать машину, которую вы тестируете, на правильный хост. Два варианта:
1. Выбирая прямое http-соединение с экземпляром, убедитесь, что у экземпляра есть внешний IP-адрес. Поместите домен в свой файл hosts и укажите его на IP-адрес.
2. Если вы собираетесь провести дополнительный тест elb, либо укажите домен в вашем файле hosts на один из IP-адресов ELB, либо запустите локальный DNS-сервер, у которого есть запись для домена с CNAME для имени хоста ELB.

person Bert Jan Schrijver    schedule 27.02.2016
comment
Проблема в том, что я хочу протестировать его в том же домене. Это из-за плагина кеширования, способа настройки сайта в базе данных, правил .htaccess. Есть так много вещей, которые нужно изменить, и я хочу знать наверняка, что, если я обновлюсь, и он будет работать, он обязательно будет работать вживую. - person Idan Shechter; 27.02.2016
comment
Да, я только что понял это и сейчас редактирую свой ответ, держитесь крепко ;-) - person Bert Jan Schrijver; 27.02.2016

Хотя проверка правильности обновления одного производственного узла является допустимым вариантом использования, в этом случае вам, вероятно, лучше создать отдельную тестовую среду в другом домене.
Таким образом, вы можете тестировать все изменения / обновления изолированно .
Для достижения наилучших результатов вам необходимо периодически переносить базу данных из производственной среды в тестовую. Вы можете написать скрипт базы данных, который автоматически изменяет домен в базе данных, чтобы вы могли (частично или полностью) автоматизировать процесс восстановления базы данных для тестирования.

person Bert Jan Schrijver    schedule 27.02.2016
comment
Кажется, что теперь есть способ сделать это таким образом, о чем я думал в первую очередь, хотя я разместил вопрос, может быть, кто-то придумает творческий способ решения этой проблемы. - person Idan Shechter; 27.02.2016