AWS RDS 的 Terraform Postgresql 提供程序错误:“拨号 tcp 127.0.0.1:5432:连接:连接被拒绝”

问题描述 投票:0回答:3

我有一个正在运行的 Terraform 基础设施,它配置了

Aurora-postgresql
无服务器 RDS 数据库。它还使用
postgresql provider
配置数据库角色,例如使用
postgresql_role
资源等。

我需要销毁这个 RDS 无服务器数据库并将其替换为预配置的数据库。

我已更新 TF

aws_rds_cluster
资源,当尝试使用
provisioned
使用新的
terraform apply
配置来部署它时,我收到以下
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 提供者资源:

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
}
postgresql amazon-web-services terraform amazon-rds terraform-provider-aws
3个回答
0
投票

为了解决此问题,我使用

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

感谢@MartinAtkins 帮助调试问题


0
投票

当我忘记添加 postgresql 提供程序时,我得到了与此错误非常相似的版本。这是 Google 上的第一次点击,因此我将其发布在此处,以防其他人正在调试此错误:

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

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


0
投票

谢谢@MartinAtkins,你的

-target
建议...让我摆脱了困境,在经历了一早上的头痛之后,想知道我做了什么。我遇到了完全相同的问题,但是使用的是 Azure PostgreSQL 灵活服务器。甚至没有意识到您可以隔离从 Terraform 脚本到目标资源的更改...肯定会将其保留在我的备忘单中👍

© www.soinside.com 2019 - 2024. All rights reserved.