如何将 Amazon RDS 数据库实例从公有子网移动到同一 VPC 内的私有子网?
上次更新时间:2020 年 12 月 9 日
我有一个位于公有子网的 Amazon Relational Database Service (Amazon RDS) 数据库实例。我想将我的数据库实例从公有子网移动到同一 VPC 中的私有子网,然后将我的数据库实例设为完全私有。我该如何操作?
简短描述
Amazon RDS 不提供更改具有相同 VPC 的数据库实例子网组的选项。但是,您可以使用本文中的解决方法将数据库实例从公有子网移动到私有子网,并将数据库实例设为私有子网。
使用这种方法的优势包括:
- 避免了创建新的数据库实例的需要
- 避免使用快照还原过程
- 最大限度地减少创建新实例和转移流量所涉及的停机时间。您看到的唯一停机时间是故障转移时间。
解决方案
禁用数据库实例上的多可用区部署和公共可访问性
如果您的数据库实例已设置为单可用区且公共可访问性参数设置为否,则可以跳过此步骤,继续下一步以发现您的 IP 地址。
要修改数据库实例以禁用多可用区部署,请执行以下步骤:
- 登录 AWS RDS 控制台。
- 从导航窗格中选择数据库,然后选择您想要修改的数据库实例。
- 选择修改。
- 在修改数据库实例页面中,对于多可用区部署和公共可访问性,选择否。
- 选择继续,然后查看修改摘要。
- 选择立即应用以应用您的更改。
- 查看您的更改,如果正确,请选择修改数据库实例以保存。
发现数据库实例的 IP 地址
在数据库实例恢复到可用状态后,在数据库实例的终端节点上运行 dig 以查找其底层 IP 地址:
dig <rds-endpoint>
输出:
db-RDS-instance.xxxxxxxx.us-east-1.rds.amazonaws.com. 5 IN A 172.39.5.213
从私有 IP 中,您可以找到它正在使用的子网。这是您的主实例使用的子网。
在此示例中,子网 CIDR 列表如下:
- subnet1 -> 172.39.5.0/24
- subnet2 -> 172.39.4.0/24
由于 IP 低于 179.39.5.0/24,因此您可以得出这样的结论:该实例已放置在 subnet1 中。
移除公有子网并在数据库实例上添加私有子网
添加子网组中所需的全部私有子网。此外,从子网组中删除所有公有子网,主实例使用的子网除外。在上面的示例中,您删除了 subnet1 之外的所有内容,因为数据库实例正在使用它。
注意:私有子网是与没有互联网网关路由的路由表关联的子网。
- 登录 Amazon RDS 控制台。
- 从导航窗格中,选择子网组,然后选择与数据库实例关联的子网组。
- 选择编辑。
- 从添加子网部分中,选择要添加的可用区和私有子网。
- 选择要删除的公有子网,然后选择移除。
- 选择保存。
在数据库实例上启用多可用区
修改数据库实例,以启用多可用区部署。新的辅助会在剩余的私有子网之一中启动。
通过故障转移重启数据库实例并禁用多可用区部署
当数据库实例进行故障转移时,使用私有 IP 的辅助实例将成为主实例,公有子网将成为辅助子网。
使用故障转移重新启动数据库实例后,您需要移除现在位于公有子网中的辅助实例。为此,请再次修改数据库实例以禁用多可用区。您可以通过将多可用区部署设置为否来实现此目的。
移除公有子网
- 从子网组中移除剩余的公有子网。
注意:从子网组中移除子网是 RDS 端的配置。它不涉及从 VPC 中删除任何子网。 - 检查子网组中是否只存在私有子网。
- 如果您的数据库实例之前处于多可用区部署中,请再次启用。
此解决方案涉及故障转移和禁用/启用多可用区,因此几乎不需要考虑。有关更多信息,请参阅将数据库实例修改为多可用区部署。
注意:此方法对于 RDS 数据库实例而言非常独特。如果您的数据库实例是 Aurora 集群的一部分,则可以使用克隆选项。或者,您也可以按照本文中的步骤操作,但不应禁用多可用区,而是删除并重新创建读取器。