AWS EventBridge Cron Expression Generator
Generate cron expressions for AWS EventBridge (CloudWatch Events) schedules. EventBridge uses a 6-field cron syntax distinct from standard Unix cron — build and validate expressions here.
Build EventBridge Cron Schedules
AWS EventBridge Scheduler and CloudWatch Events use a 6-field cron format with a required year field and different wildcard rules than standard cron. Generate valid expressions for Lambda triggers, Step Functions, and scheduled ECS tasks.
- 6-field syntax: Minutes, Hours, Day-of-month, Month, Day-of-week, Year
- AWS-specific rules: Day-of-month and Day-of-week can't both be specified — one must be
? - Rate vs. cron: Compare EventBridge cron expressions against the simpler
rate()syntax - UTC always: EventBridge cron runs in UTC — convert your local time correctly
EventBridge Cron vs. Standard Unix Cron
- Field count: EventBridge uses 6 fields (adds Year); Unix cron uses 5 fields (no Year)
- Day-of-week/month conflict: In Unix cron, both can be set and act as OR. In EventBridge, exactly one must be
?— setting both is an error - Day-of-week numbering: EventBridge uses 1=Sunday through 7=Saturday (not 0-indexed like some Unix implementations); also supports SUN–SAT abbreviations
- L and W support: EventBridge supports
L(last day) andW(nearest weekday) modifiers; standard Unix cron does not - No @reboot, @daily shortcuts: EventBridge doesn't support Unix cron's @ notation — use explicit 6-field expressions
Common EventBridge Cron Examples
- Every day at 9am UTC:
cron(0 9 * * ? *) - Every weekday at 6pm UTC:
cron(0 18 ? * MON-FRI *) - First day of every month at midnight:
cron(0 0 1 * ? *) - Every 15 minutes:
rate(15 minutes)— simpler thancron(0/15 * * * ? *) - Every Sunday at 2am UTC:
cron(0 2 ? * SUN *) - Last day of month at noon:
cron(0 12 L * ? *)
Frequently Asked Questions
Should I use cron() or rate() for EventBridge schedules?
Use rate() for simple fixed intervals: rate(5 minutes), rate(1 hour), rate(7 days). It's more readable, less error-prone, and doesn't require understanding the 6-field syntax. Use cron() when you need calendar-based scheduling: specific times of day, specific days of the week or month, or business-hours-only schedules. Both are equally reliable — the choice is about expressiveness, not performance.
Why does EventBridge require ? in day-of-month or day-of-week?
AWS's EventBridge cron implementation requires exactly one of day-of-month or day-of-week to be a question mark (?) meaning "no specific value." This is because combining both fields is ambiguous — does "run on the 15th AND on Mondays" mean both conditions must be true simultaneously, or either one? To avoid this ambiguity, EventBridge enforces that you specify only one. A common mistake is writing cron(0 9 * * * *) — this is invalid; it must be cron(0 9 * * ? *) or cron(0 9 ? * * *).
How do I schedule a Lambda for 9am in a specific timezone?
EventBridge cron always runs in UTC. Convert your local time to UTC: 9am EST = 14:00 UTC; 9am PST = 17:00 UTC. For daylight saving time handling, AWS EventBridge Scheduler (the newer service) natively supports timezone-aware schedules — specify America/New_York as the timezone and set 9am directly without manual UTC conversion. CloudWatch Events (legacy) does not support timezones natively.