このトピックでは、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ゲートウェイとSNATの詳細については、「インターネットNATゲートウェイの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ゲートウェイの設定
NATゲートウェイを作成します。
NAT Gatewayコンソールにログインします。
インターネットNATゲートウェイページで、インターネットNATゲートウェイの作成をクリックします。
オプション。 インターネットNATゲートウェイページの [サービスにリンクされたロールの作成] セクションで、[サービスにリンクされたロールの作成] をクリックして、サービスにリンクされたロールを作成します。 インターネットNATゲートウェイを初めて作成する場合は、この手順が必要です。 サービスにリンクされたロールの作成後、インターネット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を表示できます。
アクセスモード
この例では、[後で設定] が選択されています。
確認ページで情報を確認し、[利用規約] チェックボックスをオンにして、確認をクリックします。
インターネットNATゲートウェイは、[インターネットNATゲートウェイ] ページで確認できます。
EIPをインターネットNATゲートウェイに関連付けます。
インターネットNATゲートウェイページで、新しいインターネットNATゲートウェイを見つけ、そのIDをクリックして [基本情報] タブに移動します。
関連付けられたElastic IPアドレスタブで、Elastic IPアドレスのバインドをクリックします。
[EIPの関連付け] ダイアログボックスで、[EIPの購入と関連付け] を選択します。
OKをクリックします。
EIPをインターネットNATゲートウェイに関連付けると、[関連付けられたElastic IPアドレス] タブにEIPが表示されます。
SNATエントリの作成
インターネットNATゲートウェイページで、新しいインターネットNATゲートウェイを見つけ、そのIDをクリックして [基本情報] タブに移動します。
SNAT管理タブで、SNATエントリの作成をクリックします。
SNATエントリの作成ページで、以下のパラメーターを設定し、OKをクリックします。
パラメーター
説明
SNATエントリ
VPC、vSwitch、ECSインスタンス、またはカスタムCIDRブロックのいずれのSNATエントリを作成するかを指定します。 この例では、[vSwitchの指定] が選択されています。 このオプションは、指定されたvSwitchにアタッチされているRDSインスタンスのみが、指定されたパブリックIPアドレスを使用してインターネットにアクセスできることを指定します。
vSwitchの選択
ドロップダウンリストからRDSインスタンスのvSwitchを選択します。
EIPの選択
1つ以上のEIPを選択してインターネットにアクセスします。 この例では、ドロップダウンリストから単一のEIPが選択されています。
SNATエントリの作成後、[SNATエントリリスト] セクションでSNATエントリを表示できます。
外部データベースの設定
インターネットNATゲートウェイに関連付けられているEIPからのアクセスを許可するには、外部データベースのホワイトリストを設定する必要があります。
外部データベースがMySQLを実行している場合は、[MySQLが提供する権限] に基づいて外部データベースを設定します。
外部データベースがPostgreSQLを実行している場合は、pg_hba.confファイルに基づいて外部データベースを設定します。
外部データベースがSQL Serverを実行している場合は、[Windowsファイアウォールを構成してSQL Serverアクセスを許可する] に基づいて外部データベースを構成します。
外部データベースがRedisを実行している場合は、ファイアウォールを使用して、EIPがアクセスできるポートを指定します。 たとえば、CentOSにiptablesをインストールし、次のコマンドを実行できます。
iptables -A INPUT -s <EIP that is assoicated with the Internet NAT gateway> -p tcp --dport <Redis port number> -j ACCEPT
RDSインスタンスの設定
ApsaraDB RDS for PostgreSQLインスタンスに接続します。 詳細については、「ApsaraDB RDS For PostgreSQLインスタンスへの接続」をご参照ください。
エクステンションを作成します。
説明この例では、MySQLを実行する外部データベース用にmysql_fdw拡張子が作成されます。
CREATE EXTENSION mysql_fdw;
外部データベースのサーバー定義を作成します。
CREATE SERVER <Server name> FOREIGN DATA WRAPPER mysql_fdw OPTIONS ( host '<Public IP address of the external database>', port '<Port number of the external database>' );
この例では、外部データベースはMySQLを実行し、次のステートメントを実行する必要があります。
CREATE SERVER mysql_server80 FOREIGN DATA WRAPPER mysql_fdw OPTIONS ( host 'XX.XX.XX.XX', port '3306' );
ユーザーマッピングを作成して、MySQLサーバー定義をRDSインスタンスのユーザーにマッピングします。 次に、ユーザーを使用して外部MySQLデータベースにアクセスします。
CREATE USER MAPPING FOR <Username of your RDS instance> SERVER <Name of the created server> OPTIONS ( username '<Username of the external database>', password '<Password of the external database>' );
例:
CREATE USER MAPPING FOR pg_client SERVER mysql_server80 OPTIONS ( username 'testuser', password 'U123456!' );
外部テーブルを作成します。
CREATE FOREIGN TABLE <Name of the foreign table> ( id int, name varchar(10) ) SERVER <Name of the created server> OPTIONS ( dbname '<Name of the external database>', table_name '<Name of the table in the external database>' );
例:
CREATE FOREIGN TABLE mysql_fdw_test ( id int, name varchar(10) ) SERVER mysql_server80 OPTIONS ( dbname 'testdb', table_name 'test' );
接続をテストします。
上記の設定を完了すると、RDSインスタンスは外部データベースのテーブルにアクセスできます。
この例では、
mysql_fdw_test
という名前の外部テーブルが作成されます。 RDSインスタンスから外部テーブルを直接クエリして、外部データベースのデータを取得できます。SELECT * FROM mysql_fdw_test;