Terraform技术问题:如何将each.value用作变量名
解决方案
Terraform不支持动态拼接变量名来引用变量,所以你不能用var.each.value这种写法。正确的做法是把分散的单个变量改成map类型变量,统一管理键值对,这样就能配合for_each动态访问了。
步骤1:重构变量定义
把原来多个单独的api_env_var_name_1这类变量,替换成一个map类型的变量:
variable "api_env_vars" { type = map(string) default = {} description = "环境变量键值对,键为变量名,值为敏感密钥" sensitive = true }
你可以在terraform.tfvars或者命令行中这样赋值:
api_env_vars = { "var_name_1" = "secret_value_1" "var_name_2" = "secret_value_2" }
步骤2:调整资源块的for_each逻辑
修改资源块,直接遍历这个map变量,同时保留你的feature_flag条件:
resource "environments_variables_v1" "api_env_var" { service_sid = local.api_sid environment_sid = local.api_env_sid for_each = var.feature_flag ? var.api_env_vars : {} key = upper(each.key) value = each.value }
说明
- 用map类型变量后,
each.key对应环境变量的原始名称,转大写后作为key字段 each.value直接对应map里的敏感密钥值,无需动态引用变量for_each通过三元表达式实现:当var.feature_flag为true时遍历map,否则创建空集合(不生成任何资源)
内容的提问来源于stack exchange,提问作者Jeremy Schultz
相关产品推荐
相关产品推荐

