You need to enable JavaScript to run this app. Terraform用for_each创建AWS NLB监听器关联目标组报arn不存在错误
优惠活动
大模型
产品
解决方案
定价
更多

Terraform用for_each创建AWS NLB监听器关联目标组报arn不存在错误

错误原因
  1. each变量作用域冲突:aws_lb_listener资源块外层已经通过for_each = var.http_tcp_listeners定义了顶层each变量,指向当前监听器的配置参数。你在dynamic "default_action"块中直接使用each.value.arn时,Terraform优先读取外层监听器的each.value,而你的监听器配置中没有arn字段,因此触发了找不到key "arn"的报错。
  2. 逻辑配置冗余错误:你不需要通过dynamic块遍历所有目标组,每个监听器仅需绑定和它同key的目标组即可(http监听器对应http目标组、https监听器对应https目标组),原配置会给每个监听器生成2条default_action规则,不符合预期。
修复方案

直接删除多余的dynamic "default_action"块,通过监听器的each.key直接引用对应key的目标组ARN即可,修改后的aws_lb_listener资源完整配置如下:

resource "aws_lb_listener" "frontend_http_tcp" {
  for_each          = var.http_tcp_listeners
  load_balancer_arn = aws_lb.main.arn
  port              = each.value.port
  protocol          = each.value.protocol
  alpn_policy       = each.value.alpn_policy

  # 仅当监听器配置了certificate_arn时才添加该参数,避免http监听器冗余配置
  dynamic "certificate_arn" {
    for_each = contains(keys(each.value), "certificate_arn") ? [each.value.certificate_arn] : []
    content {
      value = certificate_arn.value
    }
  }

  default_action {
    type             = "forward"
    target_group_arn = aws_lb_target_group.main[each.key].arn
  }

  depends_on = [
    aws_lb.main,
    aws_lb_target_group.main,
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 11:30:03