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
相关产品推荐
相关产品推荐

