EventBridge 现在是三个东西:Bus、Scheduler、Pipes。考试经常混淆,分清楚就拿分。
japanese-climb 的 src/jclimb/core_scheduler.py 现在做的事:每天早上 6 点(按用户本地时区),扫所有用户的 mastery_review_state,挑出今天要复习的话题推送提醒。每个用户可能在不同时区。搬 AWS 选哪个?
🎣 钩子:定时跑 Lambda——CloudWatch Events 不就行了?为啥 AWS 还要单独搞个 EventBridge Scheduler?
👶 三件事一次说清楚 :
替代老 EB Rule 的定时功能。原生时区。每用户可独立 schedule(百万级)。一次性 + 重复都支持。
事件路由:S3 PUT → 触发 Lambda;CloudTrail 事件 → 通知 SNS。基于事件 pattern 匹配。
source → (可选 filter / transform) → target。替代手写 Lambda 当胶水。如 SQS → 过滤 → Step Functions。
cron(0 6 * * ? *) + Asia/Tokyo),动态创建/更新/删除百万级 schedule(API 调用),一次性 + 重复都支持,直接触发 200+ AWS 目标。
{"detail-type": ["Object Created"]};数组里是 OR;支持 prefix/suffix/numeric/anything-but对应代码:src/jclimb/core_scheduler.py + src/jclimb/mastery_review_params.py/models.py/store.py/evidence.py/profile.py
当前实现:FastAPI 进程内的 APScheduler 之类,单进程跑,多实例时调度去重复杂。
搬 AWS 完整链路:
CreateSchedule API:
Name: reminder-{userId}
ScheduleExpression: "cron(0 6 * * ? *)"
ScheduleExpressionTimezone: "Asia/Tokyo"
Target: arn:aws:lambda:...:build-reminder
UpdateSchedule 改 timezoneDeleteSchedulemastery_review_state,拼提醒,推 SNS关键:百万用户每人独立 schedule,AWS 替你管定时精度+重试,你的代码只关心"6 点要提醒什么"。比 APScheduler 多用户场景稳得多。
{"detail": {"userId": ["abc"]}}——数组里是 OR(多值匹配);支持 prefix/suffix/numeric/anything-but/exists 等匹配器。变体 1:SQS 消息进队列后,要过滤掉 priority="low" 的,剩下传给 Step Functions 启动工作流。最直接实现?
✅ B:Pipes 就是为这场景设计的——source=SQS, filter="priority": [{"anything-but":"low"}], target=Step Functions。零代码、零 Lambda、零运维。C 错在:EB Rule 监听的是 EB Bus 上的事件,不能直接以 SQS 为 source(要么 Pipes,要么 SQS event source mapping 给 Lambda)。
变体 2:你设 EventBridge Schedule 每分钟跑一次 Lambda。监控发现一周内有 3 次"该跑没跑"。最可能解释?
✅ B:AWS 文档明说:事件传递通常 at-least-once 但极少情况下可能 best-effort 跳过。生产系统不能假设"每分钟必跑一次"——要补偿机制(比如下次跑时检查"上次有没有漏数据")。这是 DEA 喜欢考的 nuance,区分"懂表象 vs 懂分布式系统"。