如何在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
相关产品推荐
相关产品推荐

