本文介紹如何使用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執行個體各版本外掛程式支援情況,請參見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管理主控台的資料庫連接頁面,查看目標RDS PostgreSQL執行個體的VPC。
網路類型
本文選擇公網 NAT Gateway。
Elastic IP Address
本文選擇稍後配置。
-
在確認訂單頁面確認公網NAT Gateway的配置資訊後,並單擊立即開通。
建立成功後,您可以在公網 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。綁定完成後,在綁定的Elastic IP Address頁簽下可查看已綁定的Elastic IP Address,狀態顯示為已指派,條目關聯狀態顯示為未使用,表示該Elastic IP Address尚未關聯DNAT或SNAT條目。
-
-
建立SNAT條目。
-
在NAT Gateway管理主控台頁面,找到建立的公網NAT Gateway執行個體,單擊執行個體ID,進入基本資料頁。
-
切換至SNAT管理頁簽,單擊建立SNAT條目。
-
在建立SNAT條目頁面,配置以下參數,然後單擊确定创建。
配置
說明
SNAT條目粒度
選擇SNAT條目的粒度。本文以選擇交換器粒度為例:指定交換器下的RDS PostgreSQL執行個體通過配置的公網IP訪問公網。
選擇交換器
在下拉式清單中選擇RDS PostgreSQL執行個體的交換器。
選擇Elastic IP Address地址
選擇用來提供公網訪問的公網IP。本文以選擇使用單個IP為例,在下拉式清單中選擇已綁定的EIP。
建立成功後,在SNAT條目列表處查看已配置的SNAT條目。配置完成後,在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;