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

如何基于多ENI构建单个CloudWatch Metric Filter过滤规则?

解决CloudWatch Metric Filter多ENI单过滤器问题

你需要将所有目标ENI的过滤条件合并为一个OR表达式,而非为每个ENI单独创建过滤器。只需移除for_each,并通过Terraform的字符串拼接功能生成包含所有ENI的过滤规则即可。

修改后的完整代码如下:

data "aws_network_interfaces" "ENI_List" {
  filter {
    name = "subnet-id"
    values = ["subnet-A", "subnet-B", "subnet-C"]
  }
}

resource "aws_cloudwatch_log_metric_filter" "EUN_Network_Filter" {
  name                = "EUN_DC_Network_Traffic_Monitoring"
  # 拼接所有ENI的OR过滤条件
  pattern             = "[version, accountid, (${join(" || ", [for eni in data.aws_network_interfaces.ENI_List.ids : "interfaceid=${eni}"])}), srcaddr, dstaddr, srcport, dstport, protocol, packets, bytes, start, end, action, logstatus=NODATA]"
  log_group_name      = "VPC_Flow_Log_Group" # "${data.aws_cloudwatch_log_group.vpc_flow_log_group}"

  metric_transformation {
    name      = "EUN_Network"
    namespace = "EUN_Network_Traffic"
    value     = "1"
  }
}

关键逻辑说明:

  • 移除for_each:不再为每个ENI单独创建资源,只生成一个指标过滤器
  • 生成OR条件列表:通过for表达式遍历所有ENI ID,生成interfaceid=xxx格式的字符串数组
  • 拼接成完整条件:用join(" || ", ...)将数组元素用||连接,形成interfaceid=eni-xxx || interfaceid=eni-yyy的OR逻辑,嵌入到过滤模式中

这样就能得到一个包含所有目标子网ENI的单指标过滤器,符合你需要的过滤规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:15:27