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

