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

使用Terraform创建GCloud容器Registry报错,求可用示例

解决Terraform 0.11.x中GCR数据源的语法报错问题

我之前在Terraform 0.11版本里也碰到过这个一模一样的错误!问题出在官方文档的示例是针对Terraform 0.12+版本编写的,而0.11的语法规则更严格,尤其是data块的格式和变量插值方式,直接照搬新版本示例就会触发报错。

报错原因拆解

Terraform 0.11对data块的格式有硬性要求:必须严格遵循 data "资源类型" "资源名称" { ... } 的结构,少了资源名称或者语法不符合规范,就会抛出'data' must be followed by exactly two strings: a type and a name错误。另外,0.11不支持0.12+的裸变量引用(比如直接写var.project),所有变量插值必须用${}包裹。

适用于Terraform 0.11.x的可用参考示例

下面是经过验证、可以在v0.11.2/0.11.3中正常运行的GCR仓库配置代码:

1. 先配置兼容0.11的Google Provider

provider "google" {
  version = "~> 2.90.0" # 2.x系列Provider完全兼容Terraform 0.11,3.x及以上只支持0.12+
  project = "${var.gcp_project_id}"
  region  = "${var.gcp_region}"
}

2. 定义GCR仓库数据源

  • 如果要获取项目默认的GCR仓库(即gcr.io/[你的项目ID]):
data "google_container_registry_repository" "default_registry" {
  project = "${var.gcp_project_id}"
  name    = "${var.gcp_project_id}" # 默认仓库的名称就是项目ID本身
}
  • 如果要获取自定义名称的GCR仓库(比如gcr.io/[项目ID]/my-custom-repo):
data "google_container_registry_repository" "custom_registry" {
  project = "${var.gcp_project_id}"
  name    = "${var.gcp_project_id}/my-custom-repo"
}

3. 输出仓库信息(可选)

output "default_registry_url" {
  value = "${data.google_container_registry_repository.default_registry.self_link}"
}

output "custom_registry_url" {
  value = "${data.google_container_registry_repository.custom_registry.self_link}"
}

额外注意事项

  • 执行terraform init时,Terraform会自动下载指定版本的Provider,确保网络环境能正常访问GCP的镜像源。
  • 所有变量引用必须用${}包裹,这是0.11版本的强制要求,不能省略。

内容的提问来源于stack exchange,提问作者Ruwan Ranganath Senarathne

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:28:45