如何用Terraform迭代JSON批量创建Azure应用配置密钥?
解决Terraform Azure应用配置键迭代错误
错误原因
当前for_each写法存在两个核心问题:
- 循环表达式逻辑错误,返回的是整个
local.appConfigData元组,而非单个元素 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
相关产品推荐
相关产品推荐

