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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 16:44:06