You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过EventBridge捕获Lambda函数的执行错误?

Lambda错误触发CloudWatch Events的实现方案

可以实现,以下是几种常用的落地方式:

1. 基于CloudWatch告警触发事件

通过给Lambda的核心错误指标配置CloudWatch告警,当告警进入ALARM状态时,直接将事件推送到CloudWatch Events(现名为EventBridge)总线:

  • 超时检测:监控Lambda的Duration指标,设置阈值为函数配置的超时时间(比如函数超时设为5分钟,阈值就设为299秒),统计周期选1分钟,连续1个周期触发告警。
  • 内存不足检测:可以监控MemoryUsed指标,将阈值设为函数内存上限的90%以上;或者结合CloudWatch Logs Insights过滤日志中的OutOfMemoryError关键词,基于日志查询结果创建告警。
  • 配置步骤:在CloudWatch告警的「通知」设置里,选择「发送到EventBridge」,指定目标事件总线,后续就能用EventBridge规则匹配该告警事件做后续处理(比如推送到监控系统、发送通知等)。

2. 基于CloudWatch Logs匹配触发事件

利用EventBridge的日志源规则,直接匹配Lambda日志中的错误关键词来触发事件:

  • 针对超时:匹配日志中包含Task timed out after的条目;针对内存不足:匹配java.lang.OutOfMemoryError(Java)或RuntimeError: OutOfMemoryError(Python)等关键词。
  • 配置步骤:在EventBridge中新建规则,选择「CloudWatch Logs」作为事件源,指定目标Lambda函数的日志组,然后定义日志模式来匹配这些错误关键词,当日志符合规则时自动触发事件。

3. 函数内主动推送自定义事件

如果需要更精细的错误控制(比如捕获特定业务异常+系统错误),可以在Lambda代码中主动调用EventBridge的PutEvents API,在检测到超时、内存不足等错误时发送自定义事件:

  • Python示例代码:
    import boto3
    import os
    
    eventbridge = boto3.client('events')
    
    def lambda_handler(event, context):
        try:
            # 你的业务逻辑代码
            process_event(event)
        except Exception as e:
            error_msg = str(e)
            # 判断错误类型
            if "Task timed out" in error_msg or "OutOfMemoryError" in error_msg:
                event_detail = {
                    "function_name": context.function_name,
                    "error_type": "timeout" if "Task timed out" in error_msg else "out_of_memory",
                    "error_message": error_msg
                }
                # 发送事件到EventBridge
                eventbridge.put_events(
                    Entries=[
                        {
                            'Source': 'custom.lambda.error',
                            'DetailType': 'LambdaSystemError',
                            'Detail': str(event_detail).replace("'", "\""),
                            'EventBusName': os.environ.get('EVENT_BUS', 'default')
                        }
                    ]
                )
            # 重新抛出异常,不影响原有错误日志
            raise e
    

注意事项

  • 确保相关角色有足够权限:CloudWatch告警需要events:PutEvents权限;主动发送事件的Lambda函数需要附加包含events:PutEvents的IAM策略。
  • 针对大量Lambda函数,建议用基础设施即代码工具(CloudFormation/Terraform)批量配置告警和规则,提升效率。

内容的提问来源于stack exchange,提问作者mxmrpn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:54:39