Skip to main content
emnode / learn
Cost

Purchase Redshift Reserved Nodes

Redshift is another workload no Savings Plan touches — Reserved Nodes are the only commitment lever for provisioned clusters, paying back up to ~75% if you commit to the right node type.

14 min·10 sections·AWS

Last reviewed

Redshift Reserved Nodes: the basics

Why your data warehouse spend needs its own commitment strategy

A Redshift Reserved Node is a billing commitment, not a resource you launch. You promise AWS that you'll run a particular node type — a specific family and size like ra3.xlplus or ra3.4xlarge — in one region for one or three years, and in exchange AWS discounts the hourly compute rate by up to roughly 75% versus On-Demand. Nothing about the running cluster changes; the discount is applied behind the scenes against any matching node-hour you happen to be running.

The reason Redshift gets its own lesson is that, like RDS, it falls outside Savings Plans entirely. Compute Savings Plans and EC2 Instance Savings Plans cover EC2, Fargate, and Lambda — they do not cover Redshift, RDS, ElastiCache, or OpenSearch. For a provisioned Redshift cluster, the Reserved Node is the only commitment lever you have. If your data warehouse is a meaningful slice of the bill and the cluster runs 24x7 On-Demand, you're leaving the single largest structured discount on the table.

Redshift Reserved Nodes come in just three payment shapes — No Upfront, Partial Upfront, and All Upfront — and they are scoped tightly to a node type and region. There is no size flexibility: a reservation for ra3.xlplus does not partially cover an ra3.4xlarge the way RDS or EC2 reservations flex within a family. Commit to the exact node type you'll be running and it's free money; commit to the wrong one and you've locked yourself into paying for a warehouse shape you may not be running in eighteen months.

In this lesson you'll learn why Redshift sits outside Savings Plans and needs its own Reserved Node strategy, how reserved nodes are scoped (node type and region, with no size flexibility), the cluster-versus-serverless decision you must make before committing, and the right-sizing sequence that protects you — migrate legacy ds2/dc2 nodes to RA3 with managed storage first, then commit to the RA3 shape. You'll see the AWS CLI calls that list available offerings, purchase against one, and report what you already own, plus the traps that strand a reservation: committing to a node type you're about to migrate off, or committing a 24x7 cluster when the workload was really intermittent.

Fun fact

The reservation that outlived the node type

Redshift Reserved Nodes have no size flexibility at all — a reservation is locked to one exact node type, and it can't flex up, down, or sideways the way RDS and EC2 reservations can within a family. A data team committed three years to a fleet of eight dc2.8xlarge nodes, then six months later migrated to RA3 with managed storage to separate compute from storage and stop paying for disk they weren't using. The new ra3.4xlarge nodes ran On-Demand at full price while the dc2.8xlarge reservation kept billing against nothing — they paid for both. The RA3 migration that was supposed to cut their bill cost them double until the original reservation finally expired two and a half years later.

Buying Redshift reservations in action

Marco runs the data platform team at a B2B SaaS company. The FinOps dashboard shows $26k of monthly Redshift compute, almost entirely On-Demand, on an RA3 cluster that's been running the same shape and the same 24x7 dashboards for over a year. The Compute Savings Plan the company bought last quarter covers their EKS nodes beautifully — and does nothing for the warehouse.

Before committing a dollar, Marco does the unglamorous work first. He confirms this really is a cluster workload, not a candidate for Redshift Serverless — the queries run all day, every day, so a provisioned cluster is the right model. He also finishes a migration off two legacy dc2.8xlarge nodes onto ra3.4xlarge with managed storage, so he isn't about to reserve a node type he's leaving. Only then does he look at the reservation.

He lists the ra3.4xlarge offerings, picks a three-year Partial Upfront term projecting about 70% savings — roughly $18k a month — and buys enough nodes to cover ~85% of the steady cluster, deliberately leaving a little headroom On-Demand so a future resize or concurrency-scaling burst doesn't strand a reservation. He sets a calendar reminder for month 30 to plan the renewal, and notes that the RMS storage line stays On-Demand because reserved nodes never cover it.

First, list the reserved-node offerings for the node type you actually run, so you can compare terms and payment options before committing.

$ aws redshift describe-reserved-node-offerings --query 'ReservedNodeOfferings[?NodeType==`ra3.4xlarge`].{Id:ReservedNodeOfferingId,Type:NodeType,Term:Duration,Fixed:FixedPrice,Payment:OfferingType,Hourly:RecurringCharges[0].RecurringChargeAmount}' --output table
------------------------------------------------------------------------------------------------
| DescribeReservedNodeOfferings |
+----------------------------------------+--------------+-----------+----------+----------------+
| Id | Type | Term | Fixed | Payment |
+----------------------------------------+--------------+-----------+----------+----------------+
| 438e7c91-ra3-3yr-partial | ra3.4xlarge | 94608000 | 31200.00 | Partial Upfront|
| 9a12fd44-ra3-3yr-noupfront | ra3.4xlarge | 94608000 | 0.00 | No Upfront |
| c771ee08-ra3-1yr-partial | ra3.4xlarge | 31536000 | 13900.00 | Partial Upfront|
+----------------------------------------+--------------+-----------+----------+----------------+
# The offering is scoped to one exact node type — no size flexibility once you buy.

Offerings are scoped to one exact node type and region — that exact shape is what you lock in for the term.

Now list what you already own, so you don't double-buy and can see what's expiring or stranded.

$ aws redshift describe-reserved-nodes --query 'ReservedNodes[?State==`active`].{Id:ReservedNodeId,Type:NodeType,Count:NodeCount,Payment:OfferingType,Term:Duration,Start:StartTime}' --output table
----------------------------------------------------------------------------------------------------
| DescribeReservedNodes |
+----------------------+---------------+-------+------------------+-----------+----------------------+
| Id | Type | Count | Payment | Term | Start |
+----------------------+---------------+-------+------------------+-----------+----------------------+
| rn-ra3-2026 | ra3.4xlarge | 6 | Partial Upfront | 94608000 | 2026-05-20 |
| rn-dc2-old | dc2.8xlarge | 2 | All Upfront | 31536000 | 2025-07-01 |
+----------------------+---------------+-------+------------------+-----------+----------------------+
# rn-dc2-old is dc2.8xlarge — the node type you just migrated away from. It bills against nothing.

Listing active reservations exposes both double-buy risk and the stranded dc2.8xlarge nobody runs anymore.

Redshift reservations under the hooddeep dive

A Redshift Reserved Node is matched against your running cluster by just two attributes: the AWS region and the exact node type (ra3.xlplus, ra3.4xlarge, ra3.16xlarge, and the legacy dc2/ds2 families). Both must line up for the discounted rate to apply to a given node-hour. There is no convertible offering and — unlike RDS and EC2 — no size flexibility and no normalized units: a reservation for ra3.xlplus will not partially cover an ra3.4xlarge, and an ra3 reservation will never cover a dc2 or ds2 node. Once bought, your only flexibility is running the same node type; everything else is locked for the term.

Reserved nodes discount compute node-hours only. On the modern RA3 families, compute and storage are billed separately: the node-hour covers the CPU and memory, while Redshift Managed Storage (RMS) is billed per GB-month independently of how many nodes you run. A reserved node does nothing for the RMS line — so even at 100% node coverage, the storage portion of the Redshift bill keeps running at standard rates. This is also the reason RA3 is the right place to land before committing: it separates compute from storage so you can right-size the node count without overpaying for disk, whereas the legacy dc2/ds2 families bundled fixed local storage into every node.

This is exactly why the run-model and right-sizing decisions must come before the commitment. If you commit to dc2 or ds2 and later migrate to RA3 with managed storage, the RA3 nodes run On-Demand while the old reservation bills against thin air — you pay twice until it expires. The same trap applies to Redshift Serverless: a spiky or intermittent analytics workload often costs less on Serverless (billed per RPU-hour, scaling to zero between queries) than on a 24x7 provisioned cluster — but a reserved node only applies to a provisioned cluster, so committing first and discovering Serverless was the better fit afterwards strands the whole reservation. Sequence the run-model and architecture decisions first; buy the reservation against the node type you'll still be running in three years.

# Inspect the offering details before buying, so you know the exact node type,
# term, and payment structure you're committing to.
aws redshift describe-reserved-node-offerings \
  --query 'ReservedNodeOfferings[?NodeType==`ra3.4xlarge` && Duration==`94608000`].{Id:ReservedNodeOfferingId,Fixed:FixedPrice,Recurring:RecurringCharges,Payment:OfferingType}' \
  --output json

# Purchase against the chosen offering ID (this is the irreversible step).
aws redshift purchase-reserved-node-offering \
  --reserved-node-offering-id 438e7c91-1234-4abc-9def-0123456789ab \
  --node-count 6

What is the impact of leaving Redshift uncommitted?

The direct impact is paying full On-Demand rates on one of your most stable, highest-volume cost categories. An ra3.4xlarge node runs roughly $3.26/hour On-Demand — about $2,380/month — and a three-year reservation drops the effective rate by around 70–75%, to roughly $600–700/month per node. Across a six-node cluster that's well over $10k a month of discount that exists, is offered by AWS, and is simply not being claimed because no one owns the Redshift commitment decision.

The second-order impact is the asymmetry with Savings Plans. Teams that have invested in Compute Savings Plans often believe their commitment coverage is healthy because the EC2 number looks great — but the data warehouse sits entirely outside that program and is invisible on the Savings Plan dashboard. The result is a blind spot: a large, committable, stable cost running at sticker price while everyone congratulates themselves on compute coverage. Redshift coverage has to be tracked on its own meter or it disappears.

Then there's the stranding risk, which runs the opposite direction. Because reserved nodes are non-convertible and have zero size flexibility, an over-eager or premature commitment is expensive. Commit before migrating off dc2/ds2 and you lock in the legacy node type. Commit to a 24x7 cluster when the workload was really intermittent — better served by Redshift Serverless — and the reservation bills against a cluster you should have shrunk or shut down. The deep discount and the trap are two sides of the same rigidity.

Finally, this category is a maturity signal. An organisation that covers EC2 with Savings Plans but leaves Redshift, RDS, and ElastiCache uncommitted has a commitment program that stops at the easy, well-marketed instrument and doesn't reach the rest. The data warehouse is usually one of the most predictable spends in the whole estate — if it's uncommitted, the commitment strategy isn't finished, it's just started.

How do you commit to Redshift reservations safely?

Buying Redshift reserved nodes is a four-step sequence, and the order is the whole point: decide cluster-versus-serverless and right-size onto RA3, commit only to the stable cluster, choose the payment option deliberately, and review coverage and utilisation every month.

1. Decide cluster-vs-serverless and right-size onto RA3 BEFORE you commit

Reservations lock in a node type, so settle the architecture first. If the analytics workload is spiky or intermittent, Redshift Serverless (billed per RPU-hour, scaling to zero between queries) may beat a 24x7 cluster — and a reserved node can't cover Serverless, so committing would strand the buy. If a provisioned cluster is right, migrate any legacy dc2/ds2 nodes onto RA3 with managed storage first, so you separate compute from storage and aren't reserving a node type you're about to abandon. There's no convertible escape hatch and no size flexibility for Redshift.

2. Commit to the stable cluster, not the peak

Look at the trailing 60–90 days and find the floor — the node count that is always running. Commit to roughly 80–90% of that steady baseline and leave headroom On-Demand for concurrency scaling and future resizes. This deliberately under-covers so that a future resize, node-type change, or move to Serverless doesn't strand a reservation. It's better to leave a little discount uncaptured than to buy reserved nodes you might not be able to use — and remember the reservation never touches the RMS storage line.

3. Choose the payment option as a cash decision

No Upfront, Partial Upfront, and All Upfront trade cash-now for discount-depth — All Upfront is deepest, No Upfront shallowest. There are no convertible Redshift reservations, so term length (1 vs 3 years) is the other lever: 3-year deepens the discount but extends the lock-in. Match the term and payment to how confident you are the node type will persist and to the business's cost of capital — this is finance's call, with an explicit payback number, not a console default.

4. Review coverage and utilisation on every FinOps cadence

Track two numbers monthly: coverage (share of Redshift node-hours covered by a reservation; target 80–95% on a stable cluster) and utilisation (share of reserved nodes actually consumed; must stay near 100%). Watch expirations 60–90 days out so renewals are deliberate, not lapses. If utilisation drops, a resize or node-type migration has stranded a reservation — investigate before buying anything new.

# Compare reserved-node offerings across payment options for the node type you run.
for opt in "No Upfront" "Partial Upfront" "All Upfront"; do
  echo "== $opt =="
  aws redshift describe-reserved-node-offerings \
    --query "ReservedNodeOfferings[?NodeType=='ra3.4xlarge' && Duration=='94608000' && OfferingType=='$opt'].{Fixed:FixedPrice,Hourly:RecurringCharges[0].RecurringChargeAmount}" \
    --output table
done

# Check what you already run and own so you don't double-buy.
aws redshift describe-clusters \
  --query 'Clusters[].{Cluster:ClusterIdentifier,NodeType:NodeType,Nodes:NumberOfNodes}' \
  --output table
aws redshift describe-reserved-nodes \
  --query 'ReservedNodes[?State==`active`].{Type:NodeType,Count:NodeCount}' --output table

Quick quiz

Question 1 of 5

You have a stable Redshift cluster on legacy dc2.8xlarge nodes, and the team is planning to migrate to RA3 with managed storage next quarter. What's the right move on reserved nodes?

Keep learning

Dig deeper into Redshift reserved-node mechanics, the RA3 storage split, and how the warehouse fits the broader commitment strategy.

You've completed Purchase Redshift Reserved Nodes. You now know why Redshift sits outside Savings Plans and needs its own commitment lever, how reserved nodes are scoped by node type and region with no size flexibility, why reserved nodes cover compute but never managed storage, and the sequence that protects you — decide cluster-versus-serverless and right-size onto RA3 first, commit to the stable cluster second. The next time the bill shows a large, uncommitted warehouse, you'll have a defensible path from On-Demand to a sound multi-year commitment without stranding a dollar.

Back to the library