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

如何在Terraform dynamic块中同时迭代exchange与preference参数

解决Terraform Dynamic块同时迭代多个参数的问题

要实现同时迭代exchange和preference参数,核心思路是把两个独立的列表合并成包含对应键值对的对象列表,让dynamic块一次迭代就能获取每个MX记录的完整参数。

具体实现步骤

1. 重构本地变量

将原来分开的mx_server和preference列表,合并为一个包含每个MX记录完整信息的对象列表:

locals {  
  mx_records = [
    { exchange = "smtp.mydomain.com.", preference = 5 },
    { exchange = "mail.mydomain.com.", preference = 10 }
  ]
}

如果需要基于原有两个列表动态配对(比如列表长度可能变化),可以用zip函数自动关联对应元素:

locals {  
  mx_server = [ "smtp.mydomain.com.", "mail.mydomain.com."]
  preference = [ 5, 10 ]
  # 自动配对两个列表的对应元素,生成对象列表
  mx_records = [for pair in zip(local.mx_server, local.preference) : {
    exchange = pair[0]
    preference = pair[1]
  }]
}

2. 修改Dynamic块配置

让dynamic块迭代这个新的mx_records列表,在content块中直接提取每个对象的exchange和preference值:

resource "dns_mx_record_set" "mx" {
  for_each = toset(var.dns_zones)
  zone     = "${each.value}."
  ttl      = 300

  dynamic "mx" {
    for_each = local.mx_records
    content {
      exchange   = mx.value.exchange
      preference = mx.value.preference
    }    
  }
}

效果说明

修改后的代码会完全等价于你手动编写两个mx块的效果,每个MX记录的exchange和preference会正确对应,无需多次使用for_each。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 04:05:19