我已经按照以下步骤创建了安全组和RDS实例:
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实例创建成功,运行后返回RDS端点。
当我尝试使用 DBeaver 连接到 RDS 数据库时,连接超时。我不知道为什么。
我了解我正在通过此 SG 将此数据库公开到公共互联网;我打算在连接正常工作后进一步锁定 CIDR 组。我很困惑为什么我无法连接到给定我附加的安全组的实例。其他人也“建议”同样的解决方案,显然它对他们有用。鉴于我使用 Terraform 配置的内容,我不确定为什么无法连接到我的 RDS 实例。 有人遇到过这样的问题吗?您能分享一下您的解决方案吗?
true
资源上的 publicly_accessible 属性设置为
aws_db_instance
。该设置控制数据库服务器是否获取公共 IP 地址。目前您的数据库没有公共IP地址,因此只能从VPC内部访问。您还需要确保 VPC 子网是公有子网。您似乎没有指定任何子网,所以我猜它将使用默认 VPC,默认情况下仅具有公共子网。