Home › AWS EventBridge Cron Generator
AWS EventBridge Cron Generator
Build your AWS cron expression below. The generator enforces AWS rules: one of day-of-month or day-of-week must be ?. All times are UTC.
Quick presets
? - AWS EventBridge does not allow both to be set.
* * ? * * *
Runs every minute (UTC)
Use in AWS Console
EventBridge Scheduler rule (wrap with cron()):
cron(* * ? * * *)
AWS CLI / CloudFormation:
ScheduleExpression: "cron(* * ? * * *)"
AWS EventBridge Cron Rules
Always 6 fields
AWS EventBridge requires exactly 6 fields. The 6th field is Year and accepts * for any year or a specific 4-digit year.
Day-of-month OR Day-of-week, never both
You cannot set both Day and Weekday to specific values - one must be ?.
If you set Day to 15, Weekday must be ?. If you set Weekday to MON-FRI, Day must be ?.
AWS day-of-week: SUN=1, not 0
AWS EventBridge numbers days 1-7, starting with Sunday=1 (not 0 like Linux cron).
Use named values (MON, TUE, WED, THU, FRI, SAT, SUN) to avoid confusion - MON-FRI is clearer than 2-6.
Everything is UTC
AWS EventBridge cron schedules always run in UTC. There is no timezone configuration at the rule level. If you need local time, convert to UTC before writing the expression, or use EventBridge Scheduler which does support timezones.
Minimum interval: 1 minute
EventBridge does not support sub-minute scheduling. For more frequent execution, use a Lambda function that loops internally, or Step Functions.
Cron vs Rate expressions
AWS supports both. rate(5 minutes) is simpler for uniform intervals.
Use cron() when you need a specific time of day, specific days, or a schedule that does not fit a simple interval.
See the AWS EventBridge Scheduler docs.
Validate before deploying
Invalid AWS cron expressions are rejected at deploy time. Validate first:
AWS Cron ValidatorLambda, Glue, ECS, CDK and Batch
Lambda cron job - daily at 2 AM UTC
cron(0 2 * * ? *)
Glue job - weekdays at 6 AM UTC
cron(0 6 ? * MON-FRI *)
ECS scheduled task - first of month
cron(0 8 1 * ? *)
AWS CDK Schedule.cron()
Schedule.cron({
minute: '0',
hour: '2',
day: '*',
month: '*'
})
CDK handles the ? rule automatically. Omitted fields default to *.
AWS Batch scheduled job
cron(0 3 ? * MON-FRI *)
AWS Batch uses EventBridge Scheduler to trigger job queues. Same 6-field UTC syntax.
AWS Cron Expression Examples
| Expression | Description | Notes | |
|---|---|---|---|
* * * * ? * | Every minute | All UTC times | |
*/5 * * * ? * | Every 5 minutes | ||
0 * * * ? * | Every hour | ||
0 0 * * ? * | Daily at midnight UTC | ||
0 2 * * ? * | Daily at 2:00 AM UTC | Common for Lambda backups | |
0 9 ? * MON-FRI * | Weekdays at 9:00 AM UTC | ||
0 0 1 * ? * | First of every month at midnight | ||
0 0 ? * 1 * | Every Sunday at midnight UTC | SUN=1 in AWS | |
0 6 ? * MON-FRI * | Weekdays at 6 AM UTC | Common for Glue jobs | |
0 8 1 * ? * | First of month at 8 AM UTC | Monthly reports | |
0 */6 * * ? * | Every 6 hours | ||
30 8 ? * MON * | Every Monday at 8:30 AM UTC |
AWS Invalid Cron Expression - Common Errors
Both Day and Weekday set
cron(0 9 15 * FRI *) # invalid cron(0 9 15 * ? *) # correct: day set, weekday ? cron(0 9 ? * FRI *) # correct: weekday set, day ?
AWS rejects the expression at rule creation time with an InvalidScheduleException.
Missing Year field
cron(0 9 * * FRI) # invalid - 5 fields cron(0 9 ? * FRI *) # correct - 6 fields
The Year field is mandatory. Always add * as the 6th field unless you need a specific year.
Using Linux day-of-week numbering
cron(0 9 ? * 0 *) # 0=Sunday in Linux, invalid in AWS cron(0 9 ? * 1 *) # 1=Sunday in AWS, correct cron(0 9 ? * SUN *) # clearest, no ambiguity
Using * instead of ? when specifying the other field
cron(0 9 * * MON-FRI *) # ambiguous in AWS cron(0 9 ? * MON-FRI *) # correct
When you specify a weekday, the day-of-month field must be ?, not *. AWS treats * and ? differently.