当S3与Lambda分属不同区域时如何通过S3事件通知触发跨区域Lambda函数
跨区域S3事件触发Lambda实现方案
AWS S3原生事件通知仅支持绑定同区域的Lambda、SNS、SQS作为目标,无法直接配置跨区域Lambda触发,以下是3种可落地的实现方案:
方案1:同区域SNS中转(最通用的轻量方案,即你提到的思路)
这是生产环境最常用的实现方式,步骤如下:
- 在S3所在的区域1创建SNS标准主题
- 配置S3存储桶的事件通知规则,触发目标选择刚创建的区域1 SNS主题,同时配置SNS主题的资源策略,允许S3存储桶向主题推送消息
- 为区域2的目标Lambda配置该SNS主题的订阅,AWS SNS标准主题原生支持跨区域订阅Lambda
- 补充配置SNS主题的资源策略,允许区域2的Lambda消费消息,同时给Lambda的执行角色添加SNS消息触发的相关权限
优缺点:架构简洁、运维成本极低,仅增加几十毫秒的事件中转延迟,适配绝大多数常规业务场景
方案2:同区域中转Lambda(适合需要自定义事件处理的场景)
如果需要在事件转发前做过滤、格式转换、限流等自定义逻辑,可以用该方案:
- 在S3所在的区域1部署一个极简的中转Lambda
- 配置S3事件通知直接触发该同区域中转Lambda
- 在中转Lambda的代码中调用AWS SDK的
lambda.invoke接口,指定区域参数为区域2,触发目标Lambda即可 - 给中转Lambda的执行角色添加
lambda:Invoke权限,资源指定为区域2目标Lambda的ARN
优缺点:灵活性最高,可支持各种自定义事件处理逻辑,资源成本极低,仅需要为中转Lambda的毫秒级运行时间付费
方案3:EventBridge跨区域事件总线(适合企业级统一事件路由场景)
如果你的企业已经在使用EventBridge做全栈事件统一管理,可以采用该方案:
- 开启区域1S3存储桶的EventBridge集成,S3会自动将所有存储桶事件推送到同区域的默认EventBridge总线
- 在区域1的EventBridge上配置事件规则,匹配S3对象创建事件,目标选择跨区域的区域2 EventBridge自定义总线
- 在区域2的EventBridge自定义总线上配置规则,匹配对应S3事件后触发同区域的目标Lambda
优缺点:可扩展性极强,适合多事件源、多目标的复杂路由场景,但架构复杂度和成本高于前两种方案
通用注意事项
所有跨区域调用都会产生跨区域流量费用,可根据业务的延迟要求、成本预算选择对应方案即可。
内容的提问来源于stack exchange,提问作者Darshan Ambhaikar
相关产品推荐
相关产品推荐

