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

如何用Terraform从源代码部署Google Cloud Run服务?

最简Terraform转换方案

要把gcloud run deploy webserver --source webserver/转换成Terraform配置,核心是拆分原命令的两个核心步骤:构建容器镜像和部署Cloud Run服务,以下是原生Terraform实现的最简方式:

1. 准备容器镜像存储(Artifact Registry)

首先需要一个Artifact Registry仓库来存放构建好的镜像(已有可用仓库可跳过此步骤):

resource "google_artifact_registry_repository" "cloud_run_images" {
  project        = var.project_id
  location       = var.region
  repository_id  = "cloud-run-images"
  format         = "DOCKER"
}

2. 用Cloud Build构建镜像

通过google_cloud_build_build资源模拟gcloud builds submit --pack的构建逻辑,从本地源代码构建镜像并推送到Artifact Registry:

resource "google_cloud_build_build" "webserver_image" {
  project  = var.project_id
  location = var.region

  # 指定构建的源代码目录,对应原命令的webserver/
  source {
    dir = "./webserver"
  }

  # 用buildpacks构建镜像,等效于gcloud builds submit的--pack参数
  steps {
    name = "gcr.io/buildpacks/builder:v1"
    args = [
      "build",
      "${google_artifact_registry_repository.cloud_run_images.repository_url}/webserver:latest",
      "--builder=gcr.io/buildpacks/builder:v1",
      "--path=."
    ]
  }

  service_account = "projects/${var.project_id}/serviceAccounts/${var.project_id}@cloudbuild.gserviceaccount.com"

  # 确保仓库创建完成后再执行构建
  depends_on = [google_artifact_registry_repository.cloud_run_images]
}

3. 部署Cloud Run服务

用google_cloud_run_service资源部署服务,引用刚构建好的镜像:

resource "google_cloud_run_service" "webserver" {
  project     = var.project_id
  location    = var.region
  name        = "webserver"

  template {
    spec {
      containers {
        image = "${google_artifact_registry_repository.cloud_run_images.repository_url}/webserver:latest"
        # 可添加容器配置,比如环境变量、资源限制等
      }
    }
  }

  # 等待镜像构建完成后再部署
  depends_on = [google_cloud_build_build.webserver_image]

  # 对应原命令的--other-flags,示例:允许未认证访问
  traffic {
    percent         = 100
    latest_revision = true
  }

  lifecycle {
    # 源代码变化时触发重新构建部署
    replace_triggered_by = [google_cloud_build_build.webserver_image.id]
  }
}

补充说明

  • 若项目已配置好Cloud Build服务账号的镜像推送权限,上述配置无需额外调整;
  • 若想快速适配,也可以用local-exec直接调用原gcloud命令,但原生Terraform资源的方式更符合基础设施即代码的状态管理原则;
  • 替换代码中的var.project_id、var.region为你的实际项目ID和区域,或通过Terraform变量传入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:00:59