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

使用Terraform for循环遍历CSV文件及Invalid reference报错解决

报错原因

你收到的报错是因为代码中没有提前声明data.azurerm_resources.spokes数据源,Terraform无法找到对应的资源实例,因此抛出无效引用错误。

解决步骤

1. 声明缺失的数据源

首先补充azurerm_resources数据源定义,筛选你需要的VNet资源,按需补充筛选条件保证返回的资源是你需要的3个VNet:

data "azurerm_resources" "spokes" {
  type = "Microsoft.Network/virtualNetworks"
  # 可选补充筛选条件,比如指定资源组、标签等,缩小返回范围
  # resource_group_name = "你的资源组名称"
}

2. 实现CSV region列值替换

通过映射表匹配CSV中原有region值和datalist返回的新值,遍历替换即可:

locals {
  # 读取CSV文件
  vnetlist = csvdecode(file("./title.csv"))
  # 获取现有VNet名称列表
  datalist = [for vnets in data.azurerm_resources.spokes.resources : vnets.name]
  # 构建新旧region映射关系,这里假设CSV中region顺序为us/er/ind,刚好对应datalist返回的regA/regB/regC
  region_map = zipmap(["us", "er", "ind"], local.datalist)
  # 如果你不能保证返回顺序固定,也可以手动写死映射表更稳妥:
  # region_map = {
  #   us  = "regA"
  #   er  = "regB"
  #   ind = "regC"
  # }
  # 遍历替换region列的值
  finopslist = [
    for row in local.vnetlist : merge(row, {
      region = lookup(local.region_map, row.region, row.region)
    })
  ]
}

3. 验证结果

可以添加输出块查看替换后的结果:

output "replaced_finops_list" {
  value = local.finopslist
}

运行terraform plan即可查看替换后的输出,确认符合预期后再执行后续操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:15:02