別の VPC にある Amazon SageMaker ノートブックインスタンスから Amazon RDS DB インスタンスに接続する方法を教えてください。

最終更新日: 2020 年 12 月 16 日

Amazon SageMaker ノートブックインスタンスを、別の Virtual Private Cloud (VPC) にある Amazon Relational Database Service (Amazon RDS) DB インスタンスに接続する方法を教えてください。

解決方法

1.    VPC ピアリング接続を作成します

2.    VPC ピアリング接続がアクティブになったら、ルートテーブルを更新します。RDS DB インスタンスサブネットと SageMaker ノートブックインスタンスサブネットには、お互いに行き来するルートが必要です。例えば、次の CIDR ブロックの場合:

SageMaker VPC CIDR ブロック: 192.168.0.0/16

RDS DB インスタンス VPC CIDR ブロック: 10.0.0.0/24

Amazon RDS DB インスタンスのサブネットルートテーブルは次のようになります。

送信先 ターゲット
10.0.0.0/24 ローカル
192.168.0.0/16 ドロップダウンリストから VPC ピアリング接続を選択します

SageMaker ノートブックインスタンスのサブネットルートテーブルは次のようになります。

送信先 ターゲット
10.0.0.0/24

ドロップダウンリストから VPC ピアリング接続を選択します

192.168.0.0/16 ローカル

3.    両方のセキュリティグループが正しく設定されていることを確認します。ノートブックインスタンスから RDS DB インスタンスへのトラフィックを許可するには、以下の手順を実行します。

ノートブックインスタンスのセキュリティグループで、RDS DB インスタンスへのトラフィックを許可するアウトバウンドルールがあることを確認します。

DB インスタンスのセキュリティグループで、ノートブックインスタンスのセキュリティグループ、VPC CIDR ブロック、またはサブネット CIDR ブロックを許可するインバウンドルールがあることを確認します。

4.    接続をテストするには、SageMaker ノートブックインスタンスのターミナルで次のコマンドを実行します。サンプルの以下の値を置き換えます。

test.ab12cde3fg4.us-east-1.rds.amazonaws.com: DB インスタンスエンドポイント

3306: DB インスタンスポート

nc test.ab12cde3fg4.us-east-1.rds.amazonaws.com 3306 -zv

トラブルシューティング

ノートブックインスタンスで直接インターネットにアクセスできるようになっている場合、テストコマンドが失敗することがあります (例えば、「接続がタイムアウトしました」)。この場合、次のコマンドを実行して、オペレーティングシステムレベルでノートブックインスタンスのルーティングテーブルをチェックします。

route -n

直接インターネットアクセスが有効になっている場合、ルーティングテーブルは次のようになります。

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.0.1      0.0.0.0         UG    0      0        0 eth0
10.0.32.0       0.0.0.0         255.255.224.0   U     0      0        0 eth1
169.254.0.0     0.0.0.0         255.255.255.0   U     0      0        0 veth_def_agent
169.254.169.254 0.0.0.0         255.255.255.255 UH    0      0        0 eth0
172.16.0.0      0.0.0.0         255.255.224.0   U     0      0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.18.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-5a785eca34a3
192.168.0.0     0.0.0.0         255.255.128.0   U     0      0        0 eth2
192.168.0.0     192.168.0.1     255.255.0.0     UG    0      0        0 eth2

この例では、DB インスタンスの VPC CIDR ブロックは 10.0.0.0/24 です。オペレーティングシステムのルーティングテーブルに 10.0.0.0/24 へのルートがありません。代わりに、RDS VPC CIDR ブロックへのトラフィックは、パブリックトラフィックを処理するプライマリネットワークインターフェイス (eth0) を使用しています。接続の問題を解決するには、ノートブックインスタンスの VPC Elastic Network Interface である eth2 を使用するようにルーティングテーブルを変更します。

1.    SageMaker VPC ルーターのアドレスを書き留めます。この例では、192.168.0.0/16 (ノートブックインスタンスの VPC CIDR ブロック) は 192.168.0.1 にルーティングされます。これは、192.168.0.1 が VPC ルーターアドレスであることを意味します。

2.    ノートブックインスタンス端末のルーティングテーブルにルートを追加します。サンプルの以下の値を置き換えます。

10.0.0.0/24: RDS DB インスタンスの VPC CIDR ブロック

192.168.0.1: SageMaker ノートブックインスタンスの VPC ルーターアドレス

sudo ip route add 10.0.0.0/24 via 192.168.0.1 dev eth2

3.    新しいルートがルーティングテーブルにあることを確認します。

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.0.1      0.0.0.0         UG    0      0        0 eth0
10.0.0.0        192.168.0.1     255.255.255.0   UG    0      0        0 eth2
10.0.32.0       0.0.0.0         255.255.224.0   U     0      0        0 eth1
169.254.0.0     0.0.0.0         255.255.255.0   U     0      0        0 veth_def_agent
169.254.169.254 0.0.0.0         255.255.255.255 UH    0      0        0 eth0
172.16.0.0      0.0.0.0         255.255.224.0   U     0      0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.18.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-5a785eca34a3
192.168.0.0     0.0.0.0         255.255.128.0   U     0      0        0 eth2
192.168.0.0     192.168.0.1     255.255.0.0     UG    0      0        0 eth2

4.    以下のように、接続をもう一度テストします。

sh-4.2$ nc test.ab12cde3fg4.us-east-1.rds.amazonaws.com 3306 -zv
Connection to test.ab12cde3fg4.us-east-1.rds.amazonaws.com 3306 port [tcp/mysql] succeeded!

注: オペレーティングシステムのルーティングテーブルへの変更は、ノートブックインスタンスセッション間で保持されません。つまり、SageMaker ノートブックインスタンスを停止して起動すると、変更が失われます。これを軽減するには、ライフサイクル設定を使用して、ノートブックインスタンスを起動するたびにルートを追加してください。