如何解决AppRunner实例连接无公网访问RDS失败的问题?
仅将AppRunner和RDS置于同一VPC及安全组并不足够,以下是具体排查方向:
检查RDS安全组入站规则
即便同属一个安全组,也要确认安全组的入站规则明确允许RDS服务对应的端口(如MySQL的3306、PostgreSQL的5432)流量。如果入站规则用安全组自身作为源,要确认规则是针对目标端口开放,而非仅允许ICMP或其他无关端口;同时避免规则中添加了限制特定IP的条件,导致AppRunner所在子网的流量被拦截。验证AppRunner VPC连接器配置
确认VPC连接器关联的子网与RDS所在子网完全一致,且VPC连接器已启用私有DNS解析功能。可以在AppRunner的运行环境中执行nslookup <你的RDS端点>,若无法解析到私有IP,说明私有DNS未正确配置,需要开启VPC的私有DNS解析选项。确认使用RDS私有端点
RDS禁用公网访问后,控制台显示的端点应为私有域名(通常带有internal后缀),务必使用该私有端点进行连接,不要误用之前的公网端点。检查AppRunner服务的VPC关联状态
确认AppRunner服务在创建或更新时,已正确选择目标VPC连接器并开启VPC访问选项。若仅创建了连接器但未关联到服务,AppRunner仍会使用默认的公网网络环境,无法访问私有VPC内的RDS。排查子网路由表与NACL规则
检查RDS所在子网和AppRunner连接器关联子网的路由表,确保存在内部流量转发的路由(默认VPC通常无需额外配置,但自定义VPC需确认);同时检查网络访问控制列表(NACL),确保允许对应RDS端口的双向流量,避免NACL的拒绝规则拦截了连接请求。测试RDS自身的可访问性
先用同VPC内的EC2实例尝试连接RDS,验证RDS实例处于可用状态且本身可正常访问。若EC2能成功连接,问题集中在AppRunner的配置;若EC2也无法连接,则需排查RDS实例状态或VPC基础网络配置。
内容的提问来源于stack exchange,提问作者Adam A

