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

如何将Map中端口列表映射生成AWS安全组规则?

解决AWS安全组规则批量生成问题

你的核心问题是直接将列表类型的端口赋值给需要单个数值的from_port/to_port参数,导致类型不匹配报错。要实现每个端口对应一条安全组规则,需要先把嵌套的端口列表扁平化,让每个端口成为独立的遍历项。

步骤1:扁平化端口数据

先通过本地值(locals)把var.ep中的嵌套端口列表拆成独立条目,同时处理端口类型转换(你的端口是string类型,AWS要求是number):

locals {
  security_group_ports = flatten([
    for ep_key, ep_value in var.ep : [
      for port in ep_value.port : {
        key       = "${ep_key}-${port}"  # 生成唯一标识,避免重复
        ep_key    = ep_key
        name      = ep_value.name
        port      = tonumber(port)       # 转换为AWS要求的数值类型
      }
    ]
  ])
}

步骤2:生成安全组规则

基于扁平化后的数据集,遍历生成每条安全组规则:

resource "aws_security_group_rule" "ingress" {
  for_each = { for item in local.security_group_ports : item.key => item }

  description       = "good desc - ${each.value.ep_key}"
  type              = "ingress"
  from_port         = each.value.port
  to_port           = each.value.port
  protocol          = "tcp"  # 注意:AWS协议需为有效值,如tcp/udp/icmp,替换为你实际需要的协议
  security_group_id = aws_security_group.example.id  # 替换为你的目标安全组ID
  cidr_blocks       = ["0.0.0.0/0"]  # 按需设置允许访问的IP段,必填参数
}

关键说明

  • flatten函数用来把嵌套的列表结构转换成一维列表,确保每个端口都是独立的遍历项
  • tonumber转换端口类型,避免因string类型导致的AWS API报错
  • for_each使用{ for ... }构建键值对集合,确保每个规则实例有唯一的标识符
  • 补充了security_group_id和cidr_blocks等必填参数,实际使用时需替换为你的配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:30:14