Terraform通过堡垒机连接Aurora PostgreSQL RDS超时,如何解决?
解决Terraform Cloud连接Aurora PostgreSQL超时问题
核心问题分析
你当前在本地堡垒机建立的是本地端口转发,仅能让本地机器通过127.0.0.1:5432访问RDS,但Terraform Cloud是远程执行环境,无法复用这个本地隧道,导致直接连接堡垒机5432端口超时。
推荐解决方案:用PostgreSQL Provider内置SSH隧道
PostgreSQL Provider支持直接配置SSH隧道,让Terraform Cloud自行建立到堡垒机的连接并转发到RDS,无需依赖本地隧道。
修改Provider配置
# 定义敏感变量存储SSH私钥(在Terraform Cloud Workspace中配置) variable "ssh_private_key" { type = string sensitive = true } provider "postgresql" { host = "my-rds-instance" # 填RDS实际端点,不是堡垒机 port = 5432 database = "postgres" username = "some-user" password = module.db.cluster_master_password sslmode = "require" connect_timeout = 15 # 配置SSH隧道 ssh_host = "my-bastion-hostname" ssh_port = 22 # 堡垒机SSH默认端口,按需修改 ssh_user = "ec2-user" ssh_private_key = var.ssh_private_key }
配置Terraform Cloud
- 进入对应Workspace的Variables页面
- 添加敏感环境变量
ssh_private_key,值为你的SSH私钥内容(不要带文件路径)
备选方案:改用远程端口转发
如果不想修改Provider配置,可将本地端口转发改为远程端口转发,让堡垒机对外暴露转发端口给Terraform Cloud:
修改SSH隧道命令
ssh -R 5432:my-rds-instance:5432 my-bastion-hostname -i ~/.ssh/some-key -l ec2-user -N
-R:将堡垒机的5432端口转发到RDS实例-N:仅建立隧道,不执行远程命令
配套检查项
- 堡垒机安全组:放行Terraform Cloud的IP访问5432端口
- RDS安全组:放行堡垒机的私有IP访问5432端口
- 堡垒机本地防火墙:确保iptables/ufw等允许5432端口入站
额外排查步骤
- 验证Terraform Cloud IP连通性:在Terraform中添加
null_resource执行telnet my-bastion-hostname 22(用方法1时)或telnet my-bastion-hostname 5432(用方法2时),排查端口是否可达 - 测试堡垒机到RDS的连通性:在堡垒机上执行
psql -h my-rds-instance -p 5432 -U some-user postgres,确认能正常连接 - 检查安全组规则:确保所有入站/出站规则的IP、端口配置无错误
内容的提问来源于stack exchange,提问作者Kaleby Cadorin
相关产品推荐
相关产品推荐

