AWS Lambda配置52个EventBridge触发器遇权限策略超限求助
每月26天,每天两个不同时间点,用不同payload触发同一AWS Lambda函数。原本计划创建52个EventBridge触发器,但创建到第29个时收到报错:
The final policy size (20755) is bigger than the limit (20480).
由于每个事件对应独立资源,权限策略额度快速耗尽,求可行的解决方案。
更新:具体执行间隔
Day 1: 1 am with payload={1} Day 1: 1 pm with payload={2} Day 2: 2 am with payload={3} Day 2: 2 pm with payload={4} Day 3: 3 am with payload={5} Day 3: 3 pm with payload={6} ... Day 26
1. 合并EventBridge规则,动态生成payload
不用给每个时间点单独创建规则,只需要2个覆盖全周期的规则:一个处理所有凌晨触发,一个处理所有下午触发。让EventBridge传递触发的时间信息,在Lambda内部根据日期和小时计算对应的payload编号:
- 第N天的凌晨触发对应payload值为
2N-1 - 第N天的下午触发对应payload值为
2N
仅需2条规则就能满足需求,大幅缩减策略体积。
2. 改用EventBridge调度器(Scheduler)
EventBridge Scheduler通过IAM角色授权调用Lambda,而非直接在Lambda权限策略中添加每条规则的权限。无论创建多少个调度任务,都不会占用Lambda的策略额度。每个任务可独立设置触发时间和payload,完美匹配你的场景,且无策略大小限制问题。
3. 合并Lambda权限策略中的资源
若坚持使用EventBridge规则,可手动修改Lambda的权限策略,将多个规则的ARN合并为通配符格式。例如,将零散的规则ARN:
arn:aws:events:us-east-1:123456789012:rule/daily-trigger-1 arn:aws:events:us-east-1:123456789012:rule/daily-trigger-2 ...
替换为:
arn:aws:events:us-east-1:123456789012:rule/daily-trigger-*
单条权限即可覆盖所有同前缀规则,大幅压缩策略体积。注意需确保所有相关规则都匹配该前缀,避免权限过度开放。
4. 用中间Lambda做时间判断分发
创建一个主Lambda,仅配置1个EventBridge触发器(比如每小时触发一次)。主Lambda内部判断当前时间是否命中你设定的26天×2个时间点,若命中则调用目标Lambda并传递对应payload。这种方式仅需一个触发器,彻底规避策略大小限制,但需自行编写时间判断逻辑。
内容的提问来源于stack exchange,提问作者laprof

