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

Terraform构造列表时筛选Azure区域以提取主区域的实现问询

实现逻辑

你可以用Terraform内置的reduce函数实现带状态的遍历筛选:按输入列表顺序逐个检查区域,只要当前区域的配对没有被提前标记为排除,就将它加入主区域列表,同时把它的配对区域加入排除集合,后续遇到配对区域时直接跳过。

完整代码实现

locals {
  # 原有区域配对映射,按需补充所有用到的区域即可
  pairs = {
    # 欧洲区域
    northeurope        = "westeurope"
    westeurope         = "northeurope"

    # 英国区域
    uksouth            = "ukwest"
    ukwest             = "uksouth" 
  }

  # 迭代筛选逻辑
  primary_calc = reduce(
    # 初始状态:保存已选中的主区域列表、已排除的配对区域集合
    { primaries = [], excluded = [] },
    var.locations,
    (prev, curr) => {
      if !contains(prev.excluded, curr)
      then {
        primaries = concat(prev.primaries, [curr])
        excluded  = concat(prev.excluded, [local.pairs[curr]])
      }
      else prev
    }
  )

  # 最终输出的主区域列表
  primaries = local.primary_calc.primaries
}

效果验证

该实现完全覆盖你给出的所有测试场景:

  • 输入["westeurope"],输出["westeurope"]
  • 输入["northeurope", "westeurope"],输出["northeurope"]
  • 输入["westeurope", "uksouth", "northeurope"],输出["westeurope", "uksouth"]
  • 其余场景均符合预期规则

兼容优化(可选)

如果存在没有配置配对的区域,可以把local.pairs[curr]替换为lookup(local.pairs, curr, "${curr}_non_exist_pair"),避免取值报错,未配对的区域会直接作为主区域保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:45:05