Gon*_*nca 2 postgresql google-cloud-sql terraform terraform-provider-gcp
我是 Terraform 的新手,我想为postgres在 Google Cloud SQL 上的 PostgreSQL 9.6 实例上创建的数据库创建架构。
要创建PostgreSQL实例我有这个main.tf:
resource "google_sql_database_instance" "my-database" {
name = "my-${var.deployment_name}"
database_version = "POSTGRES_9_6"
region = "${var.deployment_region}"
settings {
tier = "db-f1-micro"
ip_configuration {
ipv4_enabled = true
}
}
}
Run Code Online (Sandbox Code Playgroud)
我试图创建一个PostgreSQL这样的对象:
provider "postgresql" {
host = "${google_sql_database_instance.my-database.ip_address}"
username = "postgres"
}
Run Code Online (Sandbox Code Playgroud)
最后创建架构:
resource "postgresql_schema" "my_schema" {
name = "my_schema"
owner = "postgres"
}
Run Code Online (Sandbox Code Playgroud)
但是,这个配置不起作用,我们运行terraform plan:
Inappropriate value for attribute "host": string required.
Run Code Online (Sandbox Code Playgroud)
如果我删除Postgres对象:
Error: Error initializing PostgreSQL client: error detecting capabilities: error PostgreSQL version: dial tcp :5432: connect: connection refused
Run Code Online (Sandbox Code Playgroud)
此外,我想postgres为创建 PostgreSQL 实例时默认创建的用户添加密码。
编辑: 使用的版本
Terraform v0.12.10
+ provider.google v2.17.0
+ provider.postgresql v1.2.0
Run Code Online (Sandbox Code Playgroud)
有什么建议?
您上面的 terraform 设置存在一些问题。
resource "google_sql_database_instance" "my-database" {
name = "my-${var.deployment_name}"
database_version = "POSTGRES_9_6"
region = "${var.deployment_region}"
settings {
tier = "db-f1-micro"
ip_configuration {
ipv4_enabled = true
authorized_networks {
name = "all"
value = "0.0.0.0/0"
}
}
}
depends_on = [
"google_project_services.vpc"
]
}
Run Code Online (Sandbox Code Playgroud)
resource "google_sql_user" "user" {
name = "test_user"
instance = "${google_sql_database_instance.my-database.name}"
password = "VeryStrongPassword"
depends_on = [
"google_sql_database_instance.my-database"
]
}
Run Code Online (Sandbox Code Playgroud)
provider "postgresql" {
host = "${google_sql_database_instance.my-database.public_ip_address}"
username = "${google_sql_user.user.name}"
password = "${google_sql_user.user.password}"
}
resource "postgresql_schema" "my_schema" {
name = "my_schema"
owner = "test_user"
}
Run Code Online (Sandbox Code Playgroud)
所有提供程序都在计划/应用开始时初始化,因此如果配置无效(在本例中为空主机),Terraform 将失败。没有办法定义一个提供者和另一个提供者内的资源之间的依赖关系。然而,有一个使用target 参数 的解决方法
terraform apply -target=google_sql_user.user
这将创建数据库用户(以及它的所有依赖项 - 在这种情况下是数据库实例),一旦完成,请执行以下操作:
terraform apply
这应该会成功,因为实例已经创建并且 ip_address 可供 postgres 提供者使用。
最后说明:不建议在生产实例中使用没有 SSL 的公共 ip 地址连接到 Cloud SQL 实例。
| 归档时间: |
|
| 查看次数: |
1866 次 |
| 最近记录: |