Terraform中使用for_each遍历Map变量创建EKS模块node_groups子模块实例报错排查
解决Terraform中for_each遍历Map创建EKS Node Groups的语法错误
你遇到的这个错误是因为Terraform解析动态map键的语法规则没掌握对,咱们一步步理清楚问题所在:
你原本在node_groups的map里直接写each.key = { ... },但Terraform会把each.key当成字面量的键名(也就是键是字符串"each.key"),而不是去解析这个表达式拿到你想要的eks_kube_system或eks_jenkins_build。这就触发了报错,提示你这个写法不符合语法规则。
修正后的代码
只需要把动态键用括号包裹起来,明确告诉Terraform这是一个需要求值的表达式,而不是固定的字符串键:
module "eks" { ... node_groups = { for_each = var.frame_platform_eks_node_groups (each.key) = { desired_capacity = each.value.desired_capacity max_capacity = each.value.max_capacity min_capacity = each.value.min_capacity instance_types = each.value.instance_type k8s_labels = { Name = each.value.k8s_label } additional_tags = { ExtraTag = each.value.additional_tags } } } }
为什么这样修改?
在Terraform的map构造逻辑里:
- 如果键是固定字符串(比如
"my-static-node-group"),可以直接写"my-static-node-group" = { ... },甚至省略引号(当键名无特殊字符时) - 如果键是动态表达式(比如
each.key、变量引用等),必须用**括号()**包裹表达式,Terraform才会计算表达式的值,把结果作为map的键。
修改后,Terraform就能正确遍历你的frame_platform_eks_node_groups变量,分别生成以eks_kube_system和eks_jenkins_build为键的node group配置了。
内容的提问来源于stack exchange,提问作者Miroslav
相关产品推荐
相关产品推荐

