我有一个正在运行的 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
}
为了解决此问题,我使用
terraform apply -target=aws_rds_cluster.postgresql
仅部署数据库集群更改,然后发现我的 TF RDS 配置存在另一个问题。 Aurora 集群已创建,但我没有意识到我还需要为实例指定单独的 TF 资源。修复此问题后,我重新运行了完整的 TF 应用,没有任何目标,并且 postgresql provider
错误消失了。
感谢@MartinAtkins 帮助调试问题
当我忘记添加 postgresql 提供程序时,我得到了与此错误非常相似的版本。这是 Google 上的第一次点击,因此我将其发布在此处,以防其他人正在调试此错误:
Error: error detecting capabilities: error PostgreSQL version: dial tcp [::1]:5432: connect: connection refused
检查您是否有 postgresql 提供程序 ;)
谢谢@MartinAtkins,你的
-target
建议...让我摆脱了困境,在经历了一早上的头痛之后,想知道我做了什么。我遇到了完全相同的问题,但是使用的是 Azure PostgreSQL 灵活服务器。甚至没有意识到您可以隔离从 Terraform 脚本到目标资源的更改...肯定会将其保留在我的备忘单中👍