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

Terraform:如何合并三个列表以构建映射列表

问题:Terraform展平列表组合时未得到预期结果

原代码尝试将告警名称、对应阈值与每个SQS队列进行组合,但输出不符合预期:

locals {
    alarms = {
        names = ["NumberOfMessagesReceived", "NumberOfMessagesDeleted", "ApprNumberOfMessagesDelayed",
                 "NumberOfMessagesSent", "NumberOfEmptyReceives", "ApprNumberOfMessagesNotVisible"],

        thresholds = ["1000", "50", "100", "100", "100", "50"]
    }

    sqs_queues = {
        queues = ["default", "general"]
    }

    alarms2 = flatten([
        for name, threshold in local.alarms : [
            for sqs_queue in local.sqs_queues : {
                alarm_name = name
                threshold_value = threshold
                sqs_queue_name = sqs_queue
            }
        ]
    ])
}

预期输出要求每个告警名称与对应阈值绑定,再分别和每个SQS队列组合,示例:

alarm_name = "NumberOfMessagesReceived"
threshold_value = "1000"
sqs_queue_name = "default"

alarm_name = "NumberOfMessagesReceived"
threshold_value = "1000"
sqs_queue_name = "general"

问题原因

原代码错误地遍历了local.alarms这个map的键值对,此时name会取到"names"和"thresholds"两个字符串,threshold则是对应的整个列表,无法实现名称与阈值的一一配对。


修正后的代码

需要先将names和thresholds按索引配对成告警条目,再将每个条目与所有SQS队列组合:

locals {
    alarms = {
        names = ["NumberOfMessagesReceived", "NumberOfMessagesDeleted", "ApprNumberOfMessagesDelayed",
                 "NumberOfMessagesSent", "NumberOfEmptyReceives", "ApprNumberOfMessagesNotVisible"],

        thresholds = ["1000", "50", "100", "100", "100", "50"]
    }

    sqs_queues = {
        queues = ["default", "general"]
    }

    # 先将名称和阈值按索引配对成单个告警对象
    alarm_entries = [
        for idx, name in local.alarms.names : {
            name = name
            threshold = local.alarms.thresholds[idx]
        }
    ]

    # 遍历每个告警条目,再绑定每个SQS队列,最后展平结果
    alarms2 = flatten([
        for entry in local.alarm_entries : [
            for queue in local.sqs_queues.queues : {
                alarm_name = entry.name
                threshold_value = entry.threshold
                sqs_queue_name = queue
            }
        ]
    ])
}

验证结果

修正后的local.alarms2会生成预期的结构,每个告警名称+阈值的组合都会分别与"default"和"general"队列关联,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:50:26