AWS EventBridge Cron
AWS EventBridge uses a 6-field cron format derived from Quartz — minute, hour, day-of-month, month, day-of-week, year — with a mandatory `?` placeholder in one of the two day fields. All expressions evaluate in UTC; per-rule timezones are not supported. Minimum interval is 1 minute.
Quick reference
- Fields
- minute hour day-of-month month day-of-week year
- Minute range
- 0–59
- Hour range
- 0–23
- Day-of-month range
- 1–31 or ? L W
- Month range
- 1–12 or JAN–DEC
- Day-of-week range
- 1–7 (Sun=1, Sat=7) or SUN–SAT, plus ? L #
- Year range
- 1970–2199
- Seconds
- Not supported (use EventBridge Scheduler's rate expression for sub-minute)
- Default timezone
- UTC only (no per-rule timezone for legacy EventBridge rules; EventBridge Scheduler supports timezones)
- Minimum interval
- 1 minute
- Expression syntax
- `cron(...)` wrapper required in EventBridge rules
Examples
| Expression | Description |
|---|---|
0 0 * * ? * | Daily at midnight UTC |
*/5 * * * ? * | Every 5 minutes |
0 9 ? * MON-FRI * | Weekdays at 09:00 UTC |
0 0 L * ? * | Last day of every month at midnight |
0 0 ? * 1#1 * | First Sunday of every month at midnight (Sun=1, #1=first) |
0 12 1,15 * ? * | Noon on the 1st and 15th of every month |
0 0 1 1 ? 2030 | Midnight on January 1st, 2030 (year-specific) |
Gotchas
- **The `?` is mandatory.** Exactly one of day-of-month and day-of-week must be `?` — EventBridge rejects expressions where both are specific values. `0 9 * * MON *` is invalid; write `0 9 ? * MON *`.
- Day-of-week numbering: Sunday is 1 (not 0 like Unix). Weekday range is `2-6` (Mon-Fri) or `MON-FRI`. Use name form whenever possible — avoids the off-by-one bug.
- Always UTC. To run at 9 AM Pacific, you'd need 17:00 UTC during standard time and 16:00 UTC during daylight time. There's no native DST handling for classic EventBridge rules — use EventBridge Scheduler (newer service) if timezone-aware scheduling matters.
- Expressions must be wrapped in `cron(...)`. The full schedule string in a CloudFormation template or Terraform resource is `cron(*/5 * * * ? *)`, not `*/5 * * * ? *`.
- Year field is required even if you want "any year" — use `*`. EventBridge will reject a 5-field expression.
Used by
- AWS EventBridge Scheduler
- AWS Lambda scheduled invocations (via EventBridge rules)
- Amazon ECS scheduled tasks
- AWS CodePipeline scheduled triggers
- AWS Glue scheduled crawlers and jobs
AWS EventBridge cron is essentially a stripped-down Quartz (no seconds, year required). The ? placeholder and Sun=1 numbering are the most common porting bugs when copying expressions from Linux crontab or Kubernetes CronJob.
Once the expression parses, everything after that — choosing between classic EventBridge Rules and EventBridge Scheduler, wiring targets and IAM roles, per-schedule timezones, dead-letter queues and monitoring — is covered in the AWS EventBridge Scheduler setup guide.