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

Terraform动态块for_each中三元表达式的作用、语法及逻辑调整疑问

Terraform动态块中三元表达式的作用及示例解析

三元表达式在动态块for_each中的作用

Terraform的动态块for_each要求接收集合类型(列表、集合、映射)来决定生成对应块的数量。三元表达式在这里的核心作用是根据布尔值动态切换集合的有无:

  • 当条件为true时,返回非空集合,触发动态块渲染
  • 当条件为false时,返回空集合,不渲染动态块
    以此实现“用布尔变量控制是否创建某个资源块”的逻辑。

示例中["yes"]和[]的含义

  • ["yes"]是仅含单个元素的字符串列表:因为for_each必须接收集合类型,而我们只需要生成一个parameter块,所以用单元素列表满足类型要求。这里的元素值("yes")没有实际业务意义,只是用来凑集合结构——动态块内容是固定的,不需要用到循环变量parameter.value。
  • []是空列表:当enable_aggregate_limit为false时,返回空集合,for_each遍历空集合就不会生成任何parameter块,达到“不创建”的效果。

实现enable_aggregate_limit为false时创建参数块

只需要反转三元表达式的逻辑,调换空列表和单元素列表的返回值即可:

resource "aws_db_parameter_group" "main" {
  name   = local.name
  family = var.custom_parameter_group_family

  dynamic parameter {
    # 条件反转:false时返回非空列表,true时返回空列表
    for_each = var.enable_aggregate_limit ? [] : ["yes"]
    content {
      name         = "pga_aggregate_limit"
      value        = "0"
      apply_method = "pending-reboot"
    }
  }
}

或者用!取反布尔值,写法更直观:

for_each = !var.enable_aggregate_limit ? ["yes"] : []

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 04:45:44