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

如何通过Terraform将公开Docker镜像上传至GCP Artifact Registry

用Terraform将公开Dummy镜像同步到GCP Artifact Registry

Terraform本身没有原生的镜像拉取/推送资源,但可以结合local-exec调用gcloud命令实现公开镜像到自有Artifact Registry的复制,刚好满足Cloud Run初始化的需求。以下是具体实现步骤:

核心思路

利用gcloud artifacts docker images copy命令直接跨仓库复制镜像,通过Terraform的null_resource触发这个命令,并让Cloud Run服务依赖该操作完成初始化。

完整代码示例

1. (可选)创建Artifact Registry仓库

如果还未搭建自己的镜像仓库,先通过Terraform创建:

resource "google_artifact_registry_repository" "dummy_repo" {
  location      = "us-central1"
  repository_id = "dummy-images"
  format        = "DOCKER"
}

2. 复制公开Dummy镜像到自有仓库

用null_resource配合local-exec执行镜像复制操作:

resource "null_resource" "copy_dummy_image" {
  triggers = {
    # 仅当仓库地址或源镜像变化时重新执行复制
    repo_url   = google_artifact_registry_repository.dummy_repo.repository_url
    source_img = "gcr.io/google-samples/hello-app:1.0"
  }

  provisioner "local-exec" {
    command = <<EOT
      # 配置Artifact Registry的Docker认证
      gcloud auth configure-docker ${google_artifact_registry_repository.dummy_repo.location}-docker.pkg.dev --quiet
      # 复制公开镜像到自有仓库
      gcloud artifacts docker images copy ${self.triggers.source_img} ${google_artifact_registry_repository.dummy_repo.repository_url}/hello-app:initial --quiet
    EOT
  }
}

3. 基于自有仓库镜像创建Cloud Run服务

让Cloud Run服务依赖镜像复制操作,确保初始化时使用的是自有仓库的镜像:

resource "google_cloud_run_service" "dummy_service" {
  name     = "dummy-service"
  location = "us-central1"

  template {
    spec {
      containers {
        image = "${google_artifact_registry_repository.dummy_repo.repository_url}/hello-app:initial"
      }
    }
  }

  depends_on = [null_resource.copy_dummy_image]
}

注意事项

  • 执行Terraform的本地机器需要安装gcloud SDK,并且已完成GCP认证(可通过gcloud auth application-default login或配置服务账号密钥)
  • triggers字段用于避免每次terraform apply都重复复制镜像,只有当仓库地址或源镜像变更时才会重新执行
  • 后续CI/CD流水线只需推送新镜像到同一仓库的同一镜像名(比如更新hello-app:latest),再更新Cloud Run服务的镜像标签即可完成替换

内容的提问来源于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.21 19:08:16