如何使用Python连接Aurora PostgreSQL Serverless实例
兼容PostgreSQL的Amazon Aurora连接超时问题解决方案
你收到的Connection timed out报错本质是网络层面无法到达Aurora实例,和你代码中的鉴权逻辑没有直接关联,可按以下顺序排查解决:
- 确认Aurora实例的网络访问属性
你解析得到的实例IP为172.31.10.129,属于AWS VPC私有网段,默认不允许公网访问:
检查运行Python代码的设备是否和Aurora实例在同一个VPC内:如果是本地设备运行代码,默认无法直接访问私有VPC内的Aurora实例,需要先通过VPN、VPC对等连接打通网络,或者将Aurora实例配置为公网可访问。
若需要公网访问,进入RDS控制台实例配置页,将「公共可访问性」选项设为「是」,开启后实例会分配公网IP地址。
- 校验安全组入站规则
Aurora实例关联的安全组需要放行客户端IP的5432端口入站请求:
进入RDS控制台找到对应Aurora实例,查看关联的安全组配置,添加入站规则:协议选择TCP,端口填5432,源地址填运行代码设备的公网IP(同VPC内访问则填对应设备的私有IP或所属VPC网段)。
- 检查子网路由配置
公网访问场景下,需要确认Aurora实例所在子网关联的路由表存在指向互联网网关(IGW)的公网路由,否则公网流量无法正常往返。 - 修复代码存在的问题
当前代码有两处需要修正:
- SQL执行语句缺少闭合括号,原代码
cur.execute("""SELECT now()"""需要修改为cur.execute("""SELECT now()"""),否则后续执行会触发语法错误。 - 如果你使用IAM数据库身份认证(即当前通过
generate_db_auth_token生成token的方式),需要先给数据库账号postgres授予IAM认证权限,对应SQL语句如下:
CREATE USER postgres WITH LOGIN; GRANT rds_iam TO postgres;
若暂时不需要IAM认证,可直接用你预设的数据库密码
PASS替换psycopg2.connect中的password=token参数,先测试网络连通性再配置鉴权逻辑,降低排查复杂度。
- 预校验网络连通性
调试代码前先用工具确认端口连通性,避免反复运行代码排查:
Windows设备可在cmd运行:telnet assetsintel.cluster-cjeiapuahe69.us-east-1.rds.amazonaws.com 5432
Linux/Mac设备可运行:nc -zv assetsintel.cluster-cjeiapuahe69.us-east-1.rds.amazonaws.com 5432
如果返回连通成功再运行Python代码,否则继续排查上述网络配置。
内容的提问来源于stack exchange,提问作者Mobin Al Hassan
相关产品推荐
相关产品推荐

