Skip to content

feat(aws): EventBridge Scheduler schedules + groups - #1253

Merged
NitinKumar004 merged 2 commits into
developmentfrom
feat/aws-scheduler
Sep 7, 2026
Merged

feat(aws): EventBridge Scheduler schedules + groups#1253
NitinKumar004 merged 2 commits into
developmentfrom
feat/aws-scheduler

Conversation

@NitinKumar004

Copy link
Copy Markdown
Collaborator

Summary

Adds the standalone Amazon EventBridge Scheduler control plane as a new AWS surface (wire service `scheduler`, restJson1 verb+path). This is distinct from the existing `eventbridge` service and from GCP Cloud Scheduler (`services/scheduler`); to avoid the directory collision with the latter, the new service lives under `eventbridgescheduler`.

Control-plane only — schedules are never fired at their targets.

Operations

  • Schedules: CreateSchedule (POST /schedules/{Name}), GetSchedule, UpdateSchedule (PUT, full replace), DeleteSchedule, ListSchedules — GroupName defaults to `default`.
  • Schedule groups: CreateScheduleGroup (POST /schedule-groups/{Name}), GetScheduleGroup, DeleteScheduleGroup (cascades to its schedules), ListScheduleGroups. The `default` group always exists implicitly and cannot be deleted.
  • Tags (schedule groups only): TagResource / UntagResource / ListTagsForResource on /tags/{arn}, scoped to `:scheduler:` ARNs.

Drift-free computed fields

  • Schedule ARN `arn:aws:scheduler:::schedule//`, group ARN `arn:aws:scheduler:::schedule-group/`, creation/last-modification dates and group ACTIVE state are minted once at create and stored, stable across every read and after update.
  • `target` and `flexible_time_window` (plus start/end dates) round-trip verbatim via json.RawMessage passthrough so nested blocks cannot drift.

Architecture

Follows the restJson1 siblings (mq/grafana/aps): 3-layer split (services/driver, providers/aws, server/aws), COW memstore with deep-clone-on-read, Snapshottable, X-Amzn-Errortype exception tagging. Registered before the S3 catch-all; /schedules and /schedule-groups are unique roots and /tags is scoped by `:scheduler:`, disjoint from sibling tag claimants.

Terraform plan-clean e2e

Against `cloudemu serve` with a real `hashicorp/aws` provider (scheduler endpoint override):

  • `apply` — aws_scheduler_schedule_group + aws_scheduler_schedule (schedule_expression="rate(1 hour)", flexible_time_window mode=OFF, target arn+role_arn) created with correct computed ARNs.
  • `plan -detailed-exitcode` → exit 0, no drift on schedule/group arn, creation_date, state, target and flexible_time_window blocks.
  • Update (description + state=DISABLED) applies, then plan-clean again.
  • `destroy` → subsequent GET returns 404 ResourceNotFoundException.

SDK round-trip tests (aws-sdk-go-v2/service/scheduler, test-only) assert byte-stable create→get→update→delete.

Add the standalone Amazon EventBridge Scheduler control plane (wire service
scheduler, restJson1) as a new AWS surface, distinct from the classic
eventbridge service and from GCP Cloud Scheduler. Covers CreateSchedule/Get/
Update/Delete/List, CreateScheduleGroup/Get/Delete/List, and Tag/Untag/
ListTagsForResource on schedule groups. Computed fields (schedule arn, group
arn, creation/last-modification dates, group ACTIVE state) are minted once at
create and stored; target and flexible_time_window round-trip verbatim so an
IaC plan stays drift-free.
@NitinKumar004
NitinKumar004 merged commit 1f3db17 into development Sep 7, 2026
23 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant