All cheat sheets
Storagecheat sheet

EBS gp3 Volumes

Migrate EBS volumes from gp2 to gp3 for an immediate 20% price cut with the same or better performance — live, no downtime, one API call per volume.

Last reviewed: July 11, 2026

TL;DR: gp3 is ~20% cheaper per GB than gp2 and decouples performance from size: every gp3 volume gets 3,000 IOPS and 125 MB/s baseline no matter how small it is. Migration is a live, in-place modify-volume call — no downtime, no code changes. If you still have gp2 volumes, this is the closest thing AWS offers to free money.

The numbers

  • gp2: ~$0.10/GB-month; IOPS = 3× volume size (min 100, burst 3,000)
  • gp3: ~$0.08/GB-month; 3,000 IOPS + 125 MB/s included at any size; up to 16,000 IOPS ($0.005/IOPS-month above baseline) and 1,000 MB/s ($0.04/MB/s above 125)

Worked examples:

  • 50 instances × 500 GB root volumes: $2,500/month on gp2 → $2,000 on gp3. $6,000/year saved by changing a dropdown.
  • A database needing 5,000 IOPS on 300 GB of data: gp2 forces a 1.67 TB volume ($167/month) just to reach the IOPS; gp3 does it with a 300 GB volume + provisioned IOPS ($40/month).

Do this

  1. Find your gp2 volumes:

    aws ec2 describe-volumes --filters Name=volume-type,Values=gp2 \
      --query 'Volumes[].{id:VolumeId,size:Size,attached:Attachments[0].InstanceId}'
    
  2. Migrate live — no detach, no stop:

    aws ec2 modify-volume --volume-id vol-0abc123 --volume-type gp3
    

    The modification runs in the background (minutes to hours by size); the instance keeps serving. Start with dev/test volumes, then batch through production during quiet hours.

  3. Volumes over 1,000 GB: match performance explicitly. gp2 at 1,334 GB has a 4,002-IOPS baseline; on gp3 you'd provision the equivalent: --iops 4000. Still usually cheaper — just not the full 20%.

  4. Make gp3 the default everywhere new: launch templates, Terraform (type = "gp3"), CloudFormation, and AMI block-device mappings, so gp2 stops re-appearing.

Gotchas

  • You can't shrink a volume. If a gp2 volume was over-sized just to buy IOPS, migrating to gp3 keeps the wasted gigabytes. Recovering them means creating a smaller volume and moving the data — a bigger job; do it opportunistically at replacement time.
  • Performance during migration can dip slightly; there's also a 6-hour cooldown between successive modifications of the same volume.
  • Very large/busy gp2 volumes (>1 TB) relied on a higher IOPS baseline — verify workload IOPS in CloudWatch (VolumeReadOps/VolumeWriteOps) before assuming the gp3 baseline covers them.

Skip this if

  • The volume needs sustained ultra-low latency and >16,000 IOPS — that's io2 territory, not gp3.
  • The workload is sequential-throughput-heavy on huge datasets (big-data scratch space) — st1 HDD can be cheaper per GB.
  • It's already gp3 (obviously) — then the remaining lever is right-sizing provisioned IOPS/throughput back to baseline where usage doesn't justify them.

Run this audit with your AI assistant

Paste this into Claude, ChatGPT, or any agent that can run the AWS CLI with read-only credentials. It audits your account for exactly the waste this sheet describes — and changes nothing.

You are auditing an AWS account for gp2 → gp3 EBS migration savings.
Use the AWS CLI with READ-ONLY credentials. Do not create, modify, or
delete anything — report findings and recommended (unapplied) fixes only.

1. Enumerate all volumes:
   aws ec2 describe-volumes --query 'Volumes[].{id:VolumeId,type:VolumeType,
   size:Size,iops:Iops,state:State,az:AvailabilityZone}'
   (repeat per region in use: aws ec2 describe-regions)
2. For every gp2 volume, compute:
   - Current cost: size_GB × $0.10/month.
   - gp3 cost: size_GB × $0.08/month (baseline 3,000 IOPS / 125 MB/s
     included; add $0.005/provisioned IOPS above 3,000 and $0.04/MB/s
     above 125 only if the gp2 volume's size implies it relied on higher
     baseline: gp2 IOPS = 3 × size_GB, min 100, burst to 3,000).
   - Flag volumes > 1,000 GB: their gp2 baseline exceeds 3,000 IOPS, so
     matching performance on gp3 needs provisioned IOPS — include that in
     the math instead of assuming pure savings.
3. Also flag gp2 volumes larger than 334 GB whose size appears chosen only
   to buy IOPS (check CloudWatch VolumeReadOps+VolumeWriteOps vs capacity
   used if available).

Report a table: volume | region | size | attached instance | gp2 $/mo |
gp3 $/mo | saving | caveats. Sum total monthly savings. Output the
ready-to-run migration commands (aws ec2 modify-volume --volume-type gp3)
for review — but do NOT execute them.
Works with any assistant that can run shell commands.

Want the guided version?

The EBS gp3 Volumes walkthrough covers this topic interactively — it asks about your setup, branches to what’s relevant, and quizzes you on the tricky parts. Free and anonymous.

Start the walkthrough