在Putty执行python manage.py migrate时遇RDS PostgreSQL连接超时
EC2实例出站规则受限:
别只关注RDS的入站规则,EC2所在安全组可能未开放5432端口的出站流量。检查EC2安全组的出站规则,确认存在允许TCP 5432访问RDS实例IP、VPC CIDR的规则,或临时开放全出站权限用于测试(生产环境按需限制)。RDS公有可访问性变更:
若RDS实例的「公有可访问性」被改为「否」,即便安全组规则正确,EC2也可能无法连通。前往RDS控制台查看实例详情,确认该选项为「是」。EC2内DNS解析失败:
登录EC2后执行nslookup angtradingdb.xxxxxxx.rds.amazonaws.com,验证能否解析出正确的RDS实例IP。若解析失败,检查VPC的DHCP选项集是否使用AWS提供的DNS服务器。RDS实例状态异常:
查看RDS控制台的实例状态,确认是否处于「可用」状态。自动备份、版本升级等操作可能导致实例临时不可访问,需等待状态恢复后重试。安全组源配置错误:
核对RDS入站规则中指向EC2安全组的条目,确认源是EC2实际所在的安全组ID,避免选错其他安全组或输入错误ID。EC2本地防火墙拦截:
EC2系统内的iptables、ufw等防火墙可能拦截了5432端口的出站流量。执行sudo iptables -L或sudo ufw status检查规则,必要时临时关闭防火墙测试。RDS端点/端口变更:
确认Django配置文件DATABASES中的HOST和PORT与RDS控制台显示的端点、端口完全一致,避免因实例重启或手动修改导致配置不匹配。
内容的提问来源于stack exchange,提问作者Vitor Anghêben

