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

Terraform用for_each创建动态资源时条件过滤失效如何解决

问题根因

你原有代码的核心问题是for_each的过滤条件作用域错误:
你在if判断位传入了所有parameters元素的init值组成的列表,Terraform会将非空列表直接判定为布尔值true,因此这个全局判断条件会作用于所有元素,无法实现单个元素的独立过滤。同时直接用列表索引作为for_each的键存在索引变更导致资源意外重建的风险,建议用唯一的name字段作为键。

修复后的代码

resource "aws_autoscaling_group" "aws_asg"  {
  # 遍历每个参数对象,仅保留init为true的项,用name作为唯一键避免索引变动影响资源
  for_each = { for param in var.parameters : param.name => param if param.init }

  # 资源参数直接通过each.value调用即可,示例如下:
  name = each.value.name
  min_size = each.value.scaling.minimum
  max_size = each.value.scaling.maximum
  desired_capacity = each.value.scaling.desired
  # 其余ASG配置参数按需补充
}

逻辑说明

  • 遍历var.parameters中的每一个对象,以对象的name属性作为生成map的键,对象本身作为值
  • 每个对象单独判断自身的init属性,仅init == true的对象会被保留到for_each的map中,对应创建ASG资源
  • 用name作为键比用列表索引更稳定,后续调整参数列表顺序不会导致已有资源被误删重建

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:15:07