
Amazon EventBridge Scheduler
EventBridge’s serverless scheduler: millions of one-time or recurring schedules, each of which calls an AWS API at a set time in any time zone.
- What it is
- Event buses,Workflow orchestration
- Type
- Managed service on AWS
- Made by
- Amazon Web Services
- License
- Proprietary
- Facts checked
- 6 October 2026
What it is
A schedule is a small stored resource with three parts: when, what and how. “When” is a schedule expression: rate(15 minutes) for a fixed interval, a six-field cron(...) expression for calendar patterns such as the last Friday of each month, or at(2026-11-02T09:00:00) for a single run. Cron and one-time schedules are evaluated in any IANA time zone, with daylight saving time handled for you. “What” is a target: Scheduler assumes an IAM execution role you give it and calls one AWS API with your input as the request. “How” covers the delivery settings: an optional flexible window, a retry policy and a dead-letter queue.
Targets come in two forms. Templated targets cover a short list of common calls, such as Lambda Invoke, SQS SendMessage, SNS Publish, Step Functions StartExecution, EventBridge PutEvents and ECS RunTask, so you only pass the resource’s ARN. The universal target takes an ARN like arn:aws:scheduler:::aws-sdk:ec2:stopInstances and a JSON request body, which reaches more than 270 services and 6,000 API operations without a glue function in between. Read-only calls (anything starting with get, list, describe, query and similar) are excluded.
Schedules fire with one-minute precision: a run set for 1:00 happens between 1:00:00 and 1:00:59, or anywhere inside a flexible window of up to 1,440 minutes if you set one. Delivery is at least once. If the target fails, Scheduler retries with exponential backoff, by default for up to 24 hours and 185 attempts, then drops the event or sends it to an SQS dead-letter queue with the error attached.
Why teams pick it
- Built for per-user timers: 10 million schedules per Region by default, adjustable to billions, so a reminder or trial expiry per customer needs no polling table
- Real time zones: cron and one-time schedules follow IANA zones and daylight saving time, where the legacy scheduled rules run only in UTC
- Calls almost any AWS API directly, with retries, a dead-letter queue and flexible windows to spread load on the target
- Pay per call: 14 million invocations a month free, then $1.00 per million in US East, US West (Oregon) and Ireland
Watch out for
- One-minute precision at best, so it isn’t a fit for sub-minute timing
- At-least-once delivery: a target can run twice, so it should be idempotent
- Targets are AWS API calls only, with a 256 KB input; an outside HTTPS endpoint has to be reached through an event bus or a function
- Finished one-time schedules still count against the quota unless you set
ActionAfterCompletiontoDELETE; invocations above the default 1,000 per second (500 in other Regions) are delayed, not dropped
Alternatives
What all event buses have in common →How it fits with other technologies
What Amazon EventBridge Scheduler uses
- Amazon EventBridge Scheduleris part ofAmazon EventBridge
- Amazon EventBridge Schedulerinvokes functions inAWS Lambda
- Amazon EventBridge Schedulerstarts workflows inAWS Step Functions
- Amazon EventBridge Schedulersends messages and failed runs toAmazon SQS
- Amazon EventBridge Schedulerpublishes messages to topics inAmazon SNS
A self-deleting reminder, and a weekday job that calls the EC2 API · bash
aws scheduler create-schedule-group --name billing
# one run at 9:00 Berlin time; retried for up to an hour, then sent to a DLQ; deleted after it runs
aws scheduler create-schedule --name invoice-42-reminder --group-name billing \
--schedule-expression 'at(2026-11-02T09:00:00)' \
--schedule-expression-timezone 'Europe/Berlin' \
--flexible-time-window '{"Mode": "OFF"}' \
--action-after-completion DELETE \
--target '{"Arn": "arn:aws:lambda:us-east-1:111122223333:function:send-reminder",
"RoleArn": "arn:aws:iam::111122223333:role/scheduler-invoke",
"Input": "{\"invoiceId\": 42}",
"RetryPolicy": {"MaximumRetryAttempts": 10, "MaximumEventAgeInSeconds": 3600},
"DeadLetterConfig": {"Arn": "arn:aws:sqs:us-east-1:111122223333:reminder-dlq"}}'
# universal target: stop dev instances at 19:00 New York time on weekdays, within a 10-minute window
aws scheduler create-schedule --name stop-dev-instances \
--schedule-expression 'cron(0 19 ? * MON-FRI *)' \
--schedule-expression-timezone 'America/New_York' \
--flexible-time-window '{"Mode": "FLEXIBLE", "MaximumWindowInMinutes": 10}' \
--target '{"Arn": "arn:aws:scheduler:::aws-sdk:ec2:stopInstances",
"RoleArn": "arn:aws:iam::111122223333:role/scheduler-ec2",
"Input": "{\"InstanceIds\": [\"i-0abc123def4567890\"]}"}'Scheduler or a scheduled rule?#
EventBridge still has the older way to run things on a timer: a rule on the default event bus with a schedule instead of an event pattern. AWS’s docs now call these rules a legacy feature and recommend Scheduler.
| EventBridge Scheduler | Scheduled rule (legacy) | |
|---|---|---|
| Lives on | Its own API; no event bus needed | The default event bus only |
| Expressions | rate(), cron() and one-time at() | rate() and cron() |
| Time zone | Any IANA zone, with daylight saving time | UTC only |
| How many | 10 million schedules per Region by default | Shares the bus’s rule quota: 300 rules by default in most Regions |
| Targets | One per schedule: a templated target or any non-read AWS API | Up to five per rule from the event bus target list, including API destinations (HTTPS endpoints) |
| Precision | Within the minute, or a flexible window | One minute, with a possible delay of several seconds |
- A scheduled rule is still the simpler choice when the job is a single cron entry that needs to call an outside HTTPS API, because rules can target API destinations directly.
Delivery settings#
Each schedule carries its own delivery settings, so a nightly report and a payment reminder can fail in different ways.
Flexible time window
1 to 1,440 minSet Mode to FLEXIBLE and a maximum window, and Scheduler invokes the target somewhere inside it. Thousands of schedules set for the same minute then spread out instead of hitting the target at once. OFF means fire within the scheduled minute.
Retry policy
default 24 h, 185 triesMaximumRetryAttempts (0 to 185) and MaximumEventAgeInSeconds (60 to 86,400) bound how long Scheduler keeps retrying a failed call with exponential backoff.
Dead-letter queue
SQS standardWhen retries run out, Scheduler sends a JSON record of the attempt, with the error code and message, to a standard SQS queue (FIFO queues aren’t supported). Without one, the event is dropped.
Context attributes
Placeholders such as <aws.scheduler.scheduled-time>, <aws.scheduler.execution-id> and <aws.scheduler.attempt-number> in the input are filled in at each run, so a target can tell a retry from a first attempt.
Action after completion
since Aug 2023DELETE removes a one-time schedule after its run, or a recurring one after its last run before EndDate. Without it, finished schedules pile up against the quota.
Schedule groups
500 per RegionEvery account has a default group. Groups carry tags for access control and cost allocation, and deleting a group deletes all its schedules.
See it in a real stack
No architecture uses Amazon EventBridge Scheduler yet. Drop it into the playground and wire it up yourself.Open playground →Where it came from2016–2026
AWS has let you run things on a timer since January 2016, when CloudWatch Events launched and could “emit events on a schedule”. Those scheduled events became EventBridge scheduled rules: a rate or cron expression evaluated in UTC, on the default bus only, each one using up a rule from a quota of a few hundred. That suited a handful of cron jobs. It didn’t suit applications that needed a timer per user or per order, so, as AWS put it, many customers bought off-the-shelf tools or built their own schedulers.
On November 10, 2022 AWS launched EventBridge Scheduler in nine Regions as a separate API inside EventBridge. Schedules were their own resources rather than rules, with one-time at() expressions, time zones and daylight saving time, flexible windows, retries, dead-letter queues and a universal target that could call thousands of AWS APIs. The launch post, by Marcia Villalba, compared 1 million schedules per account with 300 scheduled rules, and gave examples such as task reminders sent through SNS, starting and stopping thousands of EC2 instances around store hours in each time zone, and ending a SaaS customer’s access when a subscription lapses.
Since then AWS has added 18 more Regions (March 2023), automatic deletion of finished schedules (August 2023) and PrivateLink access (March 2025). By 2026 the default had grown to 10 million schedules per Region, CreateSchedule allowed 5,000 requests per second in 11 large Regions, and a May 2026 update added 619 more SDK API actions as targets. EventBridge’s docs now call scheduled rules a legacy feature.
Why it’s built this way
- Schedules as their own resources, not rules on a bus
- A scheduled rule uses up the bus’s rule quota and lives on the default bus. Making each schedule a separate resource, with no bus involved, let one account hold millions of them, which per-user timers need.
- A universal target instead of a fixed target list
- AWS noted that home-grown schedulers were often limited in what they could trigger. Calling any AWS SDK action with an execution role means a schedule can stop an instance or start a pipeline without a Lambda function in between.
- Flexible time windows
- Many schedules set for the same minute would hit a target at once. Letting a schedule run anywhere in a window disperses the calls and reduces the load on downstream services.
- At-least-once delivery with long retries
- Scheduler retries for up to a day by default and can hand failures to a dead-letter queue, so a target that is briefly down or throttling still gets the call. The price is that the target may see it twice.
Timeline
- 2016
CloudWatch Events launches with events on a schedule, later EventBridge scheduled rules
- 2022
EventBridge Scheduler launches on November 10 in nine Regions
- 2023
18 more Regions in March; automatic deletion after completion in August
- 2025
AWS PrivateLink support for calling Scheduler from a VPC
- 2026
Default CreateSchedule rate rises to 5,000 per second; 619 more SDK actions as targets
- AWS What’s New: Introducing CloudWatch Events (Jan 2016)
- AWS What’s New: Amazon EventBridge launches new Scheduler (Nov 2022)
- AWS Compute Blog: Introducing Amazon EventBridge Scheduler, by Marcia Villalba (Nov 2022)
- AWS What’s New: EventBridge Scheduler is now available in 18 additional Regions (Mar 2023)
- AWS What’s New: EventBridge Scheduler adds schedule deletion after completion (Aug 2023)
- AWS What’s New: EventBridge Scheduler now supports AWS PrivateLink (Mar 2025)
- AWS What’s New: EventBridge Scheduler adds resource count metrics for quota monitoring (Feb 2026)
- AWS What’s New: EventBridge Scheduler provides a higher default quota for CreateSchedule (Mar 2026)
- AWS What’s New: EventBridge Scheduler adds 619 new SDK API actions (May 2026)
- AWS docs: Creating a scheduled rule (legacy) in Amazon EventBridge
Sources17 · facts checked 6 October 2026
- AWS docs: What is Amazon EventBridge Scheduler?
- AWS docs: Schedule types (rate, cron, one-time, time zones, daylight saving time)
- AWS docs: Configuring flexible time windows
- AWS API reference: FlexibleTimeWindow
- AWS API reference: RetryPolicy
- AWS docs: Configuring a schedule’s dead-letter queue
- AWS docs: Using templated targets
- AWS docs: Using universal targets
- AWS docs: Adding context attributes
- AWS docs: Deleting a schedule (deletion after completion)
- AWS docs: Managing a schedule group
- AWS docs: Quotas for Amazon EventBridge Scheduler
- AWS docs: Creating a scheduled rule (legacy) in Amazon EventBridge
- AWS docs: Amazon EventBridge quotas (rules per event bus)
- Amazon EventBridge pricing: Scheduler free tier and invocation price
- AWS Compute Blog: Introducing Amazon EventBridge Scheduler (Nov 2022)
- AWS What’s New: EventBridge Scheduler adds resource count metrics for quota monitoring (Feb 2026)
