postgres_fdw не может подключиться к серверу в Amazon RDS

У меня есть два экземпляра Postgres 9.3.5 в RDS, оба в одной группе безопасности, которая разрешает весь входящий трафик из группы безопасности и весь исходящий трафик. Я пытаюсь настроить одну базу данных, чтобы иметь возможность выбирать из нескольких таблиц из другой через postgres_fdw.

Я создал сервер -

create server master 
foreign data wrapper postgres_fdw 
OPTIONS (dbname 'main', 
         host 'myinstance.xxxxx.amazonaws.com');

а также необходимое отображение пользователей и сторонняя таблица -

create foreign table condition_fdw (
    cond_id integer,
    cond_name text
) server master options(table_name 'condition', schema_name 'data');

Однако простой select count(*) from condition_fdw дает мне

ERROR:  could not connect to server "master"
DETAIL:  could not connect to server: Connection timed out
        Is the server running on host "myinstance.xxxxxx.amazonaws.com" (xx.xx.xx.xx) and accepting
        TCP/IP connections on port 5432?

Я могу подключиться к обеим базам данных через psql из экземпляра EC2. Я знаю, что до недавнего времени RDS не поддерживал postgres_fdw, но я использую более новые версии, которые поддерживают.

В операторе создания сервера я попытался заменить myinstance.xxxxxx.amazonaws.com на IP-адрес, который он разрешает, но безуспешно.

Любые идеи?

Дальнейшее тестирование

Я установил postgres на экземпляр ec2 с той же группой безопасности, сторонние таблицы для главного сервера ведут себя так, как ожидалось.

postgres_fdw между базами данных на одном экземпляре RDS работает.

Все это наводит меня на мысль, что это проблема с исходящими соединениями от postgres_fdw в моем экземпляре Postgres RDS.


person pail    schedule 26.02.2015    source источник
comment
У меня точная проблема. Я заметил, что если я открываю 5432 для всех, это работает. Я не хочу этого делать и хочу понять, что мне нужно, чтобы открыться с внешней точки зрения. forum.aws.amazon.com/thread.jspa?messageID=604858&# 604858   -  person Brad Ruderman    schedule 28.02.2015
comment
@BradRuderman Мне удалось выполнить запрос между базами данных в одном экземпляре RDS, используя host 'localhost' в параметрах команды создания сервера. Если вы используете host 'myinstance.xxxxxxx.amazonaws.com, у вас будет тайм-аут, как вы описали. Странно, что редактирование правил входящих подключений помогло, так как исходящие подключения из RDS запрещены независимо от правил группы безопасности.   -  person pail    schedule 28.02.2015
comment
@BradRuderman, я только что попробовал то же самое, и соединение fdw работает, только если я открываю 5432 для всех, что отстой .... и если я попытаюсь внести в белый список только определенный сервер, не работает? Вы нашли способ обойти это?   -  person Tomislav Mikulin    schedule 07.05.2019


Ответы (4)


Чтобы postgres_fdw работал между двумя экземплярами в AWS RDS (с VPC), мне пришлось:

  1. Включите custom_dns_resolution //docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.PostgreSQL.CommonDBATasks.html#Appendix.PostgreSQL.CommonDBATasks.CustomDNS
  2. Добавьте общедоступный IP-адрес запрашивающей базы данных во входящие правила группы безопасности ИЛИ добавьте внутренний IP-адрес экземпляра RDS в качестве узла сервера. https://forums.aws.amazon.com/thread.jspa?threadID=235154

Первый хорошо задокументирован, но я не мог заставить его работать, пока не наткнулся на второй.

person bheden    schedule 12.10.2020

Похоже, что Amazon не разрешает исходящие соединения из экземпляров RDS, поэтому до этого изменения с использованием postgres_fdw между экземплярами RDS невозможны. Мне нужно будет запустить экземпляр ec2 в качестве моего сервера postgres, чтобы использовать стороннюю таблицу для базы данных на другом сервере.

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html

person pail    schedule 27.02.2015
comment
В документации, которую вы связали, ничего не говорится о запрете исходящих подключений. - person Juraj Petrik; 14.07.2016
comment
Это вполне возможно (и мы этим пользуемся). Вы просто не должны использовать группы безопасности БД и использовать группы безопасности VPC. - person Viktor Yarmak; 18.07.2017
comment
Похоже, это уже не так: aws.amazon.com/about-aws/whats-new/2018/05/ - person krlmlr; 07.03.2019

У меня возникла аналогичная проблема, и я обнаружил, что postgres_fdw будет работать только в регионе RDS EU-WEST-1, когда главный и удаленный экземпляры находятся в одной и той же зоне доступности, и в 9.3.5, если вы пересекаете зоны доступности, он не будет подключаться. Моя группа безопасности была 5432 TCP только для входящих и всех исходящих.

person James King    schedule 17.03.2015
comment
это действительно сработало для вас? не два dbs на одном экземпляре или postgres на экземплярах EC2, а два отдельных экземпляра RDS? а вы прошли host XYZ.eu-west-1.rds.amazonaws.com или что-то похожее на CREATE SERVER? Я пробовал это только сейчас и не смог заставить его работать, даже в той же зоне доступности и открывая входящий 5432 до 0.0.0.0/0, я ожидаю из-за того, что упомянул @pail: amazon говорит, что они блокируют все исходящие сетевые подключения от экземпляров RDS. - person ryan; 10.10.2015

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

person Tisha    schedule 25.11.2016