Platform schedule guide

AWS EventBridge Cron Expression Guide

Build AWS EventBridge Scheduler cron expressions correctly. Learn its six fields, question-mark rule, timezone and DST behavior, 60-second precision, CLI setup, retries, and DLQs.

Platform behavior reviewed against the official documentation on August 5, 2026.

Format
6 fields inside cron(...)
Precision
60 seconds
Timezone
UTC or chosen IANA zone
Year range
1970-2199

Overview

Amazon EventBridge Scheduler is AWS’s purpose-built managed scheduler. It can invoke AWS API targets on recurring cron or rate schedules and can also create one-time schedules. For new scheduled workloads it is usually the clearer choice than legacy EventBridge scheduled rules.

Its cron grammar looks like Quartz but is not the same expression shape used by Quartz Scheduler or Spring. EventBridge uses minutes first, has no seconds field, and requires a year field: cron(minutes hours day-of-month month day-of-week year).

Scheduler adds production controls around the expression: an IANA timezone, flexible delivery windows, retry policy, dead-letter queue, start and end dates, and an execution role for the target.

EventBridge Scheduler cron format

All six fields are required. Use ? in either day-of-month or day-of-week when the other field carries the calendar constraint. This avoids the ambiguous Unix behavior where both fields can match independently.

Do not prepend a seconds value. For example, daily at 09:00 is cron(0 9 * * ? *), not a seven-field Quartz expression and not the five-field Unix string by itself.

┌───────────── minute (0-59)
│ ┌───────────── hour (0-23)
│ │ ┌───────────── day of month (1-31, ?, L, W)
│ │ │ ┌───────────── month (1-12 or JAN-DEC)
│ │ │ │ ┌───────────── day of week (1-7 or SUN-SAT, ?, L, #)
│ │ │ │ │ ┌───────────── year (1970-2199)
│ │ │ │ │ │
* * * * ? *
AWS EventBridge Scheduler schedule fields and valid values
FieldPositionValuesPlatform note
Minute10-59The smallest schedule precision is one minute.
Hour20-23Resolved in UTC or ScheduleExpressionTimezone.
Day of month31-31, ?, L, WUse ? when day of week is constrained.
Month41-12, JAN-DECLists, ranges, and step values are supported.
Day of week51-7, SUN-SAT, ?, L, #Use ? when day of month is constrained; # accepts one occurrence expression.
Year61970-2199Use * for every supported year.

Copyable schedule examples

Every day at 09:00 in the configured timezone

cron(0 9 * * ? *)

Every 15 minutes, starting at minute 0

cron(0/15 * * * ? *)

Weekdays at 09:00

cron(0 9 ? * MON-FRI *)

First day of every month at midnight

cron(0 0 1 * ? *)

Last Friday of every month at 10:15

cron(15 10 ? * 6L *)

First Monday of every month at 08:00

cron(0 8 ? * MON#1 *)

Create an EventBridge schedule with the AWS CLI

This example invokes a Lambda function every weekday at 09:00 Europe/Istanbul time. FlexibleTimeWindow is explicitly disabled so Scheduler uses its normal 60-second precision.

aws scheduler create-schedule   --name weekday-report   --schedule-expression 'cron(0 9 ? * MON-FRI *)'   --schedule-expression-timezone 'Europe/Istanbul'   --flexible-time-window '{"Mode":"OFF"}'   --target '{
    "Arn":"arn:aws:lambda:eu-central-1:123456789012:function:report",
    "RoleArn":"arn:aws:iam::123456789012:role/SchedulerExecutionRole",
    "RetryPolicy":{"MaximumRetryAttempts":3,"MaximumEventAgeInSeconds":3600}
  }'

Deployment checklist

  1. Create a least-privilege execution role that EventBridge Scheduler can assume and that can invoke only the target operation.
  2. Choose a timezone deliberately; leave it at UTC only when the business requirement is truly UTC-based.
  3. Configure a retry policy and a standard SQS dead-letter queue for failed target delivery.
  4. Inspect CloudWatch metrics and target-side success signals after the first scheduled invocation.

Timezone, DST, and delivery window

EventBridge Scheduler evaluates a cron schedule in UTC unless you choose an IANA timezone with ScheduleExpressionTimezone. A named zone lets 09:00 remain 09:00 local time as offsets change.

For a spring-forward time that does not exist, Scheduler skips that invocation. During fall-back, it invokes the repeated local time once rather than twice. UTC schedules are not affected by daylight-saving transitions.

All schedule types invoke targets with 60-second precision when no flexible window is set. A flexible time window intentionally allows delivery later within the configured window and is useful for smoothing large fleets of jobs.

ScheduleExpression: cron(30 8 * * ? *)
ScheduleExpressionTimezone: America/New_York
FlexibleTimeWindow:
  Mode: OFF

Limits and platform behavior

No seconds field
EventBridge cron starts with minute and has one-minute granularity. A leading Quartz seconds field shifts every value into the wrong position.
Six required fields
The year is required for EventBridge Scheduler. Use * when the schedule should continue across all supported years.
Day-field rule
Do not use * in both day-of-month and day-of-week. Constrain one field and use ? in the other.
Distributed invocation
A target is called within the scheduled minute, not at an exact second. Design downstream processing around the scheduled timestamp and an idempotency key.

Production gotchas

  • Confusing Scheduler with legacy rules

    Legacy scheduled rules are UTC-only and have different surrounding features. Confirm which EventBridge scheduling product your infrastructure creates.

  • Missing target permissions

    A valid cron expression still fails if the Scheduler execution role cannot invoke the target or its trust policy is wrong.

  • Retries without idempotency

    A retry can deliver the same logical schedule more than once. Pass a stable key or scheduled timestamp to make writes safe to repeat.

  • No dead-letter queue

    Without a DLQ, exhausted delivery failures are harder to investigate and replay. Treat a DLQ and alarm as part of the schedule.

Frequently asked questions

How many fields are in an AWS EventBridge cron expression?

EventBridge Scheduler requires six fields: minute, hour, day of month, month, day of week, and year, wrapped in cron(...). It does not include seconds.

Can EventBridge Scheduler use a local timezone?

Yes. Set ScheduleExpressionTimezone to an IANA timezone. If no timezone is selected, the schedule is evaluated in UTC.

Why does EventBridge cron use a question mark?

Use ? in one of the two day fields when the other is constrained. For a weekday schedule, set day of month to ?; for a calendar-date schedule, set day of week to ?.

Does EventBridge Scheduler have second-level precision?

No. Scheduler invokes targets with 60-second precision, and a flexible time window can intentionally widen delivery timing.

Official documentation and related guides