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

Terraform动态生成变量文件:supported_regions格式修正求助

解决Terraform生成supported_regions变量格式问题

你的问题出在使用了列表推导式生成结果,而目标是要生成键值对的Map结构。当前代码里的[for region in var.regions : ...]会生成字符串数组,我们需要改用Terraform的映射推导式来构建Map。

修改supported_regions变量的生成逻辑,把列表推导式替换为映射推导式,直接生成键值对:

resource "local_file" "generated_variables" {
  for_each = { for kv in local.distinct_envs_and_regions : "${kv.env}.${kv.region}" => kv }
  content  = <<EOF
variable "supported_regions" { 
  default = ${jsonencode({
      for region in var.regions : 
        "rg-${each.value.env}-${var.project}-${region.region_short}" => region.region_name
    }
  )}
}
variable "region_info" { default = "${each.value.region}" }
variable "project" { default = "${var.project}" }
variable "environment" { default = "${each.value.env}" }
variable "tenant_id" { default = "${var.tenant_id}" }
variable "subscription_id" { default = "${var.subscription_id}" }

variable "common_tags" {
  default = {
    environment = "${each.value.env}"
    project     = "${var.project}"
    managed_by  = "terraform"
  }
}
 EOF
  filename = "../${var.project}-iac/environments/category/${var.environment_category}/${each.value.env}/core/variables_generated.tf"
}

关键修改点:

  1. 将列表推导式的方括号[ ... ]替换为映射推导式的大括号{ ... }
  2. 推导式内使用"键字符串" => 值的格式,直接生成Map的键和对应值,不再拼接等式字符串
  3. 移除了distinct函数(如果var.regions中不会生成重复的键,无需保留;若存在重复键风险,可先对var.regions做去重处理后再进入推导式)

修改后生成的supported_regions变量会符合你的预期格式:

variable "supported_regions" { 
  default = { 
    rg-prd-adm-suk = "uksouth",
    rg-prd-adm-wuk = "ukwest" 
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 07:15:05