У меня 2 экземпляра EC2 - на одном производственное приложение, на другом Redis. Подключаюсь с первого к Redis.
Вот как я установил Sidekiq:
Sidekiq.configure_server do |config|
config.redis = { url: "redis://deployer_redis@PUBLIC_IP:6379/#{env_num}",
namespace: "rails_app_#{Rails.env}" }
end
Sidekiq.configure_client do |config|
config.redis = { url: "redis://deployer_redis@PUBLIC_IP:6379/#{env_num}",
namespace: "rails_app_#{Rails.env}" }
end
Когда я перезапускаю экземпляр Redis, PUBLIC_IP будет другим, и приложение Rails не сможет подключиться к Redis.
Я попытался использовать PRIVATE_IP вместо PUBLIC_IP (поскольку PRIVATE_IP пока не меняется), но это не сработало. Ошибок не было, просто задания не обрабатывались.
Какой рекомендуемый способ установить IP-адреса экземпляров EC2 в приложениях?
РЕДАКТИРОВАТЬ:
Кроме того, когда я подключаюсь к серверу по ssh, какой IP мне следует использовать?
Если вы используете ElastiCache с Redis, вам следует использовать DNS вашего кластера. Обычно это выглядит так redis.j5k8wa.0001.use1.cache.amazonaws.com
и вы можете получить его из конфигурации вашего узла. Amazon рекомендует создавать CNAME
запишите в свой DNS как псевдоним предоставленного ими имени.
Если вы запускаете Redis на своем собственном экземпляре, самый простой способ - использовать для него частный статический IP-адрес. Другой альтернативой является использование динамического DNS, но эта настройка хрупка из-за задержки распространения DNS.
Обновить: Третьим вариантом будет использование эластичного IP-адреса, но использование общедоступного IP-адреса для внутренней связи между вашим приложением и Redis не очень безопасно и расточительно.