Я создал базовый тестовый экземпляр PostgreSQL RDS в VPC, который имеет единственную общедоступную подсеть и должен быть доступен для подключения через общедоступный Интернет. Он использует группу безопасности по умолчанию, которая открыта для порта 5432. Когда я пытаюсь подключиться, это не удается. Должно быть, мне не хватает чего-то очень простого, но я в этом сильно заблудился.
Вот настройки базы данных, обратите внимание, что он помечен как Publicly Accessible
:
Вот настройки группы безопасности, обратите внимание, что они широко открыты (подтверждены в настройках RDS выше зеленой подсказкой «авторизованный» рядом с конечной точкой):
Вот команда, которую я пытаюсь использовать для подключения:
psql --host=myinstance.xxxxxxxxxx.us-east-1.rds.amazonaws.com \
--port=5432
--username=masteruser
--password
--dbname=testdb
И вот результат, который я получаю при попытке подключиться с Yosemite MacBook Pro (обратите внимание, он разрешает IP-адрес 54. *):
psql: could not connect to server: Operation timed out
Is the server running on host "myinstance.xxxxxxxxxx.us-east-1.rds.amazonaws.com" (54.xxx.xxx.xxx) and accepting
TCP/IP connections on port 5432?
У меня не включен какой-либо брандмауэр, и я могу подключаться к публичным экземплярам PostgreSQL у других поставщиков (например, Heroku).
Мы будем очень благодарны за любые советы по устранению неполадок, так как я здесь в значительной степени не понимаю.
Обновить
Согласно комментарию, вот правила ACL для входящего трафика для VPC по умолчанию:
Проблема заключалась в том, что правило для входящего трафика в группе безопасности указывало группу безопасности в качестве источника. Изменение его на CIDR, включающее мой IP-адрес, устранило проблему.
Откройте группу безопасности базы данных в AWS; и выберите «Редактировать правила для входящих подключений»; «Добавить правило». В выпадающем меню есть опция «Мой IP»; выберите этот параметр, чтобы автоматически подставить общедоступный IP-адрес вашего компьютера в нотации CIDR
Столкнулся с аналогичной проблемой, и вот как я ее решил:
Щелкните группу безопасности для экземпляра RDS и проверьте правила для входящих подключений. Вы можете увидеть что-то вроде этого:
Необходимо установить диапазон IP-адресов, содержащий ваш IP-адрес, или просто выбрать «Anywhere» в раскрывающемся списке Source, чтобы сделать его доступным с localhost или где угодно:
У меня была аналогичная проблема при подключении к postgres. Событие, хотя у меня был публичный доступ, правда, я не смог подключиться.
Я добавил одно правило входящего правила в группу безопасности, и теперь оно работает отлично.
Просто хотел добавить свои выводы, чтобы сэкономить кому-то время. Это решение, описанное выше, работало на экземпляре dev ec2, но после перехода на новый сервер оно перестало работать. Оказалось, что и мой экземпляр RDS, и экземпляр EC2 находились в одном VPC, поэтому экземпляр RDS не мог видеть общедоступный IP-адрес, который я добавил в его группу безопасности. Чтобы это работало, вам нужно добавить в группу безопасности экземпляров RDS частный IP-адрес экземпляра EC2, который вы можете найти в деталях.
После того, как я создал свой экземпляр Postgres, в моей группе безопасности по умолчанию (rds-launch-wizard) был указан только мой IP-адрес, поэтому мне пришлось добавить Тип всего трафика и Источник из любого места, прежде чем я смог подключиться. Я не специалист по сетям, но странно, что я не мог подключиться со своим собственным IP-адресом в качестве правила для входящих.