我有一个正在运行的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提供程序;)