AWSAmazon RDSDatabase

aws_db_instance cost estimation

A managed relational database instance on RDS. Priced per hour by instance class, engine, deployment option, and region, with storage and IOPS billed separately.

An aws_db_instance is a managed relational database on RDS. Pricing has three main moving parts.

First is the instance hour rate, which depends on the instance class (db.t4g.micro through db.r6id.32xlarge), the engine (Postgres and MySQL are cheapest; SQL Server, Oracle, and license-included variants are dramatically more expensive), and whether the database is single-AZ or Multi-AZ. Multi-AZ roughly doubles the compute cost because AWS provisions a hot standby in another availability zone.

Second is storage. RDS storage is billed per GB-month, with separate rates by storage type (gp2, gp3, io1, magnetic). gp3 is the recommended default for most workloads. Multi-AZ doubles the effective storage cost since the standby keeps a copy.

Third is provisioned IOPS, which applies if you use io1 or io2 storage, or gp3 above its baseline. IOPS are billed per IOPS-month.

c3x estimates all three from the Terraform configuration. Backup storage exceeding 100% of provisioned storage is usage-based and requires a c3x-usage.yml entry to model accurately.

Terraform example

A minimal but realistic configuration that C3X can estimate.

resource "aws_db_instance" "postgres" {
  identifier        = "production-postgres"
  engine            = "postgres"
  engine_version    = "15.4"
  instance_class    = "db.r5.large"
  allocated_storage = 200
  storage_type      = "gp3"
  multi_az          = true

  username = "app"
  password = var.db_password

  backup_retention_period = 7
  skip_final_snapshot     = false
}

Pricing dimensions

What you actually pay for when you provision aws_db_instance.

DimensionUnitWhat's being charged
Database instance hoursper hourOn-demand rate for the instance class, engine, and deployment option. c3x assumes 730 hours per month for monthly estimates.
$0.50/hour for db.r5.large PostgreSQL Multi-AZ in us-east-1
Storageper GB-monthProvisioned storage at the configured size. Multi-AZ doubles the effective storage cost.
$0.115/GB-month for gp3 in us-east-1 (Multi-AZ)
Provisioned IOPSper IOPS-monthFor io1/io2 storage, or gp3 provisioned above the 3,000 baseline IOPS.
Backup storageper GB-monthBackup storage exceeding 100% of provisioned storage. Define expected size in c3x-usage.yml to estimate accurately.
Data transfer outper GBBytes egressing the AWS region. Cross-AZ replication for Multi-AZ is free.

Sample C3X output

Example output from c3x estimate on the Terraform above:

aws_db_instance.postgres
├─ Database instance (on-demand, Multi-AZ, db.r5.large)   730  hours    $365.00
└─ Storage (general purpose SSD, gp3)                     200  GB        $46.00

OVERALL TOTAL                                                            $411.00

Optimization tips

Common ways to reduce aws_db_instance cost without changing the workload.

Drop Multi-AZ for non-production environments

Up to 50%

Multi-AZ roughly doubles instance and storage cost. For staging, dev, and ephemeral environments, single-AZ is typically sufficient and cuts the bill in half.

Switch storage from gp2 to gp3

About 20%

gp3 is around 20% cheaper than gp2 at the same size and offers baseline 3,000 IOPS by default. Most RDS workloads see no performance regression on gp3.

Use Aurora Serverless v2 for variable workloads

Workload-dependent

If your database has long idle periods or unpredictable spikes, Aurora Serverless v2 scales ACUs by demand and can be cheaper than a fixed db.r5.large running 24/7.

Buy Reserved Instances for steady-state databases

30-50%

Databases rarely scale up and down like compute. A 1-year all-upfront RI cuts on-demand cost by 30-50%. Model with purchaseOption: 'reserved' in c3x-usage.yml.

FAQ

Does c3x handle Multi-AZ pricing correctly?

Yes. c3x reads the multi_az attribute and applies the Multi-AZ price for both instance hours and storage. Multi-AZ effectively doubles both compared to single-AZ.

How does c3x price Oracle and SQL Server?

Oracle and SQL Server have license-included pricing tiers that vary by edition (Standard, Web, Enterprise) and are significantly more expensive than Postgres or MySQL at the same instance size. c3x picks up the engine attribute and uses the correct license tier from AWS pricing.

Are backups counted in the estimate?

Backup storage up to 100% of provisioned storage is free and not counted. Anything beyond that is usage-based and only appears in the estimate if you specify expected backup size in c3x-usage.yml.

Does c3x estimate Aurora?

Aurora is aws_rds_cluster, not aws_db_instance. c3x supports both. aws_db_instance is for RDS engines (Postgres, MySQL, MariaDB, Oracle, SQL Server) in their non-Aurora form.

Why does my estimate look high for SQL Server?

SQL Server license-included pricing can be 2-4x the cost of an equivalent Postgres instance. If the bill is a concern, consider bring-your-own-license (BYOL) on EC2 or migrating to Postgres if the application supports it.

Related resources

Estimate this resource in your own Terraform

Free, open source, no API key. C3X parses your Terraform and shows line-item cost for every resource, including aws_db_instance.