RDS for PostgreSQL インスタンスは、Virtual Private Cloud (VPC) 内で実行されるため、パブリックインターネットには直接アクセスできません。このトピックでは、インターネット NAT ゲートウェイと送信元ネットワークアドレス変換 (SNAT) エントリを設定し、RDS for PostgreSQL インスタンスが外部データラッパー (FDW) 拡張機能を使用してインターネット経由で外部データベース (MySQL、SQL Server、PostgreSQL、または Redis) に接続できるようにする方法について説明します。
SNAT エントリにより、インスタンスはアウトバウンドでインターネットにアクセスできるようになります。外部ネットワークから NAT ゲートウェイを介してインスタンスに到達することはできません。
前提条件
開始する前に、以下が準備できていることを確認してください:
-
RDS for PostgreSQL インスタンス。 詳細については、「RDS for PostgreSQL インスタンスをすばやく作成する」をご参照ください。
-
パブリック IP アドレスでインターネット経由でアクセス可能なターゲットデータベース (MySQL、SQL Server、PostgreSQL、または Redis)
-
お使いの RDS for PostgreSQL のバージョンでサポートされている FDW 拡張機能。 データベースタイプごとに必要な拡張機能については、「RDS for PostgreSQL でサポートされている拡張機能」をご確認ください:
-
MySQL:
mysql_fdw -
SQL Server:
tds_fdw -
PostgreSQL:
postgres_fdw -
Redis:
redis_fdw
-
-
RDS for PostgreSQL インスタンスのアカウント。 詳細については、「アカウントの作成」をご参照ください。
-
ターゲットデータベースのアカウント、およびデータを含むデータベース
FDW を設定する前に、ターゲットデータベースから次の情報を収集してください:
-
パブリック IP アドレスまたはホスト名
-
ポート番号 (MySQL のデフォルトは
3306) -
データベース名
-
FDW 接続用のユーザー名とパスワード
インターネット NAT ゲートウェイの設定
ステップ1:NAT ゲートウェイの作成
-
NAT ゲートウェイ コンソールにログインします。
-
[インターネット NAT ゲートウェイ] ページで、[インターネット NAT ゲートウェイの作成] をクリックします。
-
(オプション) NAT Gateway を初めて使用する場合は、[サービスリンクロールの作成] セクションで [サービスリンクロールの作成] をクリックします。このボタンは [インターネット NAT ゲートウェイ] ページに表示されます。
-
[インターネット NAT ゲートウェイの作成] ページで、次のパラメーターを設定し、[今すぐ購入] をクリックします。
以下の表では、主要なパラメーターのみを記載します。 すべてのパラメーターについては、「インターネット NAT ゲートウェイの SNAT 機能を使用したインターネットアクセス」をご参照ください。
パラメーター 説明 [リージョン] RDS for PostgreSQL インスタンスと同じリージョンを選択します [ネットワークとゾーン] [Database Connection]RDS for PostgreSQL インスタンスの VPC と vSwitch を選択します。 VPC は、RDS コンソールの **[データベース接続]** ページで確認できます [ネットワークタイプ] [インターネット NAT ゲートウェイ] を選択します [EIP] [後で設定] を選択します -
[確認] ページで設定を確認し、[今すぐ有効化] をクリックします。
ゲートウェイが作成されると、[Internet NAT Gateway] ページに表示されます。
ステップ2:Elastic IP Address (EIP) の関連付け
-
NAT ゲートウェイ コンソールで、作成した NAT ゲートウェイのインスタンス ID をクリックします。
-
[関連付け EIP] タブで、[EIP の関連付け] をクリックします。
-
[EIP の関連付け] ダイアログボックスで、[EIP の購入と関連付け]を選択します。

-
[OK] をクリックします。
EIP は[関連付けられた EIP] セクションに表示されます。
ステップ3:SNAT エントリの作成
-
NAT ゲートウェイ コンソールで、作成した NAT ゲートウェイのインスタンス ID をクリックします。
-
[SNAT] タブで、[SNAT エントリの作成] をクリックします。
-
以下のパラメーターを設定し、[OK] をクリックします。
パラメーター 説明 [SNAT エントリ] [vSwitch 粒度] を選択します。vSwitch 内のすべてのインスタンスは、EIP を使用してインターネットにアクセスできるようになります [vSwitch の選択] RDS for PostgreSQL インスタンスの vSwitch を選択します [EIP の選択] 前の手順で関連付けた EIP を選択します
SNAT エントリは[SNAT エントリリスト]に表示されます。
ターゲットデータベースの設定
ターゲットデータベースのホワイトリストまたはファイアウォールルールに EIP を追加し、RDS インスタンスからの接続を受け入れるように設定します。
-
MySQL: 詳細については、「MySQL が提供する権限」をご参照ください。
-
PostgreSQL: 詳細については、「pg_hba.conf ファイル」をご参照ください。
-
SQL Server: 詳細については、「SQL Server のアクセスを許可するための Windows ファイアウォールの設定」をご参照ください。
-
Redis: ファイアウォールを使用して、Redis ポートへの EIP からのトラフィックを許可してください。たとえば、iptables を使用する CentOS の場合:
iptables -A INPUT -s <EIP_associated_with_the_Internet_NAT_gateway> -p tcp --dport <Redis_port_number> -j ACCEPT
RDS for PostgreSQL インスタンスの設定
以下の手順では MySQL データベースを例とし、mysql_fdw 拡張機能を使用します。ターゲットデータベースの種類に応じて、拡張機能名と FDW オプションを適切な値に置き換えてください。
ステップ1:RDS インスタンスへの接続
RDS for PostgreSQL インスタンスに接続します。 詳細については、「PostgreSQL インスタンスへの接続」をご参照ください。
ステップ2:FDW 拡張機能のインストール
次のコマンドを実行します:
CREATE EXTENSION mysql_fdw;
ステップ3:サーバ定義の作成
ターゲットデータベースを参照するサーバ定義を作成します。プレースホルダーを実際の値に置き換えてください:
CREATE SERVER <server_name>
FOREIGN DATA WRAPPER mysql_fdw OPTIONS (
host '<public_IP_of_the_target_database>',
port '<port_of_the_target_database>'
);
MySQL データベースの例:
CREATE SERVER mysql_server80
FOREIGN DATA WRAPPER mysql_fdw OPTIONS (
host 'XX.XX.XX.XX',
port '3306'
);
期待される出力:
CREATE SERVER
ステップ4:ユーザーマッピングの作成
サーバ定義を RDS インスタンス内のユーザーにマッピングします。このマッピングにより、ユーザーはターゲットの MySQL データベースで認証できるようになります:
CREATE USER MAPPING
FOR <RDS_for_PostgreSQL_username> SERVER <created_server_name> OPTIONS (
username '<username_for_the_target_database>',
password '<password_for_the_target_database>'
);
例:
CREATE USER MAPPING
FOR pg_client SERVER mysql_server80 OPTIONS (
username 'testuser',
password 'U123456!'
);
期待される出力:
CREATE USER MAPPING
ステップ5:外部テーブルの作成
ターゲットデータベースのテーブルにマッピングする外部テーブルを作成します。列名とデータ型は、リモートテーブルと一致させる必要があります:
CREATE FOREIGN TABLE <foreign_table_name> (
id int,
name varchar(10)
)
SERVER <created_server_name> OPTIONS (
dbname '<database_name_of_the_target_database>',
table_name '<table_name_of_the_target_database>'
);
例:
CREATE FOREIGN TABLE mysql_fdw_test (
id int,
name varchar(10)
)
SERVER mysql_server80 OPTIONS (
dbname 'testdb',
table_name 'test'
);
期待される出力:
CREATE FOREIGN TABLE
ステップ6:接続の検証
外部テーブルにクエリを実行し、ターゲットの MySQL データベースからデータが返されることを確認します:
SELECT * FROM mysql_fdw_test;
クエリによってターゲットデータベースから行が返された場合、設定は完了です。
次のステップ
-
別の種類の外部データベースにアクセスするには、対応する FDW 拡張機能 (
tds_fdwfor SQL Server,postgres_fdwfor PostgreSQL,redis_fdwfor Redis) を使用して上記の手順を繰り返してください。 -
NAT ゲートウェイの設定を管理するには、「インターネット NAT ゲートウェイの SNAT 機能を使用したインターネットアクセス」をご参照ください。