EventBridge + Lambda 实现 ALB 流量镜像自动配置:事件驱动方案的完整技术路径

问题

AWS Application Load Balancer 的网络接口(ENI)是动态管理的。每个可用区对应一个 ENI,ALB 扩展到新 AZ 时自动创建新 ENI。Traffic Mirror Session 绑定在具体 ENI 上——ENI 变了,Session 失效,部分流量漏采。

在多 ALB、多 AZ 的生产环境中,手动补配 Mirror Session 容易遗漏且不可持续。

方案架构

事件驱动链路:

CloudTrail (CreateNetworkInterface)
  → EventBridge Rule (ENI description prefix "ELB")
    → Lambda Function
      → 解析 ALB 名称
      → 通配符匹配目标 ALB
      → 幂等检查(已有 Session 则跳过)
      → 创建 Mirror Session + 打标签

全部通过 CloudFormation 部署,参数化配置。

EventBridge 规则

{
  "source": ["aws.ec2"],
  "detail-type": ["AWS API Call via CloudTrail"],
  "detail": {
    "eventSource": ["ec2.amazonaws.com"],
    "eventName": ["CreateNetworkInterface"],
    "requestParameters": {"description": [{"prefix": "ELB"}]}
  }
}

description 前缀过滤确保只有 ALB 的 ENI 触发处理,RDS、Lambda 等服务的 ENI 不会误触发。

Lambda 核心逻辑

ENI 归属解析:从 ENI description 提取 ALB 名称。两种格式需要兼容:

  • 现代格式:ELB app/{alb-name}/{hash}
  • 旧格式:ELB {alb-name}

通配符匹配fnmatch.fnmatch() 支持 *?,参数 ALBDNSPatterns 配置目标 ALB 模式。

幂等保障:调用 describe_traffic_mirror_sessions 检查该 ENI 是否已有 Session,避免 EventBridge 重试导致重复创建。

标签合规:自动给 Mirror Session 打标签(ALB 名称 + 自定义业务标签)。

部署参数

Parameters:
  ALBDNSPatterns:       # 支持通配符,如 "prod-*,staging-*"
  TrafficMirrorTargetId:  # tmt-xxx
  TrafficMirrorFilterId:  # tmf-xxx

验证方法

  1. 部署 CloudFormation Stack
  2. 创建新 ALB 或将现有 ALB 扩展到新 AZ
  3. 检查 Lambda CloudWatch 日志
  4. aws ec2 describe-traffic-mirror-sessions 确认新 Session

技术要点

设计决策 说明
事件驱动 vs 轮询 EventBridge 零延迟触发,无空转成本
前缀过滤 在 EventBridge 层过滤非 ALB ENI,减少 Lambda 调用
通配符匹配 灵活控制监控范围,不是所有 ALB 都需要镜像
幂等处理 应对事件重试和延迟
CloudFormation 可复制部署,版本可控

扩展应用

同样的 CloudTrail + EventBridge + Lambda 模式适用于:

  • ALB 创建 → 自动关联 WAF Web ACL
  • EC2 启动 → 自动注册 Route 53 DNS
  • S3 对象上传 → 自动触发 ETL Pipeline
  • RDS 实例创建 → 自动配置备份策略

参考

posted @ 2026-04-29 08:07  亚马逊云开发者  阅读(6)  评论(0)    收藏  举报