首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在默认网络上设置带有私有IP的Terraform GCP PostgreSQL DB

如何在默认网络上设置带有私有IP的Terraform GCP PostgreSQL DB
EN

Stack Overflow用户
提问于 2022-07-21 12:27:48
回答 1查看 205关注 0票数 0

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

我已经成功地部署了这个示例,但是它创建了一个新的vpc网络private-networkhttps://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/sql_database_instance#private-ip-instance

但是我不希望创建一个新的专用网络,我只想使用VPC定义的“默认”网络。我在terraform中尝试过的每个配置通常都会导致(1)错误的语法,或者(2)默认网络已经存在,因此无法创建。

代码语言:javascript
复制
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
    }
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-21 18:46:55

最初的post使用GCP网络的资源。使用资源块总是创建一个新资源,而不是使用已经存在的资源。要查询已经存在的资源的信息,使用data源1总是一个好主意。这里的问题似乎是,GCP没有抱怨创建另一个名为default的网络。例如,在AWS中,如果要尝试这样做,就会出现一个错误,并且您会知道错误的原因。因此,要解决在GCP提供的默认网络中创建DB的问题,只需使用data源就足够了,但是网络的名称必须是正确的。根据注释中的会话,data源块应该如下所示:

代码语言:javascript
复制
data "google_compute_network" "default" {
  name = "default"
}

然后,由于该数据源将id输出为属性2,因此在任何需要它的地方引用该值就足够了:

代码语言:javascript
复制
data.google_compute_network.default.id

此外,SQL DB的文档还指出,必须使用depends_on元参数3。

用于私有IP实例设置,请注意,google_sql_database_instance实际上并不从google_service_networking_connection内插值。您必须显式地添加depends_on引用,如下所示。

1

2

3

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73066179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档