我正在尝试通过Terraform在RDS上创建数据库后,将角色添加到Postgresql数据库。
我有两个不同的模块,一个用于创建RDS实例,另一个用于向其添加新角色。数据库地址是“persistence”模块的输出和“persistenceApplicationRole”模块的输入。问题似乎在于在创建RDS实例之前,Postgresql提供程序已经运行,因此地址为空。
我得到的错误信息是:
Error: Error initializing PostgreSQL client: error detecting capabilities: error PostgreSQL version: dial tcp :5432: connect: connection refused
on ../modules/persistenceApplicationRole/main.tf line 9, in provider "postgresql":
9: provider postgresql {
通过使用
-target=module.persistence
标志单独运行模块可以工作,因为persistenceApplicationRole
一旦创建就会获取数据库地址。我在MySQL提供程序的文档这里找到了一个具有完全相同情况的示例。# module.persistenceApplicationRole
provider postgresql {
host = var.databaseAddress
username = data.external.root_credentials.result["username"]
password = data.external.root_credentials.result["password"]
superuser = false
}
resource "postgresql_role" "application_role" {
name = data.external.application_credentials.result["username"]
password = data.external.application_credentials.result["password"]
login = true
encrypted_password = true
skip_reassign_owned = true
skip_drop_role = true
}
expected_version
字段确实解决了我的问题。 - vladvelaws_db_instance
资源的engine_version
参数。但这对我不起作用;我收到了Error: dial tcp [::1]:0: connect: can't assign requested address
错误信息。 - Jon Burgess