无法从本地连接VPC内RDS实例,如何确保其部署在公网子网?
AWS RDS 公网访问与子网部署问题解答
问题场景
我在包含3个公网子网和3个私网子网的VPC中创建了2个RDS实例,均开启了“公网可访问”选项,但仅能从本地电脑连接其中一个,另一个仅能通过VPC内的EC2实例访问。推测一个RDS实例位于公网子网,无法本地访问的那个位于私网子网。
核心问题:
- 创建RDS实例时能否确保其部署在公网子网?
- 若不能,能否在不将私网子网改为公网子网的前提下,将该实例迁移至公网子网?
目前临时解决方案:新建了仅含公网子网的VPC并重新创建了RDS实例。
解答
1. 创建时确保RDS部署在公网子网的方法
RDS实例创建时无法直接指定具体子网,但可以通过自定义RDS子网组实现精准控制:
- 提前创建一个仅包含公网子网的RDS子网组(创建子网组时,只勾选VPC内的公网子网)
- 创建RDS实例时,选择这个自定义子网组,RDS会从该子网组的公网子网中分配部署位置(多AZ实例会跨子网,但均为你指定的公网子网)
- 同时确保开启“公网可访问”选项,且公网子网已关联互联网网关(IGW)的路由表,此时RDS会自动分配弹性公网IP(EIP),支持本地直接访问。
2. 不修改私网子网的前提下迁移RDS到公网子网的方案
已部署在私网子网的RDS无法直接迁移子网,但可以通过以下两种方式实现迁移,且完全不会影响原有私网子网内的EC2实例:
- 方式一:创建只读副本并切换
- 针对目标RDS实例创建只读副本,创建时选择提前建好的公网子网组
- 等待副本数据同步完成后,将业务应用切换到只读副本
- 若原实例是单AZ部署,可将只读副本提升为独立的主实例,之后删除原私网子网内的RDS实例
- 方式二:快照恢复新实例
- 给私网子网内的RDS实例创建手动快照
- 使用该快照恢复新的RDS实例,恢复时选择公网子网组并开启“公网可访问”
- 验证新实例数据正常后,切换业务应用到新实例,再删除原实例
补充说明
你遇到的“开了公网可访问但无法本地连接”的问题,本质是私网子网没有关联IGW的路由表——即使开启公网访问选项,RDS也无法获取公网IP,因此只能被VPC内资源访问;而公网子网有IGW路由,开启公网访问后会分配EIP,支持外部直接连接。
内容的提问来源于stack exchange,提问作者user3684747
相关产品推荐
相关产品推荐

