Я просто устанавливаю наше приложение Rails на Amazon AWS. У нас есть 2 экземпляра EC2, один для приложения Rails, второй для Redis. А затем Amazon RDS для MySQL.
Когда я подключаю наше приложение Rails к Redis, мне нужно установить URL-адрес Redis, который содержит IP-адрес. Однако, если я перезапущу экземпляр Redis, его IP-адрес изменится, и URL-адрес Redis URL, который я ввел в приложение Rails для Redis, не будет работать (поскольку после перезапуска экземпляра Redis был сгенерирован новый IP-адрес).
Как справиться с таким поведением? Как избежать "потери" инстанса EC2 при его перезапуске? То же самое, вероятно, относится к Amazon RDS - так я настроил хост в database.yml
:
host: myapp-production.cg4mxcg62ca0.us-west-2.rds.amazonaws.com
Заранее спасибо.
Выпуск 1:
Эластичные IP-адреса не должны использоваться для сохранения адреса «внутреннего» сервера. На то есть 2 причины:
Вместо этого вы должны ссылаться на свой внутренний сервер по его частному IP-адресу. Остановка и перезапуск экземпляра EC2 не приведет к изменению частного IP-адреса. Только после завершения работы экземпляра EC2 внутренний IP-адрес будет освобожден. И когда вы запускаете экземпляр EC2, вы можете при желании выбрать его частный IP-адрес.
Вы можете создать DNS-запись (частные размещенные зоны Route 53) для своего внутреннего сервера.
Еще одна вещь, которую вы можете сделать, но это не обязательно, - это создать сетевой интерфейс с вашим частным IP-адресом. Затем подключите этот сетевой интерфейс к экземпляру EC2. Если вам нужен новый внутренний сервер, просто переместите сетевой интерфейс на новый экземпляр, и частный IP-адрес переместится вместе с ним.
Выпуск 2:
Конечные точки экземпляра RDS не меняются со временем.
Кроме того, экземпляры RDS не могут быть остановлены. Их можно только удалить. Но даже если вы удалите экземпляр RDS и создадите его заново, если у него будет тот же идентификатор экземпляра RDS, его конечная точка останется согласованной.
Так что безопасно и лучше всего ссылаться на экземпляр RDS по имени хоста. myapp-production.cg4mxcg62ca0.us-west-2.rds.amazonaws.com
.
Последние мысли:
Поместите свой сервер Redis и экземпляр RDS в частный подсети в вашем VPC. Нет причин, по которым публике нужен доступ к ним. Ваш экземпляр приложения Rails должен находиться в публичной подсети, потому что публика будет получать доступ к вашему приложению через этот экземпляр.