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

如何基于时长触发AWS Lambda:DynamoDB状态超时告警需求

替代Step Functions的实现方案

方案一:DynamoDB Streams + SQS延迟队列 + Lambda

这是适配需求的低成本直接方案,刚好匹配你需要的延迟时长(SQS标准队列支持最长15分钟延迟):

  • 给你的DynamoDB表开启DynamoDB Streams,仅捕获NEW_IMAGE类型的状态变更记录即可。
  • 编写一个状态监听Lambda,订阅该Stream。每当捕获到状态变更:
    • 若新状态为requested,向一个SQS延迟队列发送消息,设置延迟5分钟,消息中携带记录的主键(如ID);
    • 若新状态为Initiated,向另一个SQS延迟队列发送消息,设置延迟15分钟,同样携带记录主键。
  • 给每个SQS队列绑定对应的告警Lambda:
    • 当延迟消息到期触发Lambda时,先去DynamoDB查询该记录的当前状态;
    • 若状态仍为requested(对应5分钟队列),则发送告警;若已更新为其他状态,直接忽略;
    • 同理,Initiated对应的Lambda检查状态是否未变为InProgress,是则发送对应告警。
  • 额外优化:若状态在延迟期间更新(比如从requested变为Initiated),可让状态监听Lambda通过消息唯一标识(如主键+状态生成的MessageDeduplicationId)删除SQS中的旧消息,减少不必要的Lambda执行。

方案二:EventBridge Scheduler + Lambda

通过定时任务实现延迟触发,灵活性更强(支持更长延迟,满足你的15分钟需求完全没问题):

  • 同样用DynamoDB Streams触发状态监听Lambda,捕获状态变更事件。
  • 针对不同状态创建对应的EventBridge定时任务:
    • 状态为requested时,创建5分钟后执行的定时任务,目标绑定告警Lambda,传递记录主键作为参数;
    • 状态为Initiated时,创建15分钟后执行的定时任务,传递主键参数;
    • 给定时任务设置唯一名称,比如check-status-<记录ID>-<状态值>,方便后续状态变更时删除旧任务。
  • 当状态再次更新(如从requested变为Initiated),状态监听Lambda需删除之前创建的requested对应定时任务,避免误告警。
  • 告警Lambda执行时,必须先查询DynamoDB当前状态,确认未更新后再发送告警。

关键注意事项

  • 所有告警逻辑必须先校验当前状态——延迟期间状态可能已更新,但消息/定时任务已生成,这一步是避免误告警的核心。
  • 处理DynamoDB Streams的Lambda要做好幂等性,比如用Stream记录的SequenceNumber去重,避免重复创建消息或定时任务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 07:52:25