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

使用for_each的Terraform GCP项目IAM成员状态导入报错求助

问题:Terraform导入for_each生成的google_project_iam_member资源失败

我用以下Terraform代码为GCP服务账号配置项目权限:

resource "google_project_iam_member" "name_of_sa_project_prod" {
    for_each = toset([
        "roles/bigquery.dataOwner",
        "roles/bigquery.jobUser"
    ])
    role = each.key
    project = google_project.test_prod.project_id
    member = "serviceAccount:${google_service_account.sa_account.email}"
}

更换笔记本后,需要在执行terraform apply前导入资源状态,尝试了以下命令:

terraform import module.module_name.google_project_iam_member.name_bigquery_dev.owner["user:name@project_name.iam.gserviceaccount.comr"] "project_name roles/owner user:sa_name@project-name.iam.gserviceaccount.com"

报错:

Index brackets must contain either a literal number or a literal string.

This character is not used within the language.

又尝试了:

terraform import module.module_name.google_project_iam_member.name_bigquery_dev["roles/bigquery.dataOwner"] "project_name roles/owner user:sa_name@project_name.iam.gserviceaccount.com"

仍然报错:

│ Index brackets must contain either a literal number or a literal string.

官方文档仅给出google_project_iam_binding的导入示例:

terraform import google_project_iam_binding.default "{{project_id}} roles/viewer"

不清楚如何适配我的for_each场景。


解决方案

1. 资源地址规则

使用for_each生成的资源,实例地址格式为:[模块路径].google_project_iam_member.[资源名]["for_each_key"],其中for_each_key就是你定义的角色字符串(比如roles/bigquery.dataOwner)。

2. 正确导入命令格式

google_project_iam_member的导入格式为:

terraform import [资源完整地址] "[项目ID] [角色] [成员标识]"

针对你的场景,需要分别导入两个角色对应的资源实例:

导入roles/bigquery.dataOwner角色

terraform import module.module_name.google_project_iam_member.name_bigquery_dev["roles/bigquery.dataOwner"] "project_name roles/bigquery.dataOwner serviceAccount:sa_name@project_name.iam.gserviceaccount.com"

导入roles/bigquery.jobUser角色

terraform import module.module_name.google_project_iam_member.name_bigquery_dev["roles/bigquery.jobUser"] "project_name roles/bigquery.jobUser serviceAccount:sa_name@project_name.iam.gserviceaccount.com"

3. 错误原因说明

  • 之前的命令中,导入参数里的角色(roles/owner)和资源地址对应的角色不匹配,导致格式校验失败;
  • 首次尝试的命令中成员标识多了一个r(user:name@project_name.iam.gserviceaccount.comr),属于输入错误;
  • 确保资源名(name_bigquery_dev)和模块路径与你的Terraform配置完全一致,避免笔误。

内容的提问来源于stack exchange,提问作者Moseleyi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 20:52:16