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

Terraform中AVD主机池与缩放计划关联的循环配置问题

解决方案

要实现缩放计划与对应主机池的关联,核心是让主机池和缩放计划的for_each使用相同的键名,通过键名一一匹配资源ID。以下是具体重构步骤:

1. 重构主机池变量

将分散的4个主机池变量合并为一个统一的map变量,键名和缩放计划变量sp_weekdays的键保持一致:

######################
# HOSTPOOL VARIABLES #
######################
variable "hostpools" {
  type = map(object({
    name                = string
    friendly_name       = string
    description         = string
    type                = string
    max_sessions        = string
    lb_type             = string
  }))
  default = {
    developer_dev = {
      name                = "avdhp-developer-dev-uks-001"
      friendly_name       = "Developer – Development"
      description         = "Hostpool for developers and contractors working in the development environment"
      type                = "Pooled"
      max_sessions        = "8"
      lb_type             = "DepthFirst" 
    }
    developer_prod = {
      name                = "avdhp-developer-prod-uks-001"
      friendly_name       = "Developer – Production"
      description         = "Hostpool for developers and contractors working in the production environment"
      type                = "Pooled"
      max_sessions        = "8"
      lb_type             = "DepthFirst"
    }
    front_office = {
      name                = "avdhp-front-office-uks-001"
      friendly_name       = "Front Office"
      description         = "Hostpool for front office staff"
      type                = "Pooled"
      max_sessions        = "16"
      lb_type             = "BreadthFirst"
    }
    back_office = {
      name                = "avdhp-back-office-uks-001"
      friendly_name       = "Back Office"
      description         = "Hostpool for back office staff"
      type                = "Pooled"
      max_sessions        = "12"
      lb_type             = "DepthFirst"
    }
  }
}

2. 用for_each重构主机池资源

替换原来4个单独的主机池资源,用一个资源块批量创建:

#############
# HOSTPOOLS #
#############
resource "azurerm_virtual_desktop_host_pool" "main" {
  for_each             = var.hostpools
  name                 = each.value.name
  resource_group_name  = var.rg_avd_name
  location             = var.rg_avd_location
  friendly_name        = each.value.friendly_name
  description          = each.value.description
  type                 = each.value.type
  maximum_sessions_allowed = each.value.max_sessions
  load_balancer_type   = each.value.lb_type

  scheduled_agent_updates {
    enabled   = true
    timezone  = "GMT Standard Time"
    schedule {
      day_of_week = "Saturday"
      hour_of_day = "02"
    }
  }
}

3. 修改缩放计划资源的hostpool_id关联

现在缩放计划的for_each键(来自var.sp_weekdays)和主机池的实例键完全匹配,直接通过each.key引用对应主机池的ID即可:

#################
# SCALING PLANS #
#################
resource "azurerm_virtual_desktop_scaling_plan" "sp_weekdays" {
  for_each            = var.sp_weekdays
  name                = each.value.sp_name
  resource_group_name = var.rg_avd_name
  location            = var.rg_avd_location
  friendly_name       = each.value.sp_friendly_name
  description         = each.value.sp_description
  time_zone           = "GMT Standard Time"

  schedule {
    name                                = each.value.sch_name
    days_of_week                        = ["Monday","Tuesday","Wednesday","Thursday","Friday"]
    ramp_up_start_time                  = "07:30"
    ramp_up_load_balancing_algorithm    = each.value.lb_alg
    ramp_up_minimum_hosts_percent       = each.value.ramp_up_min_hosts
    ramp_up_capacity_threshold_percent  = each.value.ramp_up_cap_threshold
    peak_start_time                     = "08:00"
    peak_load_balancing_algorithm       = each.value.lb_alg
    ramp_down_start_time                = "18:00"
    ramp_down_load_balancing_algorithm  = each.value.lb_alg
    ramp_down_minimum_hosts_percent     = "80"
    ramp_down_force_logoff_users        = true
    ramp_down_wait_time_minutes         = "60"
    ramp_down_notification_message      = "Your session will be logged off shortly, please save your work."
    ramp_down_capacity_threshold_percent= "20"
    ramp_down_stop_hosts_when           = "ZeroActiveSessions"
    off_peak_start_time                 = "20:00"
    off_peak_load_balancing_algorithm   = each.value.lb_alg
  }

  host_pool {
    hostpool_id          = azurerm_virtual_desktop_host_pool.main[each.key].id
    scaling_plan_enabled = true
  }
}

注意事项

  • 修正原sp_weekdays变量中front_office的笔误:lg_alg改为lb_alg,否则会导致变量引用错误。
  • 重构后资源结构更简洁,后续新增主机池或缩放计划只需在对应变量的map中添加条目即可,无需修改资源块代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:11:29