Terraform v1.5.4部署GCP网络apply报错:project字段未设置
Terraform Apply 报错:network字段未设置project的解决方法
问题现象
执行terraform apply时,google_compute_route和google_compute_router资源创建失败,报错如下:
module.vpc_module.google_compute_subnetwork.nl_subnet_private_subnet: Creation complete after 25s [id=projects/wms-prod-388716/regions/us-west1/subnetworks/nl-subnet-private-subnet] module.vpc_module.google_compute_router.nl_subnet_private_router: Creating... ╷ │ Error: Invalid value for network: project: required field is not set │ │ with module.vpc_module.google_compute_route.nl_subnet_private_egress_internet, │ on ../../modules/vpc_module/vpc.tf line 19, in resource "google_compute_route" "nl_subnet_private_egress_internet": │ 19: resource "google_compute_route" "nl_subnet_private_egress_internet" { │ Error: Invalid value for network: project: required field is not set │ │ with module.vpc_module.google_compute_router.nl_subnet_private_router, │ on ../../modules/vpc_module/vpc.tf line 25, in resource "google_compute_router" "nl_subnet_private_router": │ 25: resource "google_compute_router" "nl_subnet_private_router" { │
但terraform plan和terraform validate检测结果正常,使用Terraform v1.5.4。
问题原因
当前代码中,google_compute_route和google_compute_router的network字段仅引用了VPC的名称(google_compute_network.nl_prod.name),而这两个资源在未显式指定project参数的情况下,仅传递名称无法让GCP API识别所属项目。子网资源虽同样使用名称,但因显式指定了project参数,所以能正常工作。
解决方案
将network字段的引用从VPC名称改为VPC的self_link或id属性,这两个属性包含完整的项目和网络标识信息,可让API正确识别资源归属。
修改后的代码示例:
修正后的google_compute_route资源
resource "google_compute_route" "nl_subnet_private_egress_internet" { name = "prod-egress-internet" dest_range = "0.0.0.0/0" network = google_compute_network.nl_prod.self_link # 替换为self_link或id均可 next_hop_gateway = "default-internet-gateway" priority = 100 }
修正后的google_compute_router资源
resource "google_compute_router" "nl_subnet_private_router" { name = "nl-subnet-private-router" region = google_compute_subnetwork.nl_subnet_private_subnet.region network = google_compute_network.nl_prod.self_link # 替换为self_link或id均可 }
补充说明
也可以通过在google_compute_route和google_compute_router资源中显式添加project = var.project_id参数解决问题,但使用self_link或id更简洁,它们会自动继承VPC资源的项目信息,避免重复配置。
内容的提问来源于stack exchange,提问作者Devon
相关产品推荐
相关产品推荐

