AWS RDS 的 Terraform Postgresql 提供程序错误:"dial tcp 127.0.0.1:5432: connect: connection refused"



我有一个正在运行的Terraform基础设施,它配置了一个Aurora-postgresql无服务器RDS数据库。它还使用postgresql provider来配置数据库角色,例如使用postgresql_role资源和其他资源。

我需要销毁这个RDS无服务器数据库,并用一个已配置的数据库替换它。

我已经更新了TFaws_rds_cluster资源,当尝试使用terraform apply将其与我的新provisioned配置一起部署时,我得到postgresql provider资源的以下错误(未更改):

Error: could not start transaction: dial tcp 127.0.0.1:5432: connect: connection refused
│ 
│   with postgresql_database.testdb,
│   on main.aws.db.tf line 54, in resource "postgresql_database" "testdb":
│   54: resource "postgresql_database" "testdb" {
│ 
╵
╷
│ Error: dial tcp 127.0.0.1:5432: connect: connection refused
│ 
│   with postgresql_role.materialized_view_owner,
│   on main.aws.db.tf line 62, in resource "postgresql_role" "materialized_view_owner":
│   62: resource "postgresql_role" "materialized_view_owner" {

这似乎表明提供程序无法连接到数据库或使用了不正确的端点。然而,无服务器数据库正在运行,并且提供程序被配置为使用它的端点作为host。在错误出现的那一刻,Terraform还没有看到aws_rds_cluster从无服务器到预置。

下面的提供商配置:

provider "postgresql" {
host      = aws_rds_cluster.postgresql.endpoint
port      = 5432
database  = aws_rds_cluster.postgresql.database_name
username  = aws_rds_cluster.postgresql.master_username
password  = aws_rds_cluster.postgresql.master_password
sslmode   = "require"
superuser = false
expected_version = "10.18"
}

我真的不知道是什么原因引起的。有人能帮帮忙吗?谢谢!

编辑:为@Marcin的每个请求添加资源定义

postgresql provider resources:

resource "postgresql_database" "testdb" {
name = "testdb"
}
resource "postgresql_role" "view_owner" {
name  = "view_owner"
login = false
}
resource "postgresql_grant" "view_owner" {
database    = postgresql_database.testdb.name
role        = postgresql_role.view_owner.name
object_type = "table"
schema      = "public"
privileges  = ["SELECT"]
}
resource "postgresql_default_privileges" "view_owner" {
database = postgresql_database.testdb.name
role     = postgresql_role.view_owner.name
schema   = "public"
owner       = aws_rds_cluster.postgresql.master_username
object_type = "table"
privileges  = ["SELECT"]
}
resource "postgresql_grant_role" "view_owner_master_user" {
role              = aws_rds_cluster.postgresql.master_username
grant_role        = postgresql_role.view_owner.name
with_admin_option = true
}

为了解决这个问题,我使用terraform apply -target=aws_rds_cluster.postgresql来部署DB集群更改,然后发现我的TF RDS配置存在另一个问题。Aurora集群已经创建,但是我没有意识到我还需要为实例指定一个单独的TF资源。修复后,我重新运行了完整的TF应用,没有任何目标,postgresql provider错误消失了。

感谢@MartinAtkins帮助调试这个问题

当我忘记添加postgresql提供程序时,我得到了这个错误的非常相似的版本。这是谷歌上的第一次点击,所以我把它贴在这里,以防其他人正在调试这个错误:

Error: error detecting capabilities: error PostgreSQL version: dial tcp [::1]:5432: connect: connection refused

检查是否有postgresql提供程序;)

相关内容

最新更新