如何通过Terraform在GCP默认网络部署带私有IP的PostgreSQL实例
使用Terraform在GCP默认网络部署私有IP PostgreSQL实例
关键问题修正与配置调整
你的配置主要存在3个问题:默认网络名称错误、布尔参数格式错误、重复创建服务对等连接导致报错,以下是修正后的完整配置:
# 读取已存在的默认网络 data "google_compute_network" "default" { name = "default" # 若你的默认网络有自定义名称,请修改此处 } # 预留用于VPC对等连接的IP段(仅当未预留过时需要) resource "google_compute_global_address" "private_ip_address" { 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" { network = data.google_compute_network.default.id service = "servicenetworking.googleapis.com" reserved_peering_ranges = [google_compute_global_address.private_ip_address.name] # 防止Terraform修改/销毁已存在的对等连接 lifecycle { ignore_changes = [network, service] prevent_destroy = true } } 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 # 禁用公网IP,布尔类型参数无需引号 private_network = data.google_compute_network.default.id } } }
核心修正说明
- 网络名称修正:GCP默认网络的默认名称为
default,若你的环境中默认网络有自定义名称,再修改data.google_compute_network.default的name字段。 - 参数格式修正:
disk_autoresize、ipv4_enabled为布尔类型参数,不能用字符串引号包裹,否则会触发配置错误。 - 服务连接生命周期控制:添加
lifecycle规则,避免Terraform尝试修改或销毁已存在的服务对等连接,解决"默认网络已存在"的报错问题。 - 资源创建顺序:保留
depends_on确保服务对等连接完全建立后再创建数据库实例,避免因资源依赖顺序问题导致的部署失败。
内容的提问来源于stack exchange,提问作者Matt - Block-Farms.io
相关产品推荐
相关产品推荐

