如何配置CloudWatch Events跨区域触发us-east-1的Lambda响应EC2启动事件
跨区域EC2启动事件触发us-east-1 Lambda的实现方案
前提:所有需要触发Lambda的区域必须已经开启CloudTrail跟踪,否则EventBridge无法捕获EC2的RunInstances API调用事件。
注意:所有跨区域调用/事件转发都会产生少量的跨区域数据传输费用,可根据自己的使用量选择最优方案。
方案1:目标区域直接配置EventBridge规则调用跨区域Lambda
适合仅需要覆盖2-3个少量区域的场景,配置最简单,改动最小:
- 首先给us-east-1的Lambda添加基于资源的权限策略,允许对应目标区域的EventBridge服务调用该Lambda,CLI配置示例如下:
aws lambda add-permission --function-name <你的Lambda函数名> \ --statement-id allow-eventbridge-us-east-2 \ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn arn:aws:events:us-east-2:<你的AWS账号ID>:rule/*
- 切换到目标区域(如us-east-2),创建和us-east-1完全相同的EventBridge规则,触发目标选择us-east-1的Lambda完整ARN即可
- 每个需要覆盖的区域都需要单独配置一次规则和对应调用权限
方案2:跨区域事件统一转发到us-east-1处理
适合需要覆盖5个以上区域、后续还有新增跨区域事件处理需求的场景,维护成本更低:
- 在us-east-1创建一个EventBridge自定义事件总线,用于接收所有其他区域转发过来的EC2启动事件
- 给us-east-1的自定义事件总线添加权限,允许其他区域的EventBridge服务向其推送事件
- 在每个目标区域创建EventBridge规则,匹配RunInstances事件,目标选择你us-east-1的自定义事件总线ARN
- 保留us-east-1原有的EventBridge规则,将触发源修改为同时匹配自定义事件总线+默认事件总线即可,所有区域的事件都可以在us-east-1统一处理,不需要修改原有Lambda逻辑
方案3:配置全局CloudTrail统一投递到us-east-1
适合已经在用全局CloudTrail做多区域统一审计的场景:
- 创建一条作用于所有区域的CloudTrail跟踪,将所有区域的CloudTrail日志统一投递到us-east-1的S3桶或者CloudWatch Logs
- 调整us-east-1原有EventBridge规则的匹配逻辑,兼容识别其他区域的RunInstances事件即可,不需要在其他区域做任何额外配置
内容的提问来源于stack exchange,提问作者Paolo
相关产品推荐
相关产品推荐

