如何自动检测AWS Lambda超时并触发另一个Lambda?
解决Lambda异步调用超时后EventBridge规则不触发的问题
核心问题分析
你监听的Lambda Function Invocation Result - Failure是同步调用的失败事件,而你的Executor是被异步调用的——默认情况下Lambda不会将异步调用的失败事件发送到EventBridge,且异步失败事件的detail-type与同步场景完全不同。
分步解决步骤
1. 开启Executor Lambda的EventBridge异步事件发送
进入Executor Lambda函数控制台:
- 切换到「配置」标签页,选择「异步调用」
- 在「事件」板块,勾选「将事件发送到 EventBridge」并保存
这是关键前提,默认异步调用的结果事件不会流入EventBridge,必须手动开启该配置。
2. 修改EventBridge规则的事件模式
异步调用超时的事件格式与同步场景有差异,更新规则为以下内容:
{ "source": ["aws.lambda"], "detail-type": ["Lambda Function Invocation Result - Asynchronous Failure"], "detail": { "functionName": ["lambda-function-name"], "errorType": ["Lambda.ClientExecutionTimeoutException"] } }
- 注意
detail-type改为Lambda Function Invocation Result - Asynchronous Failure,匹配异步调用的失败事件类型 - 异步超时对应的
errorType实际是Lambda.ClientExecutionTimeoutException,而非你之前使用的TimeoutError(该值为同步超时的错误类型)
3. 验证事件是否生成
- 手动触发Executor超时(比如在代码中加入
time.sleep(901),超过15分钟的Lambda上限) - 进入EventBridge控制台的「事件」页面,搜索
source:aws.lambda且detail.functionName:lambda-function-name的事件,确认异步失败事件是否正常生成
4. 额外排查点
- 确认规则绑定的是默认事件总线(Lambda异步事件默认发送到默认总线)
- 检查Executor函数的IAM角色是否包含
events:PutEvents权限(开启EventBridge事件发送时会自动添加,但自定义角色需手动确认) - 如果调用Executor时使用了别名或版本,
functionName需要填写完整名称(例如lambda-function-name:prod)
内容的提问来源于stack exchange,提问作者JGrima
相关产品推荐
相关产品推荐

