我试图使用默认网络上带有私有IP的terraform在GCP上设置PostgreSQL DB。请参见GUI等效设置如下:

我已经成功地部署了这个示例,但是它创建了一个新的vpc网络private-network:https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/sql_database_instance#private-ip-instance
但是我不希望创建一个新的专用网络,我只想使用VPC定义的“默认”网络。我在terraform中尝试过的每个配置通常都会导致(1)错误的语法,或者(2)默认网络已经存在,因此无法创建。
data "google_compute_network" "default" {
name = "default-us-west1"
}
resource "google_compute_global_address" "private_ip_address" {
provider = google
name = "private-ip-address"
purpose = "VPC_PEERING"
address_type = "INTERNAL"
prefix_length = 16
network = data.google_compute_network.default.id
}
resource "google_service_networking_connection" "private_vpc_connection" {
provider = google
network = data.google_compute_network.default.id
service = "servicenetworking.googleapis.com"
reserved_peering_ranges = [google_compute_global_address.private_ip_address.name]
}
resource "random_id" "db_name_suffix" {
byte_length = 4
}
resource "google_sql_database_instance" "main" {
name = "test-db"
database_version = "POSTGRES_12"
region = "us-west1"
depends_on = [google_service_networking_connection.private_vpc_connection]
settings {
availability_type = "REGIONAL"
tier = "db-custom-2-8192"
disk_size = "10"
disk_type = "PD_SSD"
disk_autoresize = "true"
ip_configuration {
ipv4_enabled = "false"
private_network = data.google_compute_network.default.id
}
}
}发布于 2022-07-21 18:46:55
最初的post使用GCP网络的资源。使用资源块总是创建一个新资源,而不是使用已经存在的资源。要查询已经存在的资源的信息,使用data源1总是一个好主意。这里的问题似乎是,GCP没有抱怨创建另一个名为default的网络。例如,在AWS中,如果要尝试这样做,就会出现一个错误,并且您会知道错误的原因。因此,要解决在GCP提供的默认网络中创建DB的问题,只需使用data源就足够了,但是网络的名称必须是正确的。根据注释中的会话,data源块应该如下所示:
data "google_compute_network" "default" {
name = "default"
}然后,由于该数据源将id输出为属性2,因此在任何需要它的地方引用该值就足够了:
data.google_compute_network.default.id此外,SQL DB的文档还指出,必须使用depends_on元参数3。
用于私有IP实例设置,请注意,
google_sql_database_instance实际上并不从google_service_networking_connection内插值。您必须显式地添加depends_on引用,如下所示。
https://stackoverflow.com/questions/73066179
复制相似问题