AWS PostgreSQL无法接受TCP/IP连接:Django应用连接故障求助
解决AWS Django应用连接RDS PostgreSQL超时问题
问题背景
在AWS免费平台部署Django应用,配置RDS PostgreSQL后执行migrate时出现连接超时错误:
RuntimeWarning: Got an error checking a consistent migration history performed for database connection 'default': connection to server at "ecommerce.cxu8zbmvaiut.us-east-1.rds.amazonaws.com" (172.31.34.128), port 5432 failed: Connection timed out
Is the server running on that host and accepting TCP/IP connections?
已完成的配置信息:
AWS RDS设置
host: ecommerce.cxu8zbmvaiut.us-east-1.rds.amazonaws.com port: 5432 name: commerce user: hello-world password: ****** Publicly accessible: Yes
Django配置文件
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'commerce', 'USER':config('user'), 'PASSWORD': config('password'), 'HOST': config('host'), 'PORT': config('port') } }
排查与解决步骤
1. 检查RDS安全组入站规则
- 登录AWS控制台,进入目标RDS实例详情页,找到安全组并点击进入配置页面。
- 确认入站规则中,已允许Django应用所在环境的IP/安全组访问5432端口:
- 若应用部署在EC2,添加EC2实例所属安全组ID作为源,端口设为5432,协议选TCP。
- 若为外部测试环境,添加对应公网IP(带
/32前缀)到入站规则,端口5432,协议TCP。 - 注意:生产环境禁止直接开放
0.0.0.0/0到公网,仅测试场景可临时使用。
2. 验证网络可达性
- 在Django应用所在服务器上,执行以下命令测试RDS连接:
若连接失败,说明网络层面存在阻断,回到安全组或VPC配置排查。# 用telnet测试 telnet ecommerce.cxu8zbmvaiut.us-east-1.rds.amazonaws.com 5432 # 或用nc测试 nc -zv ecommerce.cxu8zbmvaiut.us-east-1.rds.amazonaws.com 5432
3. 确认RDS实例状态与参数组
- 检查RDS实例状态是否为Available,创建中或维护状态的实例无法提供连接服务。
- 查看RDS关联的参数组,确认
listen_addresses设为*(允许所有IP连接),port参数值为5432。
4. 验证Django环境变量配置
- 确认
config()加载的环境变量无拼写错误:- 进入Django Shell验证变量值:
python manage.py shell from decouple import config # 假设使用python-decouple加载变量 print(config('user')) print(config('host')) - 确保
HOST变量为完整的RDS端点地址,无多余空格或特殊字符。
- 进入Django Shell验证变量值:
5. 检查VPC内部网络配置(同VPC部署场景)
- 若Django应用与RDS在同一VPC,确认EC2实例与RDS实例处于同一子网,或VPC路由表允许子网间通信。
- 检查VPC网络ACL规则,确保未限制5432端口的出入流量。
内容的提问来源于stack exchange,提问作者Tosin Ayoola
相关产品推荐
相关产品推荐

