You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Copilot部署ECS任务无法连接RDS问题求助

解决AWS Copilot部署ECS任务无法连接RDS PostgreSQL的问题

问题核心分析

错误信息no pg_hba.conf entry for host "x.x.x.x", user "x", database "x", no encryption明确指向:ECS任务发起的未加密数据库连接被RDS PostgreSQL拒绝,而EC2/Lambda等服务的连接默认启用了加密,因此可以正常访问。

解决思路与操作步骤

  • 强制数据库连接使用SSL
    在ECS任务的数据库连接配置中添加SSL强制参数:

    • 如果使用连接字符串,确保包含sslmode=require(例如:postgresql://user:password@rds-host:5432/dbname?sslmode=require)
    • 添加环境变量PGSSLMODE=require,PostgreSQL客户端会自动读取该变量启用加密连接
  • 验证RDS的SSL强制配置
    检查RDS PostgreSQL实例的参数组,确认rds.force_ssl参数设置为1(强制所有连接使用SSL)。如果开启该参数,未加密的连接会直接被拒绝,这是导致ECS任务连接失败的常见原因。

  • 测试ECS任务的连接状态
    使用AWS Copilot CLI进入ECS任务容器执行测试命令:

    # 测试未加密连接(预期报错)
    copilot exec --command "psql 'host=RDS_HOST port=5432 dbname=DB_NAME user=DB_USER sslmode=disable'"
    # 测试加密连接(预期成功)
    copilot exec --command "psql 'host=RDS_HOST port=5432 dbname=DB_NAME user=DB_USER sslmode=require'"
    

    通过对比两次测试结果,可确认是否为加密连接缺失导致的问题。

  • 检查ECS任务的环境变量配置
    确认Copilot部署的ECS任务是否正确配置了数据库连接所需的SSL相关环境变量,避免因变量遗漏导致客户端未启用加密。

  • 确认RDS pg_hba.conf规则(可选)
    虽然同VPC下EC2/Lambda可正常连接,但可通过RDS的describe-db-instances确认pg_hba.conf是否对ECS任务的IP段有特殊限制。不过更可能的原因是RDS强制SSL,而非IP段规则问题。

内容的提问来源于stack exchange,提问作者phybarin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 10:22:20