使用Terraform部署GCP架构时遇到Computed attributes无法设置及资源引用错误的问题排查
问题分析与修复方案
让我们逐个拆解并解决你遇到的三个错误:
1. 计算属性不能手动赋值的问题
Terraform的数据源(data块)中,**计算属性(Computed Attributes)**是Terraform读取数据源后自动生成的结果,你不能在数据源配置里手动为这些属性赋值。
看你的data "google_organization" "org"块,org_id和directory_customer_id都属于这类计算属性,所以你不能把它们作为输入参数设置。这个数据源的正确用法是只指定一个查询条件:要么用domain,要么用org_id。比如你已经知道组织ID,就只保留org_id = var.organization.id,删掉domain和directory_customer_id的配置;如果只知道域名,就保留domain = var.organization.display_name即可。
2. 资源引用路径错误
在google_folder.shared的parent字段中,你写了google_organization.org_id,这是错误的引用方式。正确的引用应该是google_organization.org.org_id——因为你的数据源名称是org,必须通过「数据源名称.属性名」的格式来访问它的输出属性。
修正后的完整代码
terraform { required_providers { google = { source = "hashicorp/google" version = "3.85.0" } } } provider "google" { credentials = file(var.credentials_file) region = var.region zone = var.zone } # 修正:只保留一个查询条件,移除计算属性的赋值 data "google_organization" "org" { # 二选一即可,根据你实际拥有的信息选择 # domain = var.organization.display_name org_id = var.organization.id } resource "google_folder" "shared" { display_name = "Shared" # 修正:正确引用数据源的org_id属性 parent = google_organization.org.org_id } resource "google_folder" "ddm" { display_name = "Data and Digital Marketing" parent = google_folder.shared.name } resource "google_folder" "dtl" { display_name = "DTL" parent = google_folder.ddm.name }
额外说明
- 如果你不确定该用
domain还是org_id,可以先单独执行terraform plan测试其中一个,看是否能正确读取到你的组织信息。 google_folder的parent字段接受组织ID或父文件夹ID,google_organization.org.org_id返回的是GCP组织的完整ID(格式类似organizations/123456789),完全符合要求。
内容的提问来源于stack exchange,提问作者Imad
相关产品推荐
相关产品推荐

