如何从位于不同 VPC 中的 Amazon SageMaker 笔记本实例连接到 Amazon RDS 数据库实例?

上次更新时间:2020 年 12 月 16 日

如何将 Amazon SageMaker 笔记本实例连接到位于其他 Virtual Private Cloud (VPC) 中的 Amazon Relational Database Service (Amazon RDS) 数据库实例?

解决方案

1.    创建 VPC 对等连接

2.    VPC 对等连接处于活动状态后,更新路由表。RDS 数据库实例子网和 SageMaker 笔记本实例子网必须有相互之间的路由。例如,对于以下 CIDR 数据块:

SageMaker VPC CIDR 数据块:192.168.0.0/16

RDS 数据库实例 VPC CIDR 数据块:10.0.0.0/24

Amazon RDS 数据库实例子网路由表如下所示:

目标 目标
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 数据库实例的流量:

在笔记本实例安全组上:确保存在允许流量到 RDS 数据库实例的出站规则。

在数据库实例安全组上:确保存在允许笔记本实例的安全组、VPC CIDR 数据块或子网 CIDR 数据块的入站规则。

4.    要测试连接,请在 SageMaker 笔记本实例的终端中运行以下命令。替换示例中的以下值:

test.ab12cde3fg4.us-east-1.rds.amazonaws.com: 数据库实例终端节点

3306: 数据库实例端口

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

在此示例中,数据库实例的 VPC CIDR 数据块为 10.0.0.0/24。操作系统的路由表没有到 10.0.0.0/24 的路由。相反,到 RDS VPC CIDR 数据块的流量使用处理公共流量的主网络接口 (eth0)。要解决连接问题,请将路由表修改为使用 eth2,这是笔记本实例的 VPC 弹性网络接口:

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 数据库实例的 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 笔记本实例时,您将丢失更改。为了缓解这种情况,请使用生命周期配置在每次启动笔记本实例时添加路由。