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

Terraform配置aws_lb_listener_rule时query_string仅最后一条生效如何解决

问题根因

你的现有逻辑错误地将单个监听器规则内的多个query_string条件拆分为了多个独立的监听器规则实例,每个实例仅保留一个query_string配置,最终只有最后生成的实例会生效,所以只看到了最后一个query_string规则。

调整方案

需要修改两处核心配置:

1. 调整local值的扁平化逻辑,保留单个监听器规则下的全部query_string配置

删除lb_listener_rule_flat_list中针对query_string索引的循环层,直接将整个query_string列表存入规则属性:

locals {
  # 其余local值保持不变,仅修改lb_listener_rule_flat_list如下
  lb_listener_rule_flat_list = flatten([
    for lb in var.lb : [
      for lb_listener in lookup(lb, "lb_listener", []) : [
        for rule_idx, lb_listener_rule in lookup(lb_listener, "lb_listener_rule", []) : {
          lb_name                       = lb.name
          lb_listener_rule_index        = rule_idx
          lb_listener_rule_listener_arn = aws_lb_listener.lb_listener[lb.name].arn
          lb_listener_rule_action_type  = lb_listener_rule.action.type

          lb_listener_rule_action_fixed_response = lookup(lb_listener_rule.action, "fixed_response", {}) != {} ? {
            content_type = lb_listener_rule.action.fixed_response.content_type
            message_body = lookup(lb_listener_rule.action.fixed_response, "message_body", null)
          } : null

          # 直接保存当前规则下的全部query_string列表,不按条目拆分
          lb_listener_rule_condition_query_strings = lookup(lb_listener_rule.condition, "query_string", [])
        }
      ]
    ]
  ])
  # 其余local值保持不变
}

2. 调整监听器规则资源的dynamic块逻辑,遍历生成全部query_string块

修改aws_lb_listener_rule资源的condition块,遍历当前规则的全部query_string列表生成多个query_string配置:

resource "aws_lb_listener_rule" "lb_listener_rule" {
  for_each     = local.lb_listener_rule_map
  listener_arn = each.value.lb_listener_rule_listener_arn

  action {
    type = each.value.lb_listener_rule_action_type

    dynamic "fixed_response" {
      for_each = each.value.lb_listener_rule_action_fixed_response != null ? [{}] : []
      content {
        content_type = each.value.lb_listener_rule_action_fixed_response.content_type
        message_body = each.value.lb_listener_rule_action_fixed_response.message_body
      }
    }
  }

  condition {
    # 遍历当前规则下所有query_string条目,生成对应配置块
    dynamic "query_string" {
      for_each = each.value.lb_listener_rule_condition_query_strings
      content {
        key   = lookup(query_string.value, "key", null)
        value = query_string.value.value
      }
    }
  }
}

调整后重新执行terraform plan即可看到符合预期的多query_string条件配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:48:05