aws_ebs_volume cost estimation
A persistent block storage volume. Priced per GB-month by volume type, with separate IOPS and throughput charges on certain types.
An aws_ebs_volume is a network-attached block storage device for EC2 instances. Pricing depends on the volume type and provisioned capacity, with optional IOPS and throughput tiers.
The volume types and their cost profiles:
gp3 is the modern general-purpose default. Cheapest per GB at roughly $0.08/GB-month. Includes 3,000 baseline IOPS and 125 MB/s throughput for free; additional IOPS and throughput are billed separately.
gp2 is the older general-purpose tier, ~10-20% more expensive than gp3 at the same size, with IOPS scaling by size (3 IOPS per GB). No reason to choose gp2 over gp3 for new workloads.
io1 and io2 are provisioned-IOPS SSDs for the highest performance. io2 is roughly the same per-GB rate as io1 but with much higher durability. Both charge per provisioned IOPS in addition to per GB.
st1 (throughput-optimized HDD) and sc1 (cold HDD) are cheaper per GB than SSDs but have lower IOPS. Right for sequential workloads like log processing or rarely-accessed data.
Snapshots are billed separately by aws_ebs_snapshot at a fraction of the volume price.
c3x reads volume type, size, IOPS, and throughput from the Terraform configuration and computes the monthly cost. Volumes are billed even when detached, even when the parent instance is stopped.
Terraform example
A minimal but realistic configuration that C3X can estimate.
resource "aws_ebs_volume" "data" {
availability_zone = "us-east-1a"
size = 1000
type = "gp3"
iops = 5000
throughput = 250
tags = {
Name = "data-volume"
}
}Pricing dimensions
What you actually pay for when you provision aws_ebs_volume.
| Dimension | Unit | What's being charged |
|---|---|---|
| Storage | per GB-month | Provisioned size. Same rate regardless of how full the volume is. $0.08/GB-month for gp3, $0.10 for gp2, $0.125 for io2 in us-east-1 |
| Provisioned IOPS (gp3 above baseline) | per IOPS-month | gp3 includes 3,000 IOPS at the base rate. Above 3,000 IOPS is billed separately. $0.005 per provisioned IOPS-month |
| Provisioned throughput (gp3 above baseline) | per MB/s-month | gp3 includes 125 MB/s throughput at the base rate. Above 125 MB/s is billed separately. $0.04 per provisioned MB/s-month |
| Provisioned IOPS (io1/io2) | per IOPS-month | io1 and io2 charge separately for every provisioned IOPS, with tiered pricing. |
Optimization tips
Common ways to reduce aws_ebs_volume cost without changing the workload.
Migrate gp2 volumes to gp3
About 20%gp3 is roughly 20% cheaper than gp2 at the same size and provides 3,000 baseline IOPS by default. Most workloads see no performance regression. The migration can be done in-place with ModifyVolume.
Don't over-provision IOPS or throughput on gp3
Workload-dependentThe 3,000 IOPS and 125 MB/s baseline is enough for most workloads. Only buy more if iostat shows you hitting the ceiling. Provisioned IOPS above baseline adds up fast.
Use st1 or sc1 for cold or sequential data
50-75% per GBLogs, backups, and archives don't need SSD performance. st1 is about half the per-GB cost of gp3, sc1 is about a quarter.
Delete detached volumes
100% of cost on stale volumesEBS volumes keep billing while detached. Audit periodically with aws ec2 describe-volumes --filters Name=status,Values=available and delete what isn't needed.
FAQ
Are EBS volumes billed when the EC2 instance is stopped?
Yes. EBS storage is billed continuously regardless of instance state. Only deleting the volume stops the charge.
Does c3x estimate snapshot cost?
Snapshots are a separate resource (aws_ebs_snapshot). Each one is billed by the size of changed blocks since the previous snapshot. c3x estimates declared snapshots; for usage-driven snapshot policies, add expected size to c3x-usage.yml.
Why is io2 the same price per GB as io1 if it has better durability?
AWS prices io2 at parity with io1 to encourage migration. io2 has 100x better durability (99.999% vs 99.8%) and supports higher IOPS-per-GB ratios. For new volumes always pick io2 over io1.
What about io2 Block Express?
io2 Block Express is a higher tier of io2 supporting up to 256,000 IOPS and 4,000 MB/s. Available on r5b, R7iz, and select other instance families. c3x picks up the throughput attribute and prices accordingly.
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_ebs_volume.