本文介紹如何使用PostgreSQL的fdw外掛程式,使RDS PostgreSQL執行個體支援訪問外部開通公網的資料庫。
背景資訊
RDS PostgreSQL支援通過fdw功能訪問外部其他類型資料庫,如MySQL、SQL Server、PostgreSQL及Redis等,由於RDS PostgreSQL基於使用者VPC的網路構建,如需訪問公網上的資料庫服務,還需配置公網NAT Gateway並綁定Elastic IP Address(EIP)。
本文通過配置公網NAT Gateway並綁定Elastic IP Address(EIP)的方式,為RDS PostgreSQL賦予訪問公網的能力,同時,確保RDS PostgreSQL執行個體的網路安全(配置SNAT,RDS PostgreSQL可以訪問互連網,但不通過NAT Gateway對互連網提供服務,外網無法通過NAT Gateway訪問RDS PostgreSQL執行個體)。
NAT Gateway、SNAT相關資訊,請參見使用公網NAT GatewaySNAT功能訪問互連網。
前提條件
已具備開通公網的目標資料庫,例如:開通公網IP的MySQL、SQL Server、PostgreSQL或Redis等。
已建立RDS PostgreSQL執行個體,操作步驟,請參見快速建立RDS PostgreSQL執行個體。
重要RDS PostgreSQL訪問開通公網的目標資料庫需要使用外掛程式如下,請確保建立的RDS PostgreSQL執行個體支援對應外掛程式。RDS PostgreSQL執行個體各版本外掛程式支援情況,請參見支援外掛程式列表。
MySQL:mysql_fdw
SQL Server:tds_fdw
PostgreSQL:postgres_fdw
Redis:redis_fdw
開通公網的目標資料庫及RDS PostgreSQL執行個體均已建立帳號。
開通公網的目標資料庫建立帳號,請參見各引擎官方文檔。
RDS PostgreSQL建立帳號,請參見建立帳號。
開通公網的目標資料庫已建立資料庫並存在資料。
操作步驟
公網NAT Gateway配置
建立NAT Gateway。
在公網NAT Gateway頁面,單擊建立公網NAT Gateway。
(可選)首次使用NAT Gateway時,在公網NAT Gateway頁面關聯角色建立地區,單擊建立關聯角色,建立服務關聯角色。角色建立成功後即可建立NAT Gateway。
在建立公網NAT Gateway頁面,配置以下購買資訊,然後單擊立即購買。
說明下表僅列出關鍵參數,所有參數的具體資訊,請參見使用公網NAT GatewaySNAT功能訪問互連網。
配置
說明
所屬地區
選擇需要建立公網NAT Gateway的地區,需要與RDS PostgreSQL執行個體同一地區。
所屬專用網路
選擇公網NAT Gateway執行個體所屬的VPC,需要與RDS PostgreSQL執行個體的VPC相同。您可以前往RDS管理主控台的資料庫連接頁面,查看目標執行個體的VPC。
關聯交換器
選擇公網NAT Gateway執行個體所屬的交換器,需要與RDS PostgreSQL執行個體的交換器相同。您可以前往RDS管理主控台的資料庫連接頁面,查看目標執行個體的交換器。
訪問模式
本文選擇稍後配置。
在確認訂單頁面確認公網NAT Gateway的配置資訊,選中服務合約並單擊確認訂單。
建立成功後,您可以在公網NAT Gateway頁面查看已建立的公網NAT Gateway執行個體。
為公網NAT Gateway綁定公網IP(EIP)。
在NAT Gateway管理主控台頁面,找到建立的公網NAT Gateway執行個體,單擊執行個體ID,進入基本資料頁。
切換至綁定的Elastic IP Address頁簽,單擊綁定Elastic IP Address。
在綁定Elastic IP Address彈窗中,選擇新購Elastic IP Address並綁定。
單擊確定。
綁定成功後,在綁定的Elastic IP Address處查看已綁定的Elastic IP Address。
建立SNAT條目。
在NAT Gateway管理主控台頁面,找到建立的公網NAT Gateway執行個體,單擊執行個體ID,進入基本資料頁。
切換至SNAT管理頁簽,單擊建立SNAT條目。
在建立SNAT條目頁面,配置以下參數,然後單擊確定建立。
配置
說明
SNAT條目粒度
選擇SNAT條目的粒度。本文以選擇交換器粒度為例:指定交換器下的RDS PostgreSQL執行個體通過配置的公網IP訪問公網。
選擇交換器
在下拉式清單中選擇RDS PostgreSQL執行個體的交換器。
選擇Elastic IP Address地址
選擇用來提供公網訪問的公網IP。本文以選擇使用單個IP為例,在下拉式清單中選擇已綁定的EIP。
建立成功後,在SNAT條目列表處查看已配置的SNAT條目。
開通公網的目標資料庫配置
開通公網的目標資料庫需要配置白名單,允許公網NAT Gateway綁定的EIP訪問。
MySQL:請參見Privileges Provided by MySQL
PostgreSQL:請參見The pg_hba.conf File
SQL Server:請參見Configure the Windows Firewall to Allow SQL Server Access
Redis:利用防火牆限制IP訪問指定連接埠,例如CentOS中安裝iptables工具,使用如下命令:
iptables -A INPUT -s <公網NAT Gateway綁定的EIP> -p tcp --dport <Redis連接埠號碼> -j ACCEPT
RDS PostgreSQL配置
串連RDS PostgreSQL執行個體。具體操作,請參見串連PostgreSQL執行個體。
建立外掛程式。
說明本文以開通公網的目標資料庫MySQL為例,建立mysql_fdw外掛程式。
CREATE EXTENSION mysql_fdw;
建立開通公網的目標資料庫伺服器定義。
CREATE SERVER <服務名> FOREIGN DATA WRAPPER mysql_fdw OPTIONS ( host '<開通公網的目標資料庫的公網IP>', port '<開通公網的目標資料庫的連接埠號碼>' );
本文以公網MySQL服務為例,配置命令如下:
CREATE SERVER mysql_server80 FOREIGN DATA WRAPPER mysql_fdw OPTIONS ( host 'XX.XX.XX.XX', port '3306' );
建立使用者映射,將MySQL伺服器定義映射到RDS PostgreSQL的某個使用者上,在RDS PostgreSQL上使用這個使用者訪問開通公網的目標資料庫MySQL的資料。
CREATE USER MAPPING FOR <RDS PostgreSQL使用者名稱> SERVER <已建立的服務名> OPTIONS ( username '<開通公網的目標資料庫的使用者名稱>', password '<開通公網的目標資料庫的密碼>' );
命令樣本如下:
CREATE USER MAPPING FOR pg_client SERVER mysql_server80 OPTIONS ( username 'testuser', password 'U123456!' );
建立外表。
CREATE FOREIGN TABLE <外表名> ( id int, name varchar(10) ) SERVER <已建立的服務名> OPTIONS ( dbname '<開通公網的目標資料庫的資料庫名>', table_name '<開通公網的目標資料庫的表名>' );
命令執行個體如下:
CREATE FOREIGN TABLE mysql_fdw_test ( id int, name varchar(10) ) SERVER mysql_server80 OPTIONS ( dbname 'testdb', table_name 'test' );
串連測試。
完成上述配置後,即可在RDS PostgreSQL執行個體中訪問公網資料庫中的表。
以建立名為
mysql_fdw_test
的外表為例,在RDS PostgreSQL中,直接查詢外表,即可擷取開通公網的目標資料庫的資料。SELECT * FROM mysql_fdw_test;