Terraform创建的RDS实例无法通过DBeaver连接,求排查方案
RDS Postgres实例连接超时排查方案
问题背景
通过以下Terraform代码创建了安全组和RDS Postgres实例,代码执行成功并获取到RDS端点,但使用DBeaver连接时出现超时。安全组已开放5432端口至0.0.0.0/0,暂时未做严格CIDR限制,相同配置他人可正常连接,需排查解决方法。
resource "aws_security_group" "database" { name = "DB Host" ingress { from_port = 5432 to_port = 5432 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } egress { from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] } } resource "aws_db_instance" "arapbi" { identifier_prefix = "arapbi" engine = "postgres" allocated_storage = 10 instance_class = "db.t4g.micro" db_name = "arapbi" username = var.db_username password = var.db_password vpc_security_group_ids = ["${aws_security_group.database.id}"] skip_final_snapshot = true tags = { Name = "ARAPBI" Tag = "Managed by Terraform" } } output "rds_endpoint" { description = "The endpoint of the RDS instance" value = aws_db_instance.arapbi.endpoint }
排查及解决步骤
- 开启RDS公网访问权限:你的Terraform代码未显式设置
publicly_accessible = true,AWS RDS默认该参数为false,实例不会分配公网IP,即使安全组开放端口也无法从公网连接。需在aws_db_instance资源块中添加该配置,重新部署后重试。 - 确认安全组关联状态:登录AWS控制台进入RDS实例详情页,查看「安全组」字段,确认已正确关联你创建的
DB Host安全组,避免资源关联错误。 - 测试本地端口连通性:在本地终端执行
telnet <rds-endpoint> 5432或nc -zv <rds-endpoint> 5432,检查本地网络是否允许5432端口的出站流量,排查防火墙、代理或VPN的限制。 - 检查RDS实例状态:确保RDS实例处于「可用」状态,只有实例完全就绪后才能接受连接,排除创建中、维护中等异常状态的影响。
- 验证数据库凭证:确认
var.db_username和var.db_password的取值正确,连接DBeaver时输入的用户名、密码与实例创建时一致,避免因凭证错误导致的连接异常。
内容的提问来源于stack exchange,提问作者Evan Volgas
相关产品推荐
相关产品推荐

