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

如何使用Terraform从Google Artifact Registry获取Docker镜像?

从Google Artifact Registry获取最新镜像的Terraform配置

由于Terraform Google Provider没有google_artifact_registry_image数据源,我们可以直接构造Artifact Registry镜像地址,结合docker_registry_image数据源获取镜像digest,最终生成带digest的稳定镜像URL(规避tag漂移问题),配置如下:

完整配置代码

# 配置Docker Provider,用于访问Google Artifact Registry
provider "docker" {
  registry_auth {
    address  = "${var.region}-docker.pkg.dev" # Artifact Registry地址格式:<区域>-docker.pkg.dev
    username = "oauth2accesstoken"
    password = data.google_client_config.default.access_token
  }
}

# 获取Google客户端配置,用于生成访问令牌
data "google_client_config" "default" {}

# 定义必要变量,根据实际环境调整
variable "project_id" {
  type = string
}

variable "region" {
  type = string
}

variable "repository_name" {
  type = string # Artifact Registry中的Docker仓库名称
}

locals {
  server_name       = "app" # 目标镜像名称
  # 构造带latest标签的Artifact Registry镜像地址
  ar_image_tagged   = "${var.region}-docker.pkg.dev/${var.project_id}/${var.repository_name}/${local.server_name}:latest"
}

# 获取latest标签镜像的SHA256摘要
data "docker_registry_image" "myapp" {
  name = local.ar_image_tagged
}

# 构造带摘要的稳定镜像URL
locals {
  ar_image_digested = "${var.region}-docker.pkg.dev/${var.project_id}/${var.repository_name}/${local.server_name}@${data.docker_registry_image.myapp.sha256_digest}"
}

# 输出最终的镜像URL
output "docker_latest_image_url" {
  value = local.ar_image_digested
}

关键说明

  • Artifact Registry镜像地址遵循固定格式:区域-docker.pkg.dev/项目ID/仓库名/镜像名:标签,需确保repository_name变量对应你在AR中创建的Docker仓库。
  • 认证逻辑与GCR一致,使用oauth2accesstoken作为用户名,Google客户端access token作为密码,无需额外调整认证方式。
  • 通过docker_registry_image获取镜像digest后生成带摘要的URL,和原GCR逻辑一致,避免latest标签漂移导致的镜像版本不一致问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 10:37:34