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

Terraform合并Log Analytics变量失败:resource_group_name属性不存在

Terraform Log Analytics工作区变量合并错误修复

问题现象

执行Terraform代码时,引用local.laws中的resource_group_name属性触发错误:

│ Error: Unsupported attribute
│ 
│   on modules/loganalytics/main.tf line 17, in data "azurerm_resource_group" "resource_groups":
│   17:   name     = each.value.resource_group_name
│     ├────────────────
│     │ each.value is object with 1 attribute "law-eastus-dev-01"
│ 
│ This object does not have an attribute named "resource_group_name".

错误原因

  1. 合并逻辑缺失:原locals中的merge仅添加了三个新属性,没有将原变量law的属性(如resource_group_name)合并进去,导致生成的对象不包含原有字段。
  2. 语法错误:在locals中错误使用了for_each关键字,正确的映射生成应该直接使用Terraform的for表达式,不需要外层的for_each包装,这导致local.laws的结构完全不符合预期。

修复方案

修正locals中的代码,正确合并原变量属性与新增属性,同时移除错误的for_each关键字:

locals {
  laws = {
    for law in var.log_analytics_workspace : law.name => merge(
      law, # 先传入原对象,保留所有原有属性
      {
        internet_ingestion_enabled = false
        internet_query_enabled     = false
        cmk_for_query_forced       = false
      }
    )
  }
}

关键说明

  • 使用merge(law, { ... })将原工作区对象的所有属性与新增的三个配置项合并,确保生成的对象包含resource_group_name等原有字段。
  • 直接通过for表达式生成以工作区名称为键的映射,不需要额外的for_each包装,这样local.laws的结构符合后续数据源for_each的遍历要求。

修复后的完整代码示例

# 变量定义(保持不变)
variable "log_analytics_workspace" {
  description = "A list of log analytics workspaces and their arguments."
  type = list(object({
    name                               = string
    resource_group_name                = string
    location                           = string
    sku                                = string #Free, PerNode, Premium, Standard, Standalone, Unlimited, CapacityReservation, and PerGB2018. Defaults to PerGB2018.
    retention_in_days                  = number #Possible values are either 7 (Free Tier only) or range between 30 and 730.
    daily_quota_gb                     = number #The workspace daily quota for ingestion in GB. Defaults to -1 (unlimited) if omitted.
    reservation_capacity_in_gb_per_day = number
    tags                               = map(string)
  }))
}

# 修正后的本地值定义
locals {
  laws = {
    for law in var.log_analytics_workspace : law.name => merge(
      law,
      {
        internet_ingestion_enabled = false
        internet_query_enabled     = false
        cmk_for_query_forced       = false
      }
    )
  }
}

# 资源组数据源(保持调用逻辑不变)
data "azurerm_resource_group" "resource_groups" {
  for_each = local.laws
  name     = each.value.resource_group_name
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:01:04