Cette rubrique explique comment utiliser l'extension Foreign Data Wrapper (FDW) sur une instance RDS for PostgreSQL pour accéder à une base de données externe via Internet.
Contexte
Les instances RDS for PostgreSQL s'exécutent dans un Virtual Private Cloud (VPC). Elles nécessitent une passerelle NAT Internet associée à une adresse IP élastique (EIP) pour accéder aux services de base de données via Internet.
Cette configuration permet à votre instance RDS for PostgreSQL d'accéder à Internet tout en garantissant la sécurité du réseau. Grâce au SNAT, l'instance peut initier des connexions vers Internet, mais reste inaccessible depuis l'extérieur via la passerelle NAT.
Pour plus d'informations sur la passerelle NAT Internet et le SNAT, consultez la section Utiliser la fonctionnalité SNAT d'une passerelle NAT Internet pour accéder à Internet.
Prérequis
Une base de données cible (MySQL, SQL Server, PostgreSQL ou Redis) accessible via Internet par une adresse IP publique.
-
Vous disposez d'une instance RDS for PostgreSQL. Pour obtenir des instructions, consultez la section Créer rapidement une instance RDS for PostgreSQL.
ImportantPour accéder à une base de données cible exposée sur Internet depuis une instance RDS for PostgreSQL, vous devez utiliser une extension spécifique, comme indiqué ci-dessous. Assurez-vous que votre instance prend en charge l'extension requise. Pour connaître les extensions prises en charge par chaque version, consultez la section Extensions prises en charge par RDS for PostgreSQL.
MySQL : mysql_fdw
SQL Server : tds_fdw
PostgreSQL : postgres_fdw
Redis : redis_fdw
-
Vous avez créé des comptes sur la base de données cible exposée sur Internet et sur l'instance RDS for PostgreSQL.
Pour créer un compte sur la base de données cible exposée sur Internet, consultez la documentation officielle du moteur de base de données correspondant.
Pour créer un compte sur votre instance RDS for PostgreSQL, consultez la section Créer un compte.
La base de données cible exposée sur Internet contient des données.
Procédure
Configurer une passerelle NAT Internet
-
Créez une passerelle NAT Internet.
Connectez-vous à la console NAT Gateway.
Sur la page Internet NAT Gateway, cliquez sur Create NAT Gateway.
(Facultatif) Si vous utilisez NAT Gateway pour la première fois, localisez la section Service-linked Role Creation sur la page Internet NAT Gateway et cliquez sur Create Service-Linked Role. Une fois le rôle créé, vous pouvez créer la passerelle NAT.
-
Sur la page Create Internet NAT Gateway, configurez les paramètres suivants et cliquez sur Buy Now.
RemarqueCe tableau répertorie uniquement les paramètres clés. Pour obtenir des informations détaillées sur tous les paramètres, consultez la section Utiliser la fonctionnalité SNAT d'une passerelle NAT Internet pour accéder à Internet.
Parameter
Description
Region
Sélectionnez la région de votre instance RDS for PostgreSQL.
Network and Zone
Sélectionnez le VPC et le vSwitch utilisés par votre instance RDS for PostgreSQL.
Vous trouverez le VPC de l'instance RDS for PostgreSQL cible sur la page Database Connection de la console ApsaraDB RDS.
Network Type
Sélectionnez Internet NAT Gateway.
EIP
Dans cet exemple, sélectionnez Configure Later.
-
Sur la page Confirm Order, vérifiez les informations de configuration de la passerelle NAT Internet et cliquez sur Activate Now.
Une fois la passerelle créée, vous pouvez afficher l'instance sur la page Internet NAT Gateway. Le statut de l'instance est Pending Configuration et la spécification/type est Enhanced.
-
Associez une adresse IP élastique (EIP) à la passerelle NAT Internet.
Dans la console NAT Gateway, localisez la nouvelle instance de passerelle NAT Internet et cliquez sur son ID pour ouvrir la page des détails.
Accédez à l'onglet Associated EIP et cliquez sur Associate EIP.
Dans la boîte de dialogue Associate EIP, sélectionnez Purchase and Associate EIP.
-
Cliquez sur OK.
Une fois l'EIP associée, vous pouvez l'afficher sur l'onglet Associated EIP. Son statut est Allocated et le Entry Association Status est Unused. Cela indique que l'EIP n'est pas encore associée à une entrée DNAT ou SNAT.
-
Créez une entrée SNAT.
Dans la console NAT Gateway, localisez la nouvelle instance de passerelle NAT Internet et cliquez sur son ID pour accéder à la page des détails.
Accédez à l'onglet SNAT et cliquez sur Create SNAT Entry.
-
Sur la page Create SNAT Entry, configurez les paramètres suivants et cliquez sur OK.
Parameter
Description
SNAT Entry
Sélectionnez la granularité de l'entrée SNAT. Cet exemple utilise Select vSwitch. Ce paramètre permet à l'instance RDS for PostgreSQL du vSwitch spécifié d'accéder à Internet en utilisant l'adresse IP publique.
Select vSwitch
Sélectionnez le vSwitch de votre instance RDS for PostgreSQL.
Select EIP
Sélectionnez l'adresse IP publique à utiliser pour l'accès à Internet. Cet exemple utilise une seule adresse IP. Sélectionnez l'EIP associée dans la liste déroulante.
Une fois l'entrée créée, vous pouvez l'afficher dans la SNAT Entry List. Sur l'onglet SNAT Management, le statut de la nouvelle entrée SNAT est Available.
Configurer la base de données cible exposée sur Internet
Ajoutez l'EIP de la passerelle NAT Internet à la liste d'autorisation de la base de données cible.
MySQL : consultez la section Privileges Provided by MySQL
PostgreSQL : consultez la section The pg_hba.conf File
SQL Server : consultez la section Configure the Windows Firewall to Allow SQL Server Access
-
Redis : utilisez un pare-feu pour restreindre l'accès au port spécifié par adresse IP. Par exemple, si vous utilisez iptables sur CentOS, exécutez la commande suivante :
iptables -A INPUT -s <EIP_of_your_NAT_gateway> -p tcp --dport <Redis_port> -j ACCEPT
Configurer l'instance RDS for PostgreSQL
Connectez-vous à l'instance RDS for PostgreSQL. Pour obtenir des instructions, consultez la section Se connecter à une instance PostgreSQL.
-
Créez l'extension.
RemarqueCet exemple utilise une base de données MySQL exposée sur Internet comme cible et crée l'extension mysql_fdw.
CREATE EXTENSION mysql_fdw; -
Créez une définition de serveur pour la base de données cible exposée sur Internet.
CREATE SERVER <server_name> FOREIGN DATA WRAPPER mysql_fdw OPTIONS ( host '<public_IP_of_target_database>', port '<port_of_target_database>' );Voici un exemple pour un service MySQL exposé sur Internet :
CREATE SERVER mysql_server80 FOREIGN DATA WRAPPER mysql_fdw OPTIONS ( host 'XX.XX.XX.XX', port '3306' ); -
Créez un mappage d'utilisateur. Ce mappage permet à l'utilisateur RDS for PostgreSQL spécifié d'accéder aux données de la base de données cible.
CREATE USER MAPPING FOR <RDS_for_PostgreSQL_username> SERVER <created_server_name> OPTIONS ( username '<username_for_target_database>', password '<password_for_target_database>' );Exemple :
CREATE USER MAPPING FOR pg_client SERVER mysql_server80 OPTIONS ( username 'testuser', password 'U123456!' ); -
Créez une table distante.
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>' );Exemple :
CREATE FOREIGN TABLE mysql_fdw_test ( id int, name varchar(10) ) SERVER mysql_server80 OPTIONS ( dbname 'testdb', table_name 'test' ); -
Testez la connexion.
Une fois ces étapes terminées, vous pouvez accéder aux tables de la base de données exposée sur Internet depuis votre instance RDS for PostgreSQL.
Par exemple, si vous créez une table distante nommée
mysql_fdw_test, vous pouvez l'interroger dans votre instance RDS for PostgreSQL pour récupérer les données de la base de données cible exposée sur Internet.SELECT * FROM mysql_fdw_test;