无法通过PostgreSQL与SQLAlchemy连接AWS RDS问题求助
AWS RDS PostgreSQL连接超时问题解决
问题详情
通过AWS Easy Create(默认配置)创建RDS PostgreSQL实例,已开启Publicly accessible,但使用FastAPI结合SQLAlchemy连接时出现超时错误。
连接代码
from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker SQLALCHEMY_DATABASE_URL = "postgresql://USER:PASSWORD@HOST/DB" engine = create_engine(SQLALCHEMY_DATABASE_URL) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) Base = declarative_base()
错误信息
conn = _connect(dsn, connection_factory=connection_factory, **kwasync) sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) connection to server at "database-1.cshqjmfxxxxx.eu-central-1.rds.amazonaws.com" (3.72.174.85), port 5432 failed: Connection timed out (0x0000274C/10060) Is the server running on that host and accepting TCP/IP connections?
实例配置截图

排查与修复步骤
- 检查安全组入站规则:
RDS实例的安全组必须允许应用所在IP访问5432端口。进入RDS控制台实例详情页,找到关联的安全组,编辑入站规则:- 规则类型选
PostgreSQL,协议TCP,端口5432 - 源地址填写应用服务器的公网IP(测试阶段可临时用
0.0.0.0/0,生产环境务必限制具体IP段)
- 规则类型选
- 验证连接参数正确性:
确认SQLALCHEMY_DATABASE_URL中的HOST是RDS实例的完整端点地址(而非IP),用户名、密码、数据库名完全匹配实例配置。 - 测试网络连通性:
在应用服务器上执行nc -zv <RDS端点> 5432或telnet <RDS端点> 5432,如果无法连通,说明网络层面存在拦截,优先排查安全组和VPC网络ACL。 - 确认实例状态:
检查RDS实例是否处于可用状态,排除实例创建中、维护中的情况。 - 核对数据库权限:
确保连接使用的数据库用户拥有CONNECT权限,可通过RDS控制台的查询编辑器登录验证。
内容的提问来源于stack exchange,提问作者Younes Khellaf
相关产品推荐
相关产品推荐

