Skip to main content
discount · aws

Production RDS databases on On-Demand pricing that would be cheaper reserved

resource types
1
rule IDs covered
1
severity
low

What does ZopNight detect here?

ZopNight flags `available` Amazon RDS DB instances that look like production by tag or name, carry no reservation or Savings Plan, and pass a 60-day history, 70% uptime and 30% CPU or memory check. The saving is the instance-hour cost minus a 1-year No Upfront reserved DB instance priced for 730 hours.

Signal and threshold

How ZopNight evaluates Production RDS databases on On-Demand pricing that would be cheaper reserved.
Field Value
Rule IDsRC-031
Categorydiscount
Severitylow
MetricCPUUtilization
Thresholdproduction, uncovered, 70% uptime
Evaluation window60d history
SourceZopNight
Permissions usedrds:DescribeDBInstances · rds:DescribeReservedDBInstances · rds:DescribeReservedDBInstancesOfferings · rds:ListTagsForResource

Production databases are the natural reservation candidates

A production RDS instance tends to run every hour of every month, which is exactly the usage pattern a reservation rewards. The reserved DB instance guide describes three offering types. No Upfront bills a discounted hourly rate for every hour of the term and is only sold as a one-year reservation. Partial Upfront takes part of the price at purchase and bills the rest hourly. All Upfront is paid in full at the start. In every case the discount applies to instance hours, never to storage, backups or I/O.

Size flexibility softens the lock-in for most engines: a reservation for one size in a class family can cover other sizes in that family by normalized units. AWS lists MySQL, MariaDB, PostgreSQL, Db2 and bring-your-own-license Oracle as size-flexible; SQL Server and license-included Oracle are not.

Pricing a reservation for one database

Terminal window
aws rds describe-db-instances \
--query 'DBInstances[?DBInstanceStatus==`available`].[DBInstanceIdentifier,DBInstanceClass,Engine,MultiAZ]'
aws rds describe-reserved-db-instances-offerings \
--db-instance-class db.m6g.large --product-description mysql \
--duration 1 --offering-type "No Upfront" --no-multi-az

Compare the offering’s recurring hourly charge with the On-Demand rate for the same class and deployment. The difference times 730 is roughly the monthly saving before storage.

What ZopNight requires before recommending a purchase

  1. The DB instance status is available.
  2. It reads as production: an environment tag (env, environment, stage or tier) with a production value, or a name containing prod, production, live or prd. A dev or test environment tag vetoes it even if the name says production.
  3. No Reservation or Savings Plan label appears in its billing data, and it has no ri_covered=true tag.
  4. The monthly cost is positive and comes from the bill, not a ZopNight estimate.
  5. At least 60 days of history, 70% or higher uptime, and average CPU (or memory, where reported) of 30% or more.

Cases that produce no recommendation

Anything tagged dev or test, anything in a stopped or modifying state, and anything already covered is skipped. An under-used production database is also skipped: resizing it first means the reservation is bought for the class it actually needs. Without a live reserved rate for the class and Region the rule cannot prove a saving, so it raises nothing. For a coverage view that does not depend on the production label, see RDS RI Coverage Below 50%.

How the figure in the finding is built

Terminal window
compute basis = lower of (monthly bill, On-Demand instance rate x 730)
saving = compute basis - (1-year No Upfront reserved rate x 730)

The headline percentage is that saving divided by the full monthly bill, so it is deliberately smaller than the discount AWS advertises on the instance rate alone.

Purchasing the reserved DB instance

  1. Confirm the database will stay on this engine, Region and class family for 12 months.
  2. Check the AWS Cost Explorer RDS reservation recommendation as a second opinion.
  3. Buy the offering: aws rds purchase-reserved-db-instances-offering --reserved-db-instances-offering-id <offering-id> --db-instance-count 1
  4. For Multi-AZ instances, buy the Multi-AZ offering so both nodes are covered.

See it fire on your bill.

Connect an account read-only. The first findings land in minutes.

472 rule families across 353 resource types on 22 platforms. Every threshold, metric, and IAM action is documented on these pages before you grant anything.

472 rule families documented
353 resource types covered
read-only default access level
Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console· Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console·