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

Terraform配置AKS时for_each与count条件使用异常解决方案

问题原因

原有配置报错核心是两处写法不符合Terraform语法逻辑:

  • azurerm_subnet数据源的for_each参数接收了布尔类型值local.aks_config.vnet_enabled,但for_each仅支持map、set类型的可迭代集合,直接传布尔值会触发类型校验错误
  • vnet_subnet_id没有做条件分支判断,当vnet关闭时会强制引用不存在的数据源实例,直接触发引用不存在资源的报错
修正后配置
# 仅为开启vnet配置的AKS集群查询对应子网信息
data "azurerm_subnet" "example" {
  for_each = {
    for aks_name, aks_conf in local.aks_config : aks_name => aks_conf
    if aks_conf.vnet_enabled == true
  }

  name                 = each.value.subnet_name
  virtual_network_name = each.value.vnet_name
  resource_group_name  = var.rg-name
}

resource "azurerm_kubernetes_cluster" "example" {
  for_each            = local.aks_config
  name                = each.value.name
  location            = each.value.location
  resource_group_name = var.rg-name
  dns_prefix          = each.value.dns_prefix

  default_node_pool {
    name                = each.value.default_nodepool_name
    node_count          = each.value.default_nodepool_count
    vm_size             = each.value.default_nodepool_size
    enable_auto_scaling = each.value.default_node_pool_autoscale
    min_count           = each.value.default_node_pool_autoscale_min_count
    max_count           = each.value.default_node_pool_autoscale_max_count
    # 按vnet开关状态赋值:开启时取子网ID,关闭时传null
    vnet_subnet_id = each.value.vnet_enabled ? data.azurerm_subnet.example[each.key].id : null
    zones          = each.value.aks_zones
  }

  identity {
    type = "SystemAssigned"
  }

  network_profile {
    network_plugin = each.value.network_plugin
    network_policy = each.value.network_policy
  }
}
逻辑说明
  • 子网数据源通过for表达式做过滤,仅会为vnet_enabled = true的AKS集群生成对应的查询实例,vnet_enabled = false的集群完全不会触发子网查询,满足禁用该数据源的要求
  • vnet_subnet_id通过三目条件运算符做分支判断:当前集群开启vnet时,引用对应子网的资源ID;关闭vnet时直接赋值null,Terraform不会查找不存在的数据源实例,不会触发引用报错
  • 该逻辑完全兼容现有.tfvars的变量结构,不需要调整输入格式:将集群vnet_enabled设为false时自动走kubenet网络方案,设为true并补全vnet、子网相关参数后,自动走Azure CNI网络方案

注:示例tfvars中objectID= ["*********]缺少闭合双引号,实际使用时请补全,否则会触发HCL语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:54:20