/
Cloud Scheduler

AWS EventBridge Scheduler Cron Guide

AWS EventBridge Scheduler (and its predecessor, EventBridge/CloudWatch Events rules) supports two expression types: rate expressions (rate(5 minutes)) for simple fixed intervals, and cron expressions for anything calendar-based — but AWS's cron syntax is Quartz-derived, not standard POSIX cron, which trips up anyone copying an expression straight from a Linux crontab.

Syntax Notes

AWS cron expressions have 6 required fields: minutes, hours, day-of-month, month, day-of-week, year — and critically, exactly one of day-of-month or day-of-week must be a question mark (?), never both wildcards, unlike standard cron's OR semantics.

Examples

Every day at 8 AM UTC (AWS cron)
cron(0 8 * * ? *)
Every 10 minutes (rate expression)
rate(10 minutes)
First Monday of every month at 9 AM UTC
cron(0 9 ? * 2#1 *)

Gotchas

  • Standard cron's `0 8 * * *` is invalid in AWS EventBridge — you must use `?` in either the day-of-month or day-of-week field, since AWS forbids both being wildcards simultaneously (unlike standard cron's OR-based resolution).
  • AWS cron expressions always run in UTC — there's no per-rule timezone setting in the older CloudWatch Events cron rules (EventBridge Scheduler, the newer service, does support a `ScheduleExpressionTimezone` field, so check which service you're actually using).
  • The 6-field format includes a year field that standard cron doesn't have — omitting it or getting the field order wrong is a frequent copy-paste error when porting expressions from a Linux crontab.

Best Practices

  • Use rate() expressions instead of cron() whenever you just need a fixed interval ("every N minutes/hours/days") — they're simpler and less error-prone than the equivalent cron syntax.
  • If using the newer EventBridge Scheduler (not legacy CloudWatch Events rules), set `ScheduleExpressionTimezone` explicitly rather than mentally converting to UTC — it removes an entire class of DST-related bugs.
  • Always test a new schedule expression with AWS's schedule expression validator in the console before deploying, since a malformed 6-field expression fails at rule-creation time, not at runtime.

Frequently Asked Questions

Why does AWS reject my standard cron expression?
AWS uses a Quartz-derived 6-field format that requires a year field and a `?` in either day-of-month or day-of-week — standard 5-field POSIX cron expressions aren't valid as-is and need to be adapted.
What's the difference between rate() and cron() in EventBridge?
rate() expresses a simple fixed interval like rate(5 minutes) or rate(1 day). cron() expresses calendar-based schedules (specific times, specific days) using the 6-field AWS cron format — use whichever matches your actual requirement.
Does EventBridge Scheduler support timezones other than UTC?
The newer EventBridge Scheduler service supports a ScheduleExpressionTimezone parameter using IANA timezone names. The older CloudWatch Events (EventBridge rules) cron syntax is UTC-only.