使用Terraform批量创建GCP资源失败问题求助
问题解决:Terraform批量创建GCP项目后无法创建关联资源
问题原因
你当前的代码中,google_project_iam_custom_role 资源的 project 字段传入了 google_project.project_creation[*].id,这是一个包含所有项目ID的列表(tuple),但该字段要求传入单个字符串类型的项目ID,因此触发类型不匹配的报错。
修复方案
给自定义角色资源添加 count 属性,使其与项目资源的数量一一对应,这样每个项目都会生成对应的自定义角色:
resource "google_project" "project_creation" { count = 5 name = "terraform-testing${count.index + 1}" project_id = "terraform-testing${count.index + 1}" } output "gcp_projects" { value = google_project.project_creation[*].id } resource "google_project_iam_custom_role" "role" { # 与项目数量保持一致 count = length(google_project.project_creation) # 绑定到对应索引的项目ID project = google_project.project_creation[count.index].id role_id = "myCustomRole" title = "Bigquery Role" description = "Bigquery Role" # 注意:permissions字段需要填具体权限,不能填预定义角色(如roles/bigquery.admin) permissions = [ "bigquery.datasets.create", "bigquery.tables.create", "bigquery.jobs.create" ] }
额外说明
权限字段纠正:原代码中
permissions = ["roles/bigquery.admin"]是错误的,自定义角色的permissions只能填入具体的权限字符串,不能直接引用预定义角色。如果需要复制预定义角色的权限,可以通过gcloud projects get-iam-policy命令导出权限列表后再填入。批量创建服务账号:如果要在每个项目中创建服务账号,同样使用
count关联项目:
resource "google_service_account" "sa" { count = length(google_project.project_creation) project = google_project.project_creation[count.index].id account_id = "test-sa-${count.index + 1}" display_name = "Test Service Account ${count.index + 1}" }
内容的提问来源于stack exchange,提问作者karthik
相关产品推荐
相关产品推荐

