Migrate from AWS EventBridge Scheduler

Move EventBridge Scheduler schedules that call HTTP endpoints to SteadyCron — list schedules with the AWS CLI, convert the cron expressions, and drop the IAM wiring.

EventBridge Scheduler is the right tool when a schedule triggers AWS resources. When all a schedule does is call an HTTP endpoint, you’re maintaining IAM roles, API destinations, connections, and dead-letter queues for what is conceptually one line of YAML. SteadyCron replaces that wiring with a monitored HTTP job — retries, timeout enforcement, alerts, and an execution log included, hosted in the EU.

1. List your schedules

aws scheduler list-schedules --output table
aws scheduler get-schedule --name nightly-report

For each schedule that targets an API destination (an HTTP endpoint), note the URL, method, headers, the schedule expression, and the timezone.

2. Convert the schedule expression

EventBridge uses six-field cron with ? and rate expressions; SteadyCron uses standard five-field cron or a plain interval in seconds:

EventBridgeSteadyCron
cron(0 2 * * ? *)schedule: "0 2 * * *"
cron(*/15 * * * ? *)schedule: "*/15 * * * *"
rate(10 minutes)interval: 600
rate(1 hour)schedule: "0 * * * *" or interval: 3600

(Drop the seconds/year fields and replace ? with *.)

3. Recreate each schedule as an HTTP job

jobs:
  - id: nightly-report
    name: Nightly report
    kind: http
    method: POST
    url: https://app.example.com/tasks/nightly-report
    schedule: "0 2 * * *"
    timezone: Europe/Berlin
    retries: 3
    headers:
      Authorization: Bearer ${CRON_SECRET}   # resolved from --env-file at apply time
steadycron validate steadycron.yaml
steadycron apply steadycron.yaml --env-file secrets.env --namespace prod

The auth header replaces the EventBridge connection credentials; retries replace the RetryPolicy; the execution log replaces CloudWatch spelunking.

4. Run both in parallel, then clean up

Once SteadyCron shows green runs, disable the EventBridge schedule (aws scheduler update-schedule --state DISABLED …), then delete the schedule, the API destination, the connection, and the now-unused IAM role.

What you gain

EventBridge SchedulerSteadyCron
Setup for one HTTP jobSchedule + API destination + connection + IAM roleOne YAML block
RetriesRetryPolicy (config per schedule)Per-job, exponential backoff
Failure visibilityCloudWatch metrics/logsExecution log + alerts (email, Slack, Discord, Telegram, webhook)
Heartbeat monitoringNoYes
Config as codeCloudFormation/Terraform (verbose)YAML manifest or official Terraform provider
HostingYour AWS regionEU (GDPR-native, signed DPA)

Next steps