EBS pricing is a price per GB-month of provisioned volume size by volume type, plus a price per IOPS-month and per MB/s-month for performance above the gp3 baseline or for everything provisioned on io1 and io2, plus a price per GB-month for snapshots in the standard or the archive tier, with charges for retrieval, early deletion and fast snapshot restore. On the bill the provisioned size almost always dominates, not the used one: AWS charges the volume as it was created, full or empty, attached or not.

Pricing dimensions

EBS prices every volume by what is provisioned, not by what sits on it, and meters per second with a 60-second minimum until the volume is deleted. The usage type of every line names the volume type, so the dimensions can be read straight from the billing data.

DimensionUnitWhat drives itOptional
Volume storage gp3GB-monthProvisioned size; 3,000 IOPS and 125 MiB/s are includedNo
Volume storage gp2GB-monthProvisioned size; IOPS follow the size at 3 per GiB, bursting to 3,000No; the predecessor of gp3
Volume storage io1 and io2GB-monthProvisioned size; the performance is paid separatelyNo
Volume storage st1 and sc1GB-monthProvisioned size; throughput follows the size through a burst balanceNo
Provisioned IOPSIOPS-monthgp3 above 3,000; io1 every IOPS; io2 every IOPS in three tiers up to 32,000, up to 64,000 and beyondYes on gp3, no on io1 and io2
Provisioned throughputMB/s-monthgp3 above 125 MiB/s, up to 2,000 MiB/sYes
Snapshot standardGB-monthOnly the changed blocks of each incremental snapshot, not the volume sizeYes
Snapshot archiveGB-month, 90 days minimumThe full copy, not only the change; early deletion costs the remaining days, retrieval per GBYes
Fast snapshot restoreDSU-hour per snapshot and availability zone, per minute with a one-hour minimumEvery zone it is enabled in, until it is disabledYes
Time-based snapshot copy and volume initialisationGB per copy by requested duration; GB per initialised snapshotCross-region copies with a deadline; volumes that need full performance from creationYes
EBS optimisationHour per instance type, under EC2Only on older instance types without built-in optimisationYes (EC2 pricing)

gp3 has been the default since its introduction: the baseline of 3,000 IOPS and 125 MiB/s sits inside the storage price, and more is provisioned separately, up to 80,000 IOPS at a ratio of 500 IOPS per GiB and up to 2,000 MiB/s at 0.25 MiB/s per provisioned IOPS. gp2 ties performance to size, 3 IOPS per GiB between 100 and 16,000, with a burst to 3,000 IOPS for volumes under one TiB; whoever wanted more IOPS had to buy a larger volume. io2 Block Express is the type for databases under sustained load, up to 256,000 IOPS and 4,000 MiB/s on Nitro instances and with a durability of 99.999 percent against 99.8 to 99.9 percent on gp3; its IOPS are charged per volume in three price tiers, so ten volumes of 1,000 IOPS each pay the first tier ten times. st1 and sc1 are magnetic disks for sequential load; their throughput follows the size and a burst balance as on gp2.

Snapshots live in Amazon S3 and are charged by the space they occupy: the first snapshot of a volume stores the written blocks, every later one only the blocks changed since, so a snapshot is usually far smaller than its volume. Deleting a snapshot therefore does not always save storage, because the blocks a later snapshot still needs stay. The archive tier turns the incremental snapshot into a full copy and charges it at a fraction of the standard price, but for at least 90 days; whoever deletes or restores earlier pays the remaining days, and every retrieval costs per GB. Fast snapshot restore makes a volume fully performant from creation and costs one Data Services Unit per hour per snapshot and availability zone for as long as it stays enabled.

How it appears in your billing data

EBS has no product code of its own in the Cost and Usage Report: every line carries AmazonEC2, and only the usage type says that it is storage. Volume storage appears as EUC1-EBS:VolumeUsage.gp3, EUC1-EBS:VolumeUsage.gp2, EUC1-EBS:VolumeUsage.io2, EUC1-EBS:VolumeUsage.piops for io1, EUC1-EBS:VolumeUsage.st1 and EUC1-EBS:VolumeUsage.sc1, the prefix being the region code, EUC1 for Frankfurt. Provisioned performance appears as EUC1-EBS:VolumeP-IOPS.gp3 and EUC1-EBS:VolumeP-Throughput.gp3 for gp3, EUC1-EBS:VolumeP-IOPS.io2, .io2.tier2 and .io2.tier3 for the three io2 tiers and EUC1-EBS:VolumeP-IOPS.piops for io1; the unit is GB-month, IOPS-month or MB/s-month, prorated by the hour.

Snapshots appear as EUC1-EBS:SnapshotUsage for the standard tier, EUC1-EBS:SnapshotArchiveStorage for the archive, EUC1-EBS:SnapshotArchiveEarlyDelete for the remaining days of an archive deleted early and EUC1-EBS:SnapshotArchiveRetrieval for retrieval; fast snapshot restore as EUC1-EBS:FastSnapshotRestore in DSU-hours, and time-based snapshot copy as EUC1-EBS:TimeBasedSnapshotCopy.tier1 to .tier7 by duration. lineItem/ResourceId names the volume ID or the snapshot ID, not the instance; a volume that belongs to no instance any more cannot be told from an attached one in the report. Attribution to the instance needs a tag on the volume or a match against the inventory, and a tag on the instance does not inherit to its volumes and snapshots. The report's structure is described in the AWS Cost and Usage Report.

In Cost Explorer all of these lines fall under the service EC2-Other, together with NAT, IPv4 and data transfer; grouped by usage type they separate again. In the FOCUS export the lines keep the EC2 service: ServiceName carries Amazon Elastic Compute Cloud and x_ServiceCode AmazonEC2, the ChargeCategory is Usage, and the volume type lives only in x_UsageType and in the SkuId. To report storage apart from compute, filter on x_UsageType starting with EBS: (FOCUS columns). A volume's cost appears every hour, also while the instance is stopped; a stopped instance saves the compute time, never the storage.

A volume, a snapshot,provisioned IOPSA line with product codeAmazonEC2 and a usage typestarting with EBS:Cost Explorer: the serviceEC2-Other, with NAT, IPv4and data transferFOCUS: ServiceName AmazonElastic Compute Cloud, thevolume type in x_UsageTypeand SkuIdGrouped or filtered by usagetype, storage separatesfrom compute again
EBS has no product code of its own, so storage is separated from compute by the usage type, in Cost Explorer and in the FOCUS export alike

Levers

Configuration: the type is the first lever, because gp3 is cheaper per GB than gp2 and buys performance separately; the change runs online through a volume modification, without a restart, and is described in storage optimisation. Size is the second: EBS charges the provisioned size, and a volume can be grown but not shrunk, so a volume created too large shrinks only through a snapshot and a new, smaller volume. On io2 the provisioned IOPS figure is the lever, because it is paid per volume and month whether the database draws on it or not; CloudWatch shows with VolumeReadOps and VolumeWriteOps what is actually used. Orphaned volumes in the available state and snapshots of deleted volumes are the third lever (idle and orphaned resources).

the type: gp2 wheregp3 would dotoo largeprovisioned IOPSor throughputabove needWhat is wrongwith the volume?A volume modificationonline: cheaper per GB,performance bought separatelyGrown but never shrunk:a snapshot and a new,smaller volumeThe performance linelowered on its own,apart from size
A volume type changes online, a volume grows but never shrinks, so an oversized volume is replaced through a snapshot

Purchase option: there is none for EBS; Savings Plans and Reserved Instances cover the instance, never its volumes. The only discount mechanism is the change of tier: archive snapshots cost a quarter of the standard price in Frankfurt, but with a minimum term and a retrieval fee.

Architecture: snapshot policies with retention periods through Data Lifecycle Manager keep the snapshot line flat, and an archive for snapshots that exist only for retention quarters it. Data that is rarely read belongs not on a volume but in S3 (S3 pricing); data several instances share, on EFS (EFS and FSx). The dimensions across all three providers are set side by side in block, object and file storage.

Where it goes wrong

  • The instance is gone, the volume stays. When an instance is terminated, data volumes whose DeleteOnTermination was not set stay and keep costing. Lines with EBS:VolumeUsage without a running instance in the inventory are the clue; aws ec2 describe-volumes --filters Name=status,Values=available lists them.
  • gp2 costs more than gp3 and delivers less. A gp2 volume under one TiB has fewer than 3,000 baseline IOPS and costs about a quarter more per GB. The change switches the type online.
  • The IOPS are paid, not used. An io2 volume with 10,000 provisioned IOPS that uses 800 pays 10,000 every month. VolumeReadOps and VolumeWriteOps over 14 days show the demand.
  • The snapshot is deleted, the line does not drop. Incremental snapshots share blocks; only what no other snapshot needs is deleted. Delete the whole chain or archive the last state.
  • The archive charges on deletion. An archive snapshot deleted after 30 days pays the remaining 60 days as SnapshotArchiveEarlyDelete. Archiving pays off only for what stays at least 90 days.
  • Fast snapshot restore keeps running. The DSU-hours run until the feature is disabled per zone, even when no volume has been created from it for months. Lines with FastSnapshotRestore belong on a list with an end date.
  • The volumes sit under EC2. Cost Explorer shows EBS under EC2-Other, and reports by service hide the storage. Group by usage type starting with EBS:.

Example

List prices in USD for Frankfurt (eu-central-1), read on 2026-10-21 from the AWS price list: gp3 costs USD 0.0952 per GB-month, gp2 USD 0.119, io2 and io1 USD 0.149, st1 USD 0.054 and sc1 USD 0.018. Provisioned performance costs USD 0.006 per IOPS-month above 3,000 and USD 0.0476 per MB/s-month above 125 on gp3, and on io2 USD 0.078 per IOPS-month up to 32,000, USD 0.0546 from 32,001 to 64,000 and USD 0.0382 beyond. Snapshots cost USD 0.054 per GB-month in the standard tier and USD 0.0135 in the archive, retrieval from the archive USD 0.0324 per GB; fast snapshot restore costs USD 0.893 per DSU-hour.

A 500 GB volume costs USD 59.50 a month as gp2 with 1,500 baseline IOPS bursting to 3,000; as gp3 USD 47.60 with 3,000 IOPS and 125 MiB/s fixed. The same gp3 with 6,000 IOPS and 250 MiB/s costs 47.60 plus 3,000 × 0.006 = 18.00 plus 125 × 0.0476 = 5.95, USD 71.55 in all; as io2 with 6,000 IOPS 74.50 plus 6,000 × 0.078 = 468.00, USD 542.50 in all. A snapshot of 100 GB of occupied blocks costs USD 5.40 a month in the standard tier and USD 1.35 in the archive; fast snapshot restore for one snapshot in one zone costs USD 651.89 in a month of 730 hours. The figures show that gp3 sits a fifth below gp2 at the same size and brings more baseline performance, that provisioned IOPS on io2 can exceed the volume several times over, and that fast snapshot restore is one of the dearest items an account can forget.

Sources

Read on 2026-10-21. Prices: Amazon EBS pricing, AWS Price List, offer AmazonEC2 for eu-central-1. Billing data: codes for Amazon EBS in billing and usage reports, Cost and Usage Report columns: lineItem, FOCUS 1.0 with AWS columns. Service: EBS volume types, General Purpose SSD, Provisioned IOPS SSD, HDD volumes, EBS snapshots, snapshot archive, fast snapshot restore, EBS-optimized instances.