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

如何使用AWS EventBridge实现Lambda失败后每1-2小时重试至当日23点

实现方案

你可以通过两种主流AWS原生方案实现需求,不需要引入额外第三方服务:

方案1:EventBridge + Lambda 轻量实现(改造成本最低)

  • 首先改造现有Python Lambda,新增3个核心逻辑:
    1. 入口处先加Google Search Console(GSC) API可用性校验:调用GSC轻量查询接口(比如历史固定日期的小数据量查询接口),返回异常直接抛出错误终止本次执行
    2. 执行拉取逻辑前先判断当前时间是否超过当日23点,超过则直接标记任务结束,不触发后续重试,示例判断代码:
    from datetime import datetime, timezone
    # 请调整为你业务对应的时区
    def is_before_23():
        current_time = datetime.now(timezone.utc).astimezone()
        return current_time.hour < 23
    
    1. 拉取到数据后增加完整性校验:判断数据量是否符合历史日均阈值,低于阈值也视为执行失败,避免存入不完整的脏数据到S3
  • 配置AWS侧规则:
    • 保留原有每日固定触发的EventBridge规则,新增一条重试专用EventBridge规则,触发频率设为1.5小时(符合1-2小时间隔要求)
    • 给Lambda配置失败目的地:将执行失败的事件路由到自定义EventBridge事件总线,匹配重试规则触发下一次运行
    • 给重试规则配置生效时间窗口:仅在每日首次触发时间到当日23:00之间生效,超过窗口自动停止触发,避免跨天运行
    • 重试次数上限设为10次即可,按1.5小时间隔计算,完全覆盖当日可重试时间范围

方案2:Step Functions 工作流实现(可控性更高)

如果需要更精细化的重试管控,推荐用该方案:

  • 搭建Step Functions状态机,核心流程如下:
    1. 调用Lambda执行GSC API可用性校验
    2. 校验通过 → 执行数据拉取+完整性校验 → 校验成功直接结束工作流
    3. 校验不通过/拉取失败 → 进入等待节点,设置等待时长为1.5小时
    4. 等待结束后判断当前时间是否≤当日23:00,是的话回到步骤1重试,否则直接结束工作流
  • 原有EventBridge规则改为每日固定时间触发该Step Functions状态机即可

该方案所有重试逻辑可视化配置,不需要额外维护事件路由规则,排查问题更方便,也不会出现重复触发的异常情况

额外优化建议
  • 单次Lambda执行内,给GSC API调用加2-3次指数退避重试,小范围网络波动不需要触发跨小时的重试
  • Lambda日志中增加重试次数字段标记,方便后续统计GSC API的异常频率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:54:02