AWS cron expressions - full guide for EventBridge & Lambda
At 04:30, every day.
Next runs · UTC
- —
- —
- —
- —
- —
Calendar
September 2026 · UTC
0 runs
About this tool
cron(...), always six fields, and the day-of-month / day-of-week conflict always resolved with ?.AWS cron syntax - the 6 fields
cron(MIN HOUR DOM MONTH DOW YEAR)
cron( 0 9 ? * MON-FRI * )- Minute 0-59
- Hour 0-23
- Day-of-month 1-31, or
?,L,W,L-N - Month 1-12 or JAN-DEC
- Day-of-week 1-7 or SUN-SAT, or
?,L,# - Year 1970-2199 (most users put
*)
Common AWS cron expressions
cron(* * * * ? *)- every minutecron(*/5 * * * ? *)- every 5 minutescron(*/15 * * * ? *)- every 15 minutescron(0 * * * ? *)- every hourcron(0 9 * * ? *)- daily at 09:00 UTCcron(0 9 ? * MON-FRI *)- weekdays at 09:00cron(0 0 1 * ? *)- first of every month at midnightcron(0 0 L * ? *)- last day of every month at midnightcron(0 9 ? * 6L *)- last Friday of every month at 09:00cron(0 9 ? * 2#1 *)- first Monday of every month at 09:00
AWS CDK example
import * as events from 'aws-cdk-lib/aws-events';
import * as targets from 'aws-cdk-lib/aws-events-targets';
new events.Rule(this, 'WeekdayMorningRule', {
schedule: events.Schedule.expression('cron(0 9 ? * MON-FRI *)'),
targets: [new targets.LambdaFunction(myLambda)],
});For the newer EventBridge Scheduler:
import * as scheduler from 'aws-cdk-lib/aws-scheduler';
new scheduler.CfnSchedule(this, 'WeekdayMorningSchedule', {
scheduleExpression: 'cron(0 9 ? * MON-FRI *)',
scheduleExpressionTimezone: 'America/New_York',
flexibleTimeWindow: { mode: 'OFF' },
target: { arn: myLambda.functionArn, roleArn: schedulerRole.roleArn },
});Common AWS cron pitfalls
- 5 fields rejected - you must include the year, even if it's
*. - UTC by default - EventBridge Rules ignore the system timezone. Use EventBridge Scheduler with
ScheduleExpressionTimezonefor local time. - Both day fields restricted - AWS rejects expressions with values in both day-of-month and day-of-week. Use
?in one. - Latency tolerance - EventBridge guarantees fire-within-a-minute, not fire-at-the-second.
Examples
- 0 18 * * *Every day at 18:00
- 0 */5 * * *Every 5 hours
- 0 18 * * 1-5Weekdays at 18:00
- 0 0 1 * *Once a month, on the 1st at midnight
Cheatsheet
Full cheatsheet| Field | Req. | Range | Wildcards |
|---|---|---|---|
| minute | yes | 0-59 | , - * / |
| hour | yes | 0-23 | , - * / |
| day of month | yes | 1-31 | , - * / |
| month | yes | 1-12 or JAN-DEC | , - * / |
| day of week | yes | 0-6 or names; some dialects use 0-7 or 1-7 — see Dialects | , - * / |
Frequently asked questions
Syntax
How many fields does an AWS cron expression have?
Six: minute, hour, day-of-month, month, day-of-week, year. The expression is wrapped in cron(...). Standard 5-field Unix crontab is rejected - you must include the year (use * for every year).
Which Quartz modifiers does AWS support?
AWS supports ? for an unspecified day field, L for last-day rules, W for the weekday nearest a day-of-month, and # for an nth weekday. It also supports *, ,, -, and /.
Can an AWS cron expression target one year?
Yes. Put the year in the sixth field, such as cron(0 9 1 1 ? 2027) for 09:00 UTC on January 1, 2027. Expression: 0 9 1 1 ? 2027
Timing
When should I use rate(...) instead of cron(...)?
Use rate(1 minute) for one minute and rate(N minutes) for larger intervals, with the same singular/plural rule for hours and days. Rate schedules are relative intervals; use cron(...) for specific calendar times such as 09:00 on weekdays.
What AWS cron runs every day at noon?
Use cron(0 12 * * ? *). The editor expression is the bare six-field value; AWS configuration adds the cron(...) wrapper. Expression: 0 12 * * ? *
Can EventBridge cron run every second?
No. EventBridge cron has no seconds field and its minimum interval is one minute. Use cron(* * * * ? *) for every minute. Expression: * * * * ? *
Days and months
Why must I use ? in either day-of-month or day-of-week?
AWS follows the Quartz convention: you can specify either day-of-month or day-of-week as a value, but not both. Exactly one must be ? (no specific value). The most common pattern is cron(0 9 * * ? *) (every day at 09:00) or cron(0 9 ? * MON-FRI *) (every weekday at 09:00).
What AWS cron runs at noon on weekdays?
Use cron(0 12 ? * MON-FRI *). The ? leaves day-of-month unspecified while MON-FRI defines the weekday range. Expression: 0 12 ? * MON-FRI *
What AWS cron runs on the last day of every month?
Use cron(0 0 L * ? *) for midnight on the final calendar day of each month. L is in day-of-month, so day-of-week is ?. Expression: 0 0 L * ? *
What AWS cron runs on the second Monday of each month?
Use cron(0 9 ? * MON#2 *) for 09:00 on the second Monday. The # operator selects the nth weekday occurrence. Expression: 0 9 ? * MON#2 *
Timezones and DST
What timezone do AWS cron expressions use?
By default, all EventBridge Rules run in UTC. The newer EventBridge Scheduler (a separate service) supports a ScheduleExpressionTimezone parameter - pass an IANA timezone like 'America/New_York' to schedule in local time.
How does EventBridge Scheduler handle daylight-saving time?
With an IANA timezone, EventBridge Scheduler skips a nonexistent spring-forward local time and runs once, not twice, when fall-back repeats a local time. EventBridge Rules remain UTC.
Timezone referencePlatforms
What's the difference between EventBridge Rules and EventBridge Scheduler?
EventBridge Rules combine event routing with UTC schedules. EventBridge Scheduler is the dedicated scheduling service and adds IANA timezones, one-time schedules, flexible delivery windows, retries, and dead-letter queues. Both accept cron(...) expressions.
Debugging
Why does AWS reject a valid-looking five-field cron?
AWS requires six fields including year and the cron(...) wrapper. Add ? to one day field and a year such as *, then validate the bare six-field value in the editor.
Crontap
Can I run an AWS-style schedule on Crontap?
You can run the equivalent HTTP schedule on Crontap after converting the AWS wrapper to the editor's bare expression and choosing the intended timezone.
Schedule API callsWrite the cron here. Run it on Crontap.
Point Crontap at any URL. Pick any cron. Done.
WordPress, Shopify, Railway, Cloud Run, Vercel, HubSpot, Ghost, your own box. If it answers HTTP, Crontap can drive it on a clock you can read, in the timezone that actually matters, and page you when something breaks.
1.9k+ teams · Free forever tier · No credit card