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) and W (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 than cron(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.