このトピックでは、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ゲートウェイの設定
- インターネットNATゲートウェイを作成します。
- NAT Gatewayコンソールにログインします。
- [インターネットNATゲートウェイ] ページで、[NATゲートウェイの作成] をクリックします。
- オプション。 インターネットNATゲートウェイページの [サービスにリンクされたロールの作成] セクションで、[サービスにリンクされたロールの作成] をクリックして、サービスにリンクされたロールを作成します。 インターネットNATゲートウェイを初めて作成する場合は、この手順が必要です。 サービスにリンクされたロールの作成後、NAT Gatewayを作成できます。
- [インターネット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をクリックして [基本情報] タブに移動します。
- [関連付けられたEIP] タブで、[Elastic IPアドレスのバインド] をクリックします。
- [EIPの関連付け] ダイアログボックスで、[EIPの購入と関連付け] を選択します。
- [OK] をクリックします。 EIPをインターネットNATゲートウェイに関連付けると、[関連付けられたEIP] タブにEIPが表示されます。
- SNATエントリを作成します。
- [インターネットNATゲートウェイ] ページで、新しいインターネットNATゲートウェイを見つけ、そのIDをクリックして [基本情報] タブに移動します。
- [SNAT管理] タブで、[SNATエントリの作成] をクリックします。
- [SNATエントリの作成] ページで、パラメーターを設定し、[確認] をクリックします。
パラメーター 説明 SNATエントリ VPC、vSwitch、ECSインスタンス、またはカスタムCIDRブロックのいずれのSNATエントリを作成するかを指定します。 この例では、[vSwitchの指定] が選択されています。 このオプションは、指定されたvSwitchにアタッチされているRDSインスタンスのみが、指定されたパブリックIPアドレスを使用してインターネットにアクセスできることを指定します。 VSwitchの選択 ドロップダウンリストからRDSインスタンスのvSwitchを選択します。 パブリックIPアドレスの選択 インターネットにアクセスする1つ以上のパブリックIPアドレスを選択します。 この例では、[IPアドレスを1つ使用] が選択され、ドロップダウンリストからEIPが選択されます。 SNATエントリの作成後、[SNATエントリで使用] セクションでSNATエントリを表示できます。
外部データベースの設定
- 外部データベースが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インスタンスの設定
- RDSインスタンスに接続します。 詳細については、「ApsaraDB RDS For PostgreSQLインスタンスへの接続」をご参照ください。
- 拡張機能を作成します。 説明 この例では、MySQLを実行する外部データベース用にmysql_fdw拡張子が作成されます。
拡張の作成mysql_fdw;
- 外部データベースのサーバー定義を作成します。
CREATE SERVER <サーバー名> 外国データラッパーmysql_fdwオプション ( ホスト '<外部データベースのパブリックIPアドレス>' 、 ポート '<外部データベースのポート番号>' );
この例では、外部データベースはMySQLを実行し、次のステートメントを実行する必要があります。
CREATE SERVER mysql_server80 外国データラッパーmysql_fdwオプション ( ホスト 'XX.XX.XX.XX' 、 ポート '3306' );
- ユーザーマッピングを作成して、MySQLサーバー定義をRDSインスタンスのユーザーにマッピングします。 ユーザーを使用して、外部MySQLデータベースにアクセスします。
ユーザーマッピングを作成する FOR <RDSインスタンスのユーザー名> SERVER <作成されたサーバーの名前> OPTIONS (OPTIONS) username '<外部データベースのユーザー名>' 、 password '<外部データベースのパスワード>' );
例:
ユーザーマッピングを作成する pg_clientサーバー用mysql_server80オプション ( ユーザー名 'testuser' 、 パスワード「U123456! 」 );
- 外部テーブルを作成します。
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' );
- 接続をテストします。 上記の設定を完了すると、RDSインスタンスは外部データベースのテーブルにアクセスできます。この例では、
mysql_fdw_test
という名前の外部テーブルが作成されます。 RDSインスタンスから外部テーブルを直接クエリして、外部データベースのデータを取得できます。SELECT * からmysql_fdw_test;