如何使用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
相关产品推荐
相关产品推荐

