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

如何在Terraform中使用for_each遍历嵌套的环境变量配置

解决Terraform遍历GitHub多环境多变量的问题

当前代码仅能创建每个环境下的第一个环境变量,要遍历所有嵌套的变量条目,需先将原有嵌套结构扁平化,让for_each能迭代到每一个具体变量。

步骤1:生成扁平化的变量映射

基于原有的env_vars_git结构,通过Terraform的嵌套for表达式生成扁平映射,确保每个变量条目有唯一标识:

locals {
  env_vars_git = {
    production = [
      {
        env_var_name           = "hostname_01"
        env_var_value          = "%s"
      },
      {
        env_var_name           = "hostname_02"
        env_var_value          = "%s"
      }
    ],
    development = [
      {
        env_var_name           = "hostname_01"
        env_var_value          = "%s"
      },
      {
        env_var_name           = "hostname_02"
        env_var_value          = "%s"
      }
    ]
  }

  # 扁平化处理:将每个环境的每个变量转为独立条目,键用「环境名_变量名」保证唯一
  flattened_env_vars = merge([
    for env_name, vars in local.env_vars_git : {
      for var in vars : "${env_name}_${var.env_var_name}" => {
        environment = env_name
        var_name    = var.env_var_name
        var_value   = var.env_var_value
      }
    }
  ]...)
}

步骤2:修改资源块的遍历逻辑

将for_each指向扁平化后的变量集合,直接通过each.value调用对应属性:

resource "github_actions_environment_variable" "aws" {
  for_each      = local.flattened_env_vars
  repository    = github_repository.aws.name
  environment   = each.value.environment
  variable_name = each.value.var_name
  value         = each.value.var_value
}

逻辑说明

  • 扁平化后的flattened_env_vars会把每个环境下的所有变量拆分为独立条目,避免了原代码中只能手动指定索引(如[0])的局限。
  • 资源块中each.value直接包含当前变量对应的环境名、变量名和变量值,无需再通过嵌套索引访问原结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:10:00