Two services, easily confused
AWS introduced EventBridge Scheduler as a successor to EventBridge's rule-based scheduling. The original isn't deprecated — both still work — but they have different capabilities.
| EventBridge Rules | EventBridge Scheduler | |
|---|---|---|
| Launched | ~2019 | November 2022 |
| Cron expressions | Yes (UTC only) | Yes (any timezone) |
| Timezone setting | No — UTC always | Yes (per schedule) |
| Rate expressions | Yes (rate(5 minutes)) | Yes |
| One-time schedules | No | Yes (at expressions) |
| Quota per region | 300 rules | 1,000,000 schedules |
| Targets | 20+ AWS services | 270+ AWS services |
| Schedule groups | No | Yes (group + tag for org) |
| DST handling | N/A (UTC only) | Configurable |
| Cost | Free for schedule rules | $1 per 1M invocations |
Cron expression differences
Both use 6-field Quartz-style cron with the year field:
# Both formats: minute hour day-of-month month day-of-week year cron(0 9 ? * MON-FRI *) # Weekdays at 9 AM
Same rules: ? required in one day field, L and W supported, day-of-week starts at 1=Sunday.
Timezone in Scheduler
Configure via the ScheduleExpressionTimezone property:
{
"Name": "morning-report",
"ScheduleExpression": "cron(0 9 ? * MON-FRI *)",
"ScheduleExpressionTimezone": "America/New_York",
"Target": { ... }
}
Now 9 AM means 9 AM Eastern, automatically adjusting for DST.
When to use which
Use EventBridge Rules when:
- You're already on EventBridge for event-driven workflows
- UTC scheduling is fine
- You have fewer than 300 schedules
- You want the free tier (rules are free; only target invocations cost)
Use EventBridge Scheduler when:
- You need timezone-aware schedules (most user-facing apps)
- You need one-time future-dated schedules ("send this email on 2026-12-31")
- You have hundreds or thousands of distinct schedules
- You're starting a new project (Scheduler is the modern path)
Migrating from Rules to Scheduler
The cron expressions are identical, so the schedule itself migrates 1:1. What changes:
- Configuration moves from EventBridge → EventBridge Scheduler in the console
- You'll likely add
ScheduleExpressionTimezone - Targets are configured per-schedule, not via Rules → Targets associations
- You pay per-invocation now (was free for rule scheduling)
For most teams, the timezone support alone is worth the migration.