すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:ApsaraDB RDS for PostgreSQLインスタンスを使用してインターネット経由で外部データベースにアクセスする

最終更新日:Jan 17, 2024

このトピックでは、PostgreSQLのfdw拡張機能を使用して、ApsaraDB RDS for PostgreSQLインスタンスがパブリックIPアドレスを持つ外部データベースにアクセスできるようにする方法について説明します。

背景情報

ApsaraDB RDS for PostgreSQLはfdw拡張機能をサポートしており、RDSインスタンスがMySQL、SQL Server、PostgreSQL、Redisなどのデータベースエンジンを実行する外部データベースにアクセスできるようにします。 RDSインスタンスが仮想プライベートクラウド (VPC) に作成されます。 インターネット経由でアクセスできるデータベースサービスにアクセスするには、RDSインスタンスにインターネットNATゲートウェイを設定し、EIP (elastic IP address) をインターネットNATゲートウェイに関連付ける必要があります。

このトピックでは、インターネットNATゲートウェイを設定し、EIPをインターネットNATゲートウェイに関連付けて、RDSインスタンスがインターネット経由でデータベースにアクセスできるようにする方法について説明します。 さらに、NATゲートウェイのSNATルールを設定して、RDSインスタンスからインターネットへのアウトバウンド接続のみを許可できます。 RDSインスタンスがインターネット経由でサービスを提供していないか、インターネット経由でアクセスできません。 これにより、RDSインスタンスのネットワークセキュリティを確保できます。

NAT gatewayとSNATの詳細については、「インターネットNAT gatewayのSNAT機能を使用してインターネットにアクセスする」をご参照ください。

前提条件

  • パブリックIPアドレスを持つ外部データベースが利用可能です。 データベースは、MySQL、SQL Server、PostgreSQL、またはRedisを実行できます。
  • RDSインスタンスが作成されました。 詳細については、「ApsaraDB RDS For PostgreSQLインスタンスの作成」をご参照ください。
    重要 RDSインスタンスが外部データベースにアクセスできるようにするには、次の拡張機能が必要です。 RDSインスタンスが拡張機能をサポートしていることを確認してください。 各PostgreSQLバージョンでサポートされている拡張機能の詳細については、「サポートされている拡張機能」をご参照ください。
    • MySQL: mysql_fdw
    • SQL Server: tds_fdw
    • PostgreSQL: postgres_fdw
    • Redis: redis_fdw
  • 外部データベースとRDSインスタンスのアカウントが作成されます。
    • 外部データベースのアカウントを作成する方法の詳細については、各データベースエンジンの公式ドキュメントを参照してください。
    • RDSインスタンスのアカウントを作成する方法の詳細については、「アカウントの作成」をご参照ください。
  • 外部データベースのデータが作成されます。

手順

インターネットNATゲートウェイの設定

  1. インターネットNATゲートウェイを作成します。
    1. NAT Gatewayコンソールにログインします。
    2. [インターネットNATゲートウェイ] ページで、[NATゲートウェイの作成] をクリックします。
    3. オプション。 インターネットNATゲートウェイページの [サービスにリンクされたロールの作成] セクションで、[サービスにリンクされたロールの作成] をクリックして、サービスにリンクされたロールを作成します。 インターネットNATゲートウェイを初めて作成する場合は、この手順が必要です。 サービスにリンクされたロールの作成後、NAT Gatewayを作成できます。
    4. [インターネットNATゲートウェイ] ページで、パラメーターを設定し、[今すぐ購入] をクリックします。
      説明 次の表に、主要なパラメーターのみを示します。 すべてのパラメーターの詳細については、「インターネットNATゲートウェイのSNAT機能を使用したインターネットへのアクセス」をご参照ください。
      パラメーター説明
      リージョン

      インターネットNATゲートウェイを作成するリージョンを選択します。 リージョンは、RDSインスタンスのリージョンと同じである必要があります。

      [VPC]

      インターネットNATゲートウェイが属するVPCを選択します。 VPCはRDSインスタンスのVPCと同じである必要があります。 ApsaraDB RDSコンソールの [データベース接続] ページに移動して、RDSインスタンスのVPCを表示できます。

      vSwitchの関連付け

      インターネットNATゲートウェイが属するvSwitchを選択します。 vSwitchは、RDSインスタンスのvSwitchと同じである必要があります。 ApsaraDB RDSコンソールの [データベース接続] ページに移動して、RDSインスタンスのvSwitchを表示できます。

      アクセスモードこの例では、[後で設定] が選択されています。
    5. [確認] ページで設定を確認し、[利用規約] を読んで選択し、[確認] をクリックします。
      新しいインターネットNATゲートウェイは、[インターネットNATゲートウェイ] ページで確認できます。 Create an Internet NAT gateway
  2. EIPをインターネットNATゲートウェイに関連付けます。
    1. [インターネットNATゲートウェイ] ページで、新しいインターネットNATゲートウェイを見つけ、そのIDをクリックして [基本情報] タブに移動します。
    2. [関連付けられたEIP] タブで、[Elastic IPアドレスのバインド] をクリックします。
    3. [EIPの関連付け] ダイアログボックスで、[EIPの購入と関連付け] を選択します。 Bind Elastic IP Address
    4. [OK] をクリックします。
      EIPをインターネットNATゲートウェイに関連付けると、[関連付けられたEIP] タブにEIPが表示されます。 Associated EIP tab
  3. SNATエントリを作成します。
    1. [インターネットNATゲートウェイ] ページで、新しいインターネットNATゲートウェイを見つけ、そのIDをクリックして [基本情報] タブに移動します。
    2. [SNAT管理] タブで、[SNATエントリの作成] をクリックします。
    3. [SNATエントリの作成] ページで、パラメーターを設定し、[確認] をクリックします。
      パラメーター説明
      SNATエントリVPC、vSwitch、ECSインスタンス、またはカスタムCIDRブロックのいずれのSNATエントリを作成するかを指定します。 この例では、[vSwitchの指定] が選択されています。 このオプションは、指定されたvSwitchにアタッチされているRDSインスタンスのみが、指定されたパブリックIPアドレスを使用してインターネットにアクセスできることを指定します。
      VSwitchの選択ドロップダウンリストからRDSインスタンスのvSwitchを選択します。
      パブリックIPアドレスの選択インターネットにアクセスする1つ以上のパブリックIPアドレスを選択します。 この例では、[IPアドレスを1つ使用] が選択され、ドロップダウンリストからEIPが選択されます。
      SNATエントリの作成後、[SNATエントリで使用] セクションでSNATエントリを表示できます。 Configured SNAT entry

外部データベースの設定

インターネットNATゲートウェイに関連付けられているEIPからのアクセスを許可するには、外部データベースのホワイトリストを設定する必要があります。
  • 外部データベースがMySQLを実行している場合は、[MySQLが提供する権限] に基づいて外部データベースを設定します。
  • 外部データベースがPostgreSQLを実行している場合は、pg_hba.confファイルに基づいて外部データベースを設定します。
  • 外部データベースがSQL Serverを実行している場合は、[Windowsファイアウォールを構成してSQL Serverアクセスを許可する] に基づいて外部データベースを構成します。
  • 外部データベースがRedisを実行している場合は、ファイアウォールを使用して、EIPがアクセスできるポートを指定します。 たとえば、CentOSにiptablesをインストールし、次のコマンドを実行できます。
    iptables -A INPUT -s <インターネットNATゲートウェイに関連付けられているEIP> -p tcp -- dport <Redisポート番号> -j ACCEPT

RDSインスタンスの設定

  1. RDSインスタンスに接続します。 詳細については、「ApsaraDB RDS For PostgreSQLインスタンスへの接続」をご参照ください。
  2. 拡張機能を作成します。
    説明 この例では、MySQLを実行する外部データベース用にmysql_fdw拡張子が作成されます。
    拡張の作成mysql_fdw;
  3. 外部データベースのサーバー定義を作成します。
    CREATE SERVER <サーバー名>
    外国データラッパーmysql_fdwオプション (
      ホスト '<外部データベースのパブリックIPアドレス>' 、
      ポート '<外部データベースのポート番号>'
    ); 

    この例では、外部データベースはMySQLを実行し、次のステートメントを実行する必要があります。

    CREATE SERVER mysql_server80
    外国データラッパーmysql_fdwオプション (
      ホスト 'XX.XX.XX.XX' 、
      ポート '3306'
    ); 
  4. ユーザーマッピングを作成して、MySQLサーバー定義をRDSインスタンスのユーザーにマッピングします。 ユーザーを使用して、外部MySQLデータベースにアクセスします。
    ユーザーマッピングを作成する
    FOR <RDSインスタンスのユーザー名> SERVER <作成されたサーバーの名前> OPTIONS (OPTIONS)
      username '<外部データベースのユーザー名>' 、
      password '<外部データベースのパスワード>'
    ); 

    例:

    ユーザーマッピングを作成する
    pg_clientサーバー用mysql_server80オプション (
      ユーザー名 'testuser' 、
      パスワード「U123456! 」
    ); 
  5. 外部テーブルを作成します。
    FOREIGN TABLEの作成 <外部テーブルの名前> (
      id int,
      名前varchar(10)
    )
    SERVER <作成したサーバーの名前> OPTIONS (OPTIONS)
      dbname '<外部データベースの名前>' 、
      table_name '<外部データベース内のテーブルの名前>'
    ); 

    例:

    FOREIGNテーブルの作成mysql_fdw_test (
      id int,
      名前varchar(10)
    )
    サーバーmysql_server80オプション (
      dbname 'testdb',
      table_name 'test'
    ); 
  6. 接続をテストします。
    上記の設定を完了すると、RDSインスタンスは外部データベースのテーブルにアクセスできます。
    この例では、mysql_fdw_testという名前の外部テーブルが作成されます。 RDSインスタンスから外部テーブルを直接クエリして、外部データベースのデータを取得できます。
    SELECT * からmysql_fdw_test;