我无法连接到我的 Amazon Relational Database Service(Amazon RDS)数据库实例。我该如何排查 Amazon Virtual Private Cloud(Amazon VPC)公有子网或私有子网中的连接问题?
简短描述
您可以在 VPC 的公有子网或私有子网中启动 Amazon RDS 数据库。但是,RDS 实例端的 VPC 配置不正确可能会导致连接问题。或者,您要连接的客户端上的配置或连接问题也可能引起连接问题。
要解决这些问题,请根据您的环境参阅以下解决方法。
解决方法
注意:如果您在运行 AWS Command Line Interface (AWS CLI) 命令时收到错误,请确保您运行的是最新版本的 AWS CLI。
我的数据库实例在公有子网中,但我无法从本地计算机通过互联网连接它
此问题可能会在将数据库实例的可公开访问属性设为否时发生。要查看数据库实例是否可公开访问,请执行以下操作:
打开 Amazon RDS console(Amazon RDS 控制台),从导航窗格中选择 Databases(数据库)并选择您的数据库实例。然后,查看您实例的 Connectivity & Security(连接和安全)部分。
-或者-
在 AWS CLI 中使用 describe-db-instances 命令。
若要将 Amazon RDS 实例的 Publicly Accessible(可公开访问)属性更改为 Yes(是),请按以下步骤操作:
1. 打开 Amazon RDS 控制台。
2. 从导航窗格中选择 Databases(数据库),然后选择数据库实例。
3. 选择 Modify(修改)。
4. 在 Connectivity(连接)下,展开 Additional configuratio(其他配置)部分,然后选择 Publicly accessible(可公开访问)。
5. 选择 Continue(继续)。
6. 选择 Modify DB Instance(修改数据库实例)。
**注意:**即使您没有选择 Apply Immediately(立即应用)选项,此更改也会立即生效。只有当您通过此修改设置了待处理的维护操作(这需要停机),并且选择 Apply Immediately(立即应用)时,才会出现停机。
如果您将 Publicly Accessible(可公开访问)属性设置为 Yes(是),但仍无法连接到 RDS 实例,请查看以下详细信息:
我的数据库实例在私有子网中,但我无法从本地计算机连接它
您可以使用公有子网解决此问题。使用公有子网时,子网上的所有资源均可从互联网访问。如果此解决方案不满足您的安全性要求,请使用 AWS Site-to-Site VPN。借助 Site-to-Site VPN,您可以配置客户网关,以便您的 VPC 可以连接到远程网络。
解决此问题的另一种方法是使用 Amazon EC2 实例作为堡垒(跳转)主机。有关更多信息,请参阅如何将 Amazon EC2 实例用作堡垒主机以从本地计算机连接到私有 Amazon RDS 数据库实例?
若要切换到公有子网:
1. 打开 Amazon RDS 控制台。
2. 从导航窗格中选择数据库,然后选择数据库实例。
3. 从连接与安全部分复制数据库实例的终端节点。
4. 从 VPC 中的 EC2 实例向数据库实例终端节点执行 nslookup 命令。请参阅以下示例输出:
nslookup myexampledb.xxxx.us-east-1.rds.amazonaws.com
Server: xx.xx.xx.xx
Address: xx.xx.xx.xx#53
Non-authoritative answer:
Name: myexampledb.xxxx.us-east-1.rds.amazonaws.com
Address: 172.31.xx.x
5. 获得 RDS 数据库实例的私有 IP 地址后,您可以将私有 IP 地址关联到 VPC 中的特定子网。该 VPC 子网基于子网 CIDR 范围和私有 IP 地址。
6. 打开 Amazon VPC 控制台,然后从导航窗格中选择子网。
7. 选择与您在第 5 步中找到的数据库实例相关联的子网。
8. 在描述窗格中,选择路由表。
9. 选择操作,然后选择编辑路由。
10. 选择 Add route(添加路由)。对于 IPv4 和 IPv6 流量,请在 Destination(目的地)方框中输入外部或本地网络的路由。然后在 Target(目标)列表中,选择互联网网关 ID。
注意:请确保实例的入站安全组规则将流量限制到外部或本地网络的地址。
11. 选择 Save(保存)。
**重要提示:**如果将子网更改为公有子网,则会导致子网中的其他数据库实例也可以通过互联网访问。如果数据库实例具有关联的公有地址,则可从互联网访问这些数据库实例。
如果在执行这些步骤后仍然无法访问数据库实例,请检查数据库实例是否是 Publicly Accessible(可公开访问)。为此,请按照我的数据库实例在私有子网中,但我无法从本地计算机连接它中的步骤操作。
其他 VPC 中的 Amazon EC2 实例无法访问我的数据库实例
在两个 VPC 之间建立 VPC 对等连接。VPC 对等连接允许两个 VPC 使用私有 IP 地址相互通信。
1. 建立并接受 VPC 对等连接。
**重要提示:**如果多个 VPC 位于同一个 AWS 账户中,请确保 IPv4 CIDR 数据块并不重叠。有关更多信息,请参阅 VPC 对等连接限制。
2. 更新两个路由表。
3. 更新您的安全组以引用对等 VPC 组。
4. 为您的 VPC 对等连接激活 DNS 解析支持。
5. 在 Amazon Elastic Compute Cloud(Amazon EC2)实例上,使用联网实用工具测试 VPC 对等连接。请参阅以下示例:
nc -zv <hostname> <port>
如果连接正常,则输出将类似于如下内容:
$ nc -zv myexampledb.xxxx.us-east-1.rds.amazonaws.com 5439
found 0 associations
found 1 connections:
1: flags=82<CONNECTED,PREFERRED>
outif en0
src xx.xxx.xxx.xx port 53396
dst xx.xxx.xxx.xxx port 5439
rank info not available
TCP aux info available
Connection to myexampledb.xxxx.us-east-1.rds.amazonaws.com port 5439 [tcp/*] succeeded!
相关信息
在 VPC 中访问数据库实例的方案
在 VPC 中使用数据库实例