Service spotlight: Aurora Serverless v2 without the v1 cold starts
Aurora Serverless v1 had a reputation problem, and it was earned: scale-to- zero meant a cold start that could take tens of seconds on the next connection, and scaling itself worked in coarse steps that didn’t handle sudden bursts well. Enough people got burned that “Aurora Serverless” became shorthand for “don’t.” v2 is a different architecture, not a patched v1, and it’s worth revisiting that reputation now that the two are easy to conflate.
What changed
v1 scaled by swapping the entire database to a differently-sized instance behind the scenes — a real cutover with a brief connection drop, done in discrete capacity steps. v2 scales capacity in place, in increments of 0.5 ACUs (Aurora Capacity Units, each roughly 2 GiB of memory plus proportional CPU and networking), typically in under a second, with no connection interruption. You set a min and max ACU range per cluster (as low as 0, up to 256 per instance) and Aurora adjusts within it continuously based on actual load — CPU, memory, and active connections — rather than stepping through a small number of predefined sizes.
Crucially, v2 instances can participate in a Global Database, use Multi-AZ with the same failover mechanics as provisioned Aurora, and even mix with provisioned instances in the same cluster (serverless reader, provisioned writer, or vice versa) — none of which v1 supported. That mixed- instance-class capability is the feature that makes it viable for real production topologies instead of just dev/test databases.
Where it earns its keep
- Variable, hard-to-predict load — a multi-tenant SaaS database where tenant activity spikes unpredictably, or a workload with a strong daily/ weekly cycle (busy on weekday mornings, near-idle overnight) where sizing for peak means paying for idle capacity most of the time.
- Dev/test/staging environments that see bursts of activity during work hours and near-zero the rest of the time — set a low min ACU and let it ride down without anyone managing an instance-stop/start schedule.
- New workloads where you genuinely don’t know the right instance size
** yet.** Instead of guessing an
r6g.xlargeand resizing later (a disruptive operation on provisioned Aurora), set a wide ACU range and let the actual traffic tell you where it settles — then, if it settles at a steady high number, consider whether provisioned pricing would now be cheaper for that stable load.
Where provisioned Aurora still wins
For a steady, predictable, high-utilization workload, provisioned Aurora with Reserved Instance pricing is cheaper than v2 at the equivalent capacity — the per-ACU-hour rate carries a premium over the equivalent provisioned instance-hour, same trade as Fargate versus EC2. If your database sits at a consistent 8 ACUs of load 24/7 with no meaningful variance, you’re paying for elasticity you’re not using.
There’s also a real floor: 0.5 ACU minimum for an “always-on” cluster is
roughly comparable to a small t4g instance’s baseline cost — v2 doesn’t
scale to true zero like v1 could (v2 got a scale-to-zero option later, but
it reintroduces a cold-start pause on the next connection, the exact
trade-off v2 was built to avoid at higher tiers, so it’s really only sane
for genuinely idle dev environments).
The scaling-lag gotcha
Scaling is fast but not instant, and it reacts to load — it doesn’t predict it. A workload that goes from idle to a hard spike in under a second (a flash-sale-style traffic burst) can briefly get throttled or see elevated latency while Aurora scales up to meet it, because there’s a real control loop with a reaction time, not a pre-provisioned buffer sitting ready. Setting a higher minimum ACU than “what average load needs” gives the scaling logic headroom to absorb bursts before it has to react, at the cost of paying for that headroom continuously — a direct latency-versus-cost knob, not a free win.
A practical tip
Watch the ServerlessDatabaseCapacity CloudWatch metric against your min/
max bounds for a couple of weeks under real traffic before treating the
range as tuned. A cluster that’s pinned at its max ACU most of the day isn’t
“elastic,” it’s a provisioned database paying the serverless premium —
that’s the signal to either raise the max or move to provisioned capacity
for the baseline and reserve v2 for genuinely variable secondary workloads.
Join the discussion
Comments for this post live on social — reply to the thread.
Related posts
Cloud roundup: macOS Screen Sharing bug now under attack
A patched macOS Screen Sharing flaw is being exploited to plant crypto miners, a Windows Defender bypass has no fix yet, and EC2 gets built-in app health checks.
Cutting NAT gateway costs with VPC endpoints that actually help
How gateway and interface VPC endpoints replace NAT gateway traffic for AWS API calls, what they cost instead, and which traffic still has to go through NAT.
Cloud roundup: S3 finally names the policy that denied you
AWS S3 access-denied errors now name the exact policy ARN, Client VPN gets a scriptable CLI, and OpenAI ships authorized offensive-security models on Bedrock.