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

如何用Terraform迭代JSON批量创建Azure应用配置密钥?

解决Terraform Azure应用配置键迭代错误

错误原因

当前for_each写法存在两个核心问题:

  1. 循环表达式逻辑错误,返回的是整个local.appConfigData元组,而非单个元素
  2. for_each要求传入字符串集合或映射类型,不能直接使用元组

修正方案

需要将JSON解析后的元组转换为以唯一标识为键的映射,Azure应用配置中key(结合label,若存在)是资源的唯一标识,以此构建映射即可满足for_each的要求。

完整修正代码

locals {
  appConfigData = jsondecode(file("appConfig.json"))
  # 转换为映射,用key+label组合作为唯一键(兼容label为null的场景)
  app_config_map = {
    for item in local.appConfigData : 
    "${item.key}${coalesce(item.label, "")}" => item
  }
}

resource "azurerm_app_configuration_key" "appConfigKey" {
  configuration_store_id = azurerm_app_configuration.appConfiguration.id
  for_each               = local.app_config_map

  key          = each.value.key
  label        = each.value.label # label为null时会自动忽略
  value        = each.value.value
  content_type = each.value.contentType
  # 若需要同步tags,添加以下配置
  tags         = each.value.tags
}

关键说明

  • coalesce(item.label, ""):当label为null时用空字符串替代,确保key+label的组合唯一,避免重复键冲突
  • 映射的键必须是唯一字符串,这样Terraform才能精准跟踪每个资源的状态变化
  • 如果JSON中存在重复的key+label组合,需先清理数据,否则会触发Terraform冲突报错

简化写法(无label场景)

如果你的配置不需要使用label,可以简化映射转换逻辑:

app_config_map = { for item in local.appConfigData : item.key => item }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 22:37:07