RDS PostgreSQL通过公网访问外部数据库

本文介绍如何使用PostgreSQLfdw插件,使RDS PostgreSQL实例支持访问外部开通公网的数据库。

背景信息

RDS PostgreSQL支持通过fdw功能访问外部其他类型数据库,如MySQL、SQL Server、PostgreSQLRedis等,由于RDS PostgreSQL基于用户VPC的网络构建,如需访问公网上的数据库服务,还需配置公网NAT网关并绑定弹性公网IP(EIP)。

本文通过配置公网NAT网关并绑定弹性公网IP(EIP)的方式,为RDS PostgreSQL赋予访问公网的能力,同时,确保RDS PostgreSQL实例的网络安全(配置SNAT,RDS PostgreSQL可以访问互联网,但不通过NAT网关对互联网提供服务,外网无法通过NAT网关访问RDS PostgreSQL实例)。

NAT网关、SNAT相关信息,请参见使用公网NAT网关SNAT功能访问互联网

前提条件

  • 已具备开通公网的目标数据库,例如:开通公网IPMySQL、SQL Server、PostgreSQLRedis等。

  • 已创建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网关配置

  1. 创建NAT网关。

    1. 登录NAT网关管理控制台

    2. 公网NAT网关页面,单击创建公网NAT网关

    3. (可选)首次使用NAT网关时,在公网NAT网关页面关联角色创建区域,单击创建关联角色,创建服务关联角色。角色创建成功后即可创建NAT网关。

    4. 在创建公网NAT网关页面,配置以下购买信息,然后单击立即购买

      说明

      下表仅列出关键参数,所有参数的具体信息,请参见使用公网NAT网关SNAT功能访问互联网

      配置

      说明

      地域

      选择需要创建公网NAT网关的地域,需要与RDS PostgreSQL实例同一地域。

      网络及可用区

      选择公网NAT网关实例所属的VPC和交换机,需要与RDS PostgreSQL实例的VPC和交换机相同。

      您可以前往RDS管理控制台的数据库连接页面,查看目标RDS PostgreSQL实例的VPC。

      网络类型

      本文选择公网NAT网关

      弹性公网IP

      本文选择稍后配置

    5. 确认订单页面确认公网NAT网关的配置信息后,并单击立即开通

      创建成功后,您可以在公网NAT网关页面查看已创建的公网NAT网关实例。创建NAT网关

  2. 为公网NAT网关绑定公网IP(EIP)。

    1. NAT网关管理控制台页面,找到新建的公网NAT网关实例,单击实例ID,进入基本信息页。

    2. 切换至绑定的弹性公网IP页签,单击绑定弹性公网IP

    3. 绑定弹性公网IP弹窗中,选择新购弹性公网IP并绑定绑定弹性公网IP

    4. 单击确定

      绑定成功后,在绑定的弹性公网IP处查看已绑定的弹性公网IP。已绑定的弹性公网IP

  3. 创建SNAT条目。

    1. NAT网关管理控制台页面,找到新建的公网NAT网关实例,单击实例ID,进入基本信息页。

    2. 切换至SNAT管理页签,单击创建SNAT条目

    3. 创建SNAT条目页面,配置以下参数,然后单击确定创建

      配置

      说明

      SNAT条目粒度

      选择SNAT条目的粒度。本文以选择交换机粒度为例:指定交换机下的RDS PostgreSQL实例通过配置的公网IP访问公网。

      选择交换机

      在下拉列表中选择RDS PostgreSQL实例的交换机。

      选择弹性公网IP地址

      选择用来提供公网访问的公网IP。本文以选择使用单个IP为例,在下拉列表中选择已绑定的EIP。

      创建成功后,在SNAT条目列表处查看已配置的SNAT条目。已配置的SNAT

开通公网的目标数据库配置

开通公网的目标数据库需要配置白名单,允许公网NAT网关绑定的EIP访问。

RDS PostgreSQL配置

  1. 连接RDS PostgreSQL实例。具体操作,请参见连接PostgreSQL实例

  2. 创建插件。

    说明

    本文以开通公网的目标数据库MySQL为例,创建mysql_fdw插件。

    CREATE EXTENSION mysql_fdw;
  3. 创建开通公网的目标数据库服务器定义。

    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'
    );
  4. 创建用户映射,将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!'
    );
  5. 创建外表。

    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'
    );
  6. 连接测试。

    完成上述配置后,即可在RDS PostgreSQL实例中访问公网数据库中的表。

    以创建名为mysql_fdw_test的外表为例,在RDS PostgreSQL中,直接查询外表,即可获取开通公网的目标数据库的数据。

    SELECT * FROM mysql_fdw_test;