Este tópico descreve como uma instância do RDS for PostgreSQL pode usar a extensão foreign data wrapper (FDW) para acessar um banco de dados externo pela internet.
Contexto
As instâncias do RDS for PostgreSQL são executadas em uma Virtual Private Cloud (VPC) e exigem um Internet NAT Gateway com um endereço IP elástico (EIP) associado para acessar serviços de banco de dados pela internet.
Essa configuração permite que sua instância do RDS for PostgreSQL acesse a internet e garante a segurança da rede. Com o SNAT, a instância pode acessar a internet, mas permanece inacessível a partir da internet por meio do NAT gateway.
Para obter mais informações sobre o Internet NAT Gateway e o SNAT, consulte Use the SNAT feature of an Internet NAT Gateway to access the internet.
Pré-requisitos
Um banco de dados de destino, como MySQL, SQL Server, PostgreSQL ou Redis, que seja acessível pela internet por meio de um endereço IP público.
-
Você tem uma instância do RDS for PostgreSQL. Para obter instruções, consulte Quickly create an RDS for PostgreSQL instance.
ImportantePara acessar um banco de dados de destino exposto à internet a partir de uma instância do RDS for PostgreSQL, é necessário usar uma extensão específica, conforme a lista a seguir. Verifique se a sua instância suporta a extensão necessária. Para saber quais extensões cada versão suporta, consulte Extensions supported by RDS for PostgreSQL.
MySQL: mysql_fdw
SQL Server: tds_fdw
PostgreSQL: postgres_fdw
Redis: redis_fdw
-
Você criou contas no banco de dados de destino exposto à internet e na instância do RDS for PostgreSQL.
Para criar uma conta no banco de dados de destino exposto à internet, consulte a documentação oficial do respectivo motor de banco de dados.
Para criar uma conta na sua instância do RDS for PostgreSQL, consulte Create an account.
O banco de dados de destino exposto à internet deve ter um banco de dados com dados.
Procedimento
Configurar um Internet NAT Gateway
-
Crie um Internet NAT Gateway.
Acesse o console do NAT Gateway.
Na página Internet NAT Gateway, clique em Create NAT Gateway.
(Opcional) Se for a primeira vez que você utiliza o NAT Gateway, na página Internet NAT Gateway, localize a seção Service-linked Role Creation e clique em Create Service-Linked Role. Após criar a função, você poderá criar o NAT gateway.
-
Na página Create Internet NAT Gateway, configure os seguintes parâmetros e clique em Buy Now.
NotaEsta tabela lista apenas os parâmetros principais. Para obter detalhes sobre todos os parâmetros, consulte Use the SNAT feature of an Internet NAT Gateway to access the internet.
Parâmetro
Descrição
Region
Selecione a região da sua instância do RDS for PostgreSQL.
Network and Zone
Selecione a VPC e o vSwitch utilizados pela sua instância do RDS for PostgreSQL.
Você encontra a VPC da instância do RDS for PostgreSQL de destino na página Database Connection no console do ApsaraDB RDS.
Database Connection
Selecione Network Type.
Internet NAT Gateway
Neste exemplo, selecione EIP.
-
Na página Configure Later, verifique as informações de configuração do Internet NAT Gateway e clique em Confirm Order.
Depois de criar o gateway, visualize a instância na página Activate Now. O status da instância é Pending Configuration e a especificação/tipo é Enhanced.
-
Associe um endereço IP elástico (EIP) ao Internet NAT Gateway.
No console do NAT Gateway, localize a nova instância do Internet NAT Gateway e clique no ID correspondente para abrir a página de detalhes.
Acesse a guia Internet NAT Gateway e clique em Associated EIP.
Na caixa de diálogo Associate EIP, selecione Associate EIP.
-
Clique em Purchase and Associate EIP.
Após associar o EIP, você poderá visualizá-lo na guia OK. O status é Allocated e o Entry Association Status é Unused. Isso indica que o EIP ainda não está associado a uma entrada DNAT ou SNAT.
-
Crie uma entrada SNAT.
No console do NAT Gateway, localize a nova instância do Internet NAT Gateway e clique no ID correspondente para acessar a página de detalhes.
Acesse a guia Associated EIP e clique em SNAT.
-
Na página Create SNAT Entry, configure os seguintes parâmetros e clique em Create SNAT Entry.
Parâmetro
Descrição
OK
Selecione a granularidade para a entrada SNAT. Este exemplo utiliza SNAT Entry. Essa configuração permite que a instância do RDS for PostgreSQL no vSwitch especificado acesse a internet por meio do endereço IP público.
Select vSwitch
Selecione o vSwitch da sua instância do RDS for PostgreSQL.
Select vSwitch
Selecione o endereço IP público para acesso à internet. Este exemplo utiliza um único endereço IP. Selecione o EIP associado na lista suspensa.
Depois de criar a entrada, você poderá visualizá-la na Select EIP. Na guia SNAT Management, o status da nova entrada SNAT é Available.
Configurar o banco de dados de destino exposto à internet
Adicione o EIP do Internet NAT Gateway à lista de permissões do banco de dados de destino.
MySQL: Consulte Privileges Provided by MySQL
PostgreSQL: Consulte The pg_hba.conf File
SQL Server: Consulte Configure the Windows Firewall to Allow SQL Server Access
-
Redis: Use um firewall para restringir o acesso à porta especificada por endereço IP. Por exemplo, caso utilize o iptables no CentOS, execute o seguinte comando:
iptables -A INPUT -s <EIP_of_your_NAT_gateway> -p tcp --dport <Redis_port> -j ACCEPT
Configurar a instância do RDS for PostgreSQL
Conecte-se à instância do RDS for PostgreSQL. Para obter instruções, consulte Connect to a PostgreSQL instance.
-
Crie a extensão.
NotaEste exemplo utiliza um banco de dados MySQL exposto à internet como destino e cria a extensão mysql_fdw.
CREATE EXTENSION mysql_fdw; -
Crie uma definição de servidor para o banco de dados de destino exposto à internet.
CREATE SERVER <server_name> FOREIGN DATA WRAPPER mysql_fdw OPTIONS ( host '<public_IP_of_target_database>', port '<port_of_target_database>' );Veja a seguir um exemplo para um serviço MySQL exposto à internet:
CREATE SERVER mysql_server80 FOREIGN DATA WRAPPER mysql_fdw OPTIONS ( host 'XX.XX.XX.XX', port '3306' ); -
Crie um mapeamento de usuário. Esse mapeamento permite que o usuário especificado do RDS for PostgreSQL acesse os dados do banco de dados de destino.
CREATE USER MAPPING FOR <RDS_for_PostgreSQL_username> SERVER <created_server_name> OPTIONS ( username '<username_for_target_database>', password '<password_for_target_database>' );Exemplo:
CREATE USER MAPPING FOR pg_client SERVER mysql_server80 OPTIONS ( username 'testuser', password 'U123456!' ); -
Crie uma tabela externa.
CREATE FOREIGN TABLE <foreign_table_name> ( id int, name varchar(10) ) SERVER <created_server_name> OPTIONS ( dbname '<database_name_on_target_database>', table_name '<table_name_on_target_database>' );Exemplo:
CREATE FOREIGN TABLE mysql_fdw_test ( id int, name varchar(10) ) SERVER mysql_server80 OPTIONS ( dbname 'testdb', table_name 'test' ); -
Teste a conexão.
Depois de concluir estas etapas, você poderá acessar as tabelas no banco de dados exposto à internet a partir da sua instância do RDS for PostgreSQL.
Por exemplo, se criar uma tabela externa chamada
mysql_fdw_test, poderá consultá-la na sua instância do RDS for PostgreSQL para recuperar dados do banco de dados de destino exposto à internet.SELECT * FROM mysql_fdw_test;