AWS Cron Expression Generator

Build an AWS EventBridge schedule expression and understand exactly what it does. AWS cron is not standard cron: it has six fields including a year, it requires a ? in either day-of-month or day-of-week, and it supports L, W, and #. This tool generates valid cron() and rate() expressions, validates them against AWS's rules, and explains the schedule in plain English. EventBridge runs all schedules in UTC.

Minutes
Hours
Day-of-month
Month
Day-of-week
Year
Schedule expression

How to use the AWS Cron Expression Generator

For a calendar schedule, leave cron() selected and either pick a quick preset or edit the six fields directly. The expression and a plain-English description update as you type, and any rule violation — an out-of-range value, or the day-of-month / day-of-week ? rule — is flagged. For a simple repeating interval, switch to rate() and set a value and unit; AWS requires the singular unit (minute) when the value is 1.

Copy the finished expression into an EventBridge Scheduler schedule, an EventBridge rule, or a CloudWatch Events rule — in the console, in CloudFormation/Terraform, or the CLI. Remember that all schedules are evaluated in UTC unless you are using EventBridge Scheduler with an explicit timezone, so convert your local time before filling in the hours field.

How AWS cron differs from standard cron

EventBridge (and the older CloudWatch Events) schedule rules accept two forms. A rate() expression fires on a fixed interval — rate(5 minutes), rate(1 hour), rate(7 days) — and is the simplest way to say "every N units". A cron() expression fires on a calendar pattern and is where the differences from Unix cron appear.

AWS cron has six fields, not five: minutes, hours, day-of-month, month, day-of-week, and a year field that standard cron lacks. The biggest gotcha is the day rule: you cannot use * in both day-of-month and day-of-week, because that would be ambiguous. Whichever one you are not constraining must be a question mark ?. So "every day at noon" is cron(0 12 * * ? *) — a star in day-of-month and a ? in day-of-week — not the all-stars expression Unix cron would use.

The fields also support special characters beyond the usual * , - /. L means "last" — last day of the month in the day-of-month field, or the last given weekday in the day-of-week field. W finds the nearest weekday to a date (15W is the weekday closest to the 15th). # picks the nth weekday of the month (FRI#1 is the first Friday). Day-of-week values run 1–7 with 1 = Sunday, or the three-letter names SUN–SAT, and months accept 1–12 or JAN–DEC. Getting these details right is the difference between a job that runs when you expect and one that silently never fires.

Common use cases

  • Scheduled Lambda. Trigger a function on a calendar pattern via EventBridge.
  • Periodic ECS / batch jobs. Run a task every N minutes or every weekday morning.
  • Infrastructure as code. Generate the expression string for CloudFormation or Terraform.
  • Debugging a schedule. Paste an expression to read back exactly when it fires.

Frequently asked questions

Why does my expression need a question mark?

AWS cron does not allow * in both the day-of-month and day-of-week fields, because specifying both would be ambiguous. The field you are not using must be ?. For example "every day at 12:00" is cron(0 12 * * ? *), with * in day-of-month and ? in day-of-week.

What timezone do AWS schedules use?

Classic EventBridge and CloudWatch Events rules always run in UTC, so convert your local time first. EventBridge Scheduler (the newer service) additionally lets you set a timezone per schedule, in which case the hours field is interpreted in that zone.

When should I use rate() instead of cron()?

Use rate() for a plain fixed interval — every 5 minutes, every hour, every day — where the exact clock time does not matter. Use cron() when you need a specific time of day, day of week, or day of month. rate() requires a singular unit when the value is 1, e.g. rate(1 day).

How are weekdays numbered?

In AWS cron, day-of-week is 1 to 7 where 1 is Sunday and 7 is Saturday, or the three-letter abbreviations SUN through SAT. This differs from some Unix crons where 0 is Sunday, so double-check when porting an expression.

What do L, W, and # mean?

L means last — the last day of the month, or with a weekday the last such weekday. W finds the nearest weekday to a given day-of-month. # selects the nth weekday of the month, so FRI#1 is the first Friday. These appear in the day-of-month and day-of-week fields.