You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform部署Cloud Run Direct VPC时提示VPC IP不足及相关疑问

问题原因分析

1. IP不足提示大概率是健康检查失败的连带误报

你的子网配置10.2.0.0/20包含4091个可用IP,完全满足Cloud Run实例的IP需求。错误中的IP不足提示实际是实例启动失败触发的附带错误,核心问题是健康检查未通过,可能的原因包括:

  • 服务账号缺少roles/compute.networkUser权限,无法在子网中创建网络接口
  • 防火墙规则未放行Google健康检查IP段对实例8080端口的访问
  • 虽然使用了官方hello镜像,但容器内部服务未正常监听8080端口(概率较低)

2. 失败修订版本被自动清理

控制台看不到报错中的deployed-run-00032-bmj版本,是因为Cloud Run会自动删除启动失败的临时修订版本,仅保留成功部署的版本,而Terraform会捕获部署过程中的瞬时错误。

3. Terraform持续报错的逻辑

即使控制台收到updateService事件,Terraform默认会等待服务进入稳定状态(所有修订版本就绪、流量正常路由),只要部署流程中出现健康检查失败,就会判定操作失败。

解决方法

一、修复部署核心问题(优先方案)

  1. 给服务账号添加VPC访问权限
    为google_service_account.eventarc账号授予roles/compute.networkUser角色,允许其在目标子网中创建网络接口:
    resource "google_project_iam_member" "cloud_run_network_user" {
      project = data.google_project.project.project_id
      role    = "roles/compute.networkUser"
      member  = "serviceAccount:${google_service_account.eventarc.email}"
    }
    
  2. 配置防火墙规则
    确保子网关联的防火墙规则允许Google健康检查IP段访问实例8080端口:
    • 源IP段:130.211.0.0/22、35.191.0.0/16
    • 目标:子网IP范围10.2.0.0/20
    • 协议端口:TCP:8080

二、让Terraform忽略部署状态(临时方案)

如果需要跳过Terraform对部署状态的检查,可以在google_cloud_run_v2_service资源中添加wait_for_steady_state = false参数,Terraform仅提交更新请求,不再等待部署完成:

resource "google_cloud_run_v2_service" "file_ingestor" {
  project = data.google_project.project.project_id
  name     = "cloudrun"
  location = "us-central1"
  # 添加该参数跳过状态等待
  wait_for_steady_state = false

  template {
    max_instance_request_concurrency = 2
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
      resources {
          limits = {
          cpu    = "4"
          memory = "2048Mi"
        }
      }
    }
    service_account = google_service_account.eventarc.email

    vpc_access {
      network_interfaces {
        network    = google_compute_network.private_network.name
        subnetwork = google_compute_subnetwork.custom_test.name
      }
    }
  }

  lifecycle {
    ignore_changes = [
      client,
      client_version,
      labels["commit-sha"],
      labels["managed-by"],
      template[0].labels["commit-sha"],
      template[0].labels["managed-by"],
      template[0].containers[0].image,
    ]
  }
}

注意:此方案仅让Terraform不等待部署结果,实际部署是否成功需要自行在控制台验证,不推荐作为长期解决方案。

内容的提问来源于stack exchange,提问作者n_prime

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 22:21:00