# Dev/Test Aurora -- Switch to Serverless v2

> Dev and test Aurora clusters named dev, test, qa, staging, or sandbox get an off-hours pause schedule instead of a vague Serverless v2 advisory. ZopNight prices savings as member-instance compute times the measured idle fraction, clamped to 1. Storage keeps billing while paused, so only compute counts.

Source: https://zop.dev/integrations/aws/recommendations/dev-test-aurora-switch-to-serverless-v2
Updated: 2026-08-19

---

## Gates a dev or test Aurora cluster must clear

- resource.Status: from DescribeDBClusters (rds_cluster.go); abstains when set and not available (covers stopped and transitional states such as creating/deleting/backing-up/failed). A stopped or transitional cluster runs no compute, cannot be meaningfully scheduled, and (per AWS) is billed only for storage/snapshots while stopped, so both actionability and the pricing baseline are wrong until it's available again. Empty/unknown status does not suppress (fail-open on unknown, parity with RC-190).
- Metadata: engine_mode; abstains when already serverless (MetadataStateMatches; the old hasTag(Tags,"engine_mode",...) guard was inert because the discoverer writes engine_mode to Metadata). Serverless v2 is also skipped (isAuroraServerlessV2): SV2 keeps engine_mode provisioned but already scales to near-minimum ACUs when idle, so an off-hours pause is the wrong lever.
- resource.Name: dev/test pattern (dev, test, qa, staging, sandbox), and not a production pattern (prod, production, live, prd).
- ScheduleData (aggregator heatmap, RC-093 path) keyed by UID; carries the measured off-hours idle fraction.
- member-instance compute cost: members resolved via ParentUID over evalCtx.Resources and priced from the injected pricing map (abstains when that basis is unavailable or ≤0).

## Why only member compute drops when the cluster pauses

concrete-or-abstain, re-keyed from the prior $0 "switch to Serverless v2" advisory to the schedule lever (pause/resume off-hours). Member-compute basis (misattribution fix): the aggregator prices a provisioned Aurora cluster row as storage only (calcRDSCluster; member compute lives on the child rds rows), and [Aurora storage keeps billing while a cluster is paused](https://aws.amazon.com/rds/aurora/pricing/), so savings = memberCompute × clamp(ScheduleData.IdlePercentage, 0, 1) (not pricing[cluster_uid] × IdlePercentage, which credited a cost component that does not drop with the pause). The idle fraction is upper-clamped to 1 so a malformed heatmap value can never push the saving above the pauseable member compute, making the guarantee savings ≤ memberCompute explicit, the same ceiling the service-layer per-UID clamp would enforce if this rec were booked on the member UID. CurrentCostUSD = memberCompute + cluster storage price when known; only the compute share scales with the schedule. Abstains when ScheduleData is absent, IdlePercentage ≤ 0, or the member-compute basis cannot be established (no fleet view / no member rows / members unpriced). No fabricated flat fraction, no $0/advisory rec. (The Serverless v2 migration is mentioned only as secondary remediation guidance.)

## Applying the off-hours pause schedule

1. Review the recommended off-hours schedule (Start/Stop/Timezone from ScheduleData)
2. Apply it from this recommendation to pause/resume the Aurora cluster automatically
3. For bursty workloads, also evaluate migrating to Aurora Serverless v2 so capacity scales to near-zero ACUs during inactivity

## Why the schedule heatmap replaces metrics

None (uses ScheduleData)
