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
验证方法
- 部署 CloudFormation Stack
- 创建新 ALB 或将现有 ALB 扩展到新 AZ
- 检查 Lambda CloudWatch 日志
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 实例创建 → 自动配置备份策略

浙公网安备 33010602011771号