GP2 to GP3 EBS migration: 20% cheaper, zero downtime. Why haven't you done it?
Most AWS accounts still run GP2 EBS volumes. Migrating to GP3 takes 5 minutes per volume, saves 20% immediately, and requires zero downtime. Here's exactly how to do it.
Open your AWS console right now. Go to EC2 → Volumes. Filter by type: gp2.
How many do you see?
Most accounts we scan have anywhere from 5 to 40+ GP2 volumes still running. Every single one of them is 20% more expensive than it needs to be — and the migration takes 5 minutes per volume with zero downtime.
This is the easiest cost saving in AWS. Most teams just haven't gotten around to it.
GP2 vs GP3 — what actually changed
AWS launched GP3 in December 2020. It's the newer generation of SSD-backed EBS volumes. Here's the direct comparison:
GP2:
- $0.10 per GB-month
- Baseline IOPS: 3 IOPS per GB (minimum 100, max 16,000)
- IOPS burst using credits — unpredictable under sustained load
- Throughput: up to 250 MB/s
GP3:
- $0.08 per GB-month — 20% cheaper
- Baseline IOPS: 3,000 IOPS included — regardless of volume size
- Additional IOPS: $0.005 per provisioned IOPS above 3,000
- Throughput: 125 MB/s baseline, up to 1,000 MB/s — 4x GP2
For most workloads, GP3 is cheaper AND faster. There is no reason to stay on GP2 unless you have a very specific burst-heavy workload that relies on credit accumulation.
Who should NOT migrate
Before you start, there are two edge cases where GP2 might actually be better:
1. Very small volumes with high burst requirements
GP2 volumes under 1TB accumulate burst credits. If your workload has long idle periods followed by intense short bursts — and the volume is small (under 333GB) — GP2's credit system can provide more burst IOPS than GP3's baseline 3,000.
2. Volumes already provisioned with GP2 IOPS above 3,000
If you have a GP2 volume larger than 1TB, it gets more than 3,000 IOPS from the 3 IOPS/GB formula. Migrating to GP3 would give you 3,000 IOPS baseline — you'd need to provision additional IOPS separately (at $0.005/IOPS/month). Do the math before migrating large high-IOPS volumes.
For everything else — boot volumes, general application storage, dev/test volumes, backup volumes — just migrate.
How to migrate: step by step
Option 1 — AWS Console (easiest)
- Go to EC2 → Elastic Block Store → Volumes
- Filter by Type: gp2
- Select a volume
- Click Actions → Modify Volume
- Change Volume Type from
gp2togp3 - Click Modify
That's it. No restart required. The volume keeps serving your instance during migration. AWS handles the conversion in the background — usually completes in a few minutes for smaller volumes.
Option 2 — AWS CLI (faster for multiple volumes)
Find all GP2 volumes in your account:
`bash
aws ec2 describe-volumes \
--filters Name=volume-type,Values=gp2 \
--query 'Volumes[*].[VolumeId,Size,State]' \
--output table
`
Migrate a specific volume:
`bash
aws ec2 modify-volume \
--volume-id vol-xxxxxxxxxxxxxxxxx \
--volume-type gp3
`
Migrate ALL GP2 volumes in a region at once:
`bash
aws ec2 describe-volumes \
--filters Name=volume-type,Values=gp2 \
--query 'Volumes[*].VolumeId' \
--output text | tr '\t' '\n' | while read vol; do
echo "Migrating $vol..."
aws ec2 modify-volume --volume-id $vol --volume-type gp3
done
`
Option 3 — Multi-account (for teams with many AWS accounts)
If you have multiple AWS accounts, you'd need to run the CLI commands in each account separately — switching roles or profiles for each one. This is where the manual work adds up quickly.
How much will you save?
Quick math for your account:
Take your total GP2 storage in GB. Multiply by $0.02 (the per-GB savings). That's your monthly saving.
Example:
- 500GB total across 8 GP2 volumes
- 500 × $0.02 = $10/month saved
- $120/year — for a one-time 30-minute task
For accounts with large volumes or many volumes, this scales quickly. A 2TB GP2 volume alone saves $40/month by migrating to GP3.
After migrating: verify performance
Once migration completes, confirm the volume type changed:
`bash
aws ec2 describe-volumes \
--volume-ids vol-xxxxxxxxxxxxxxxxx \
--query 'Volumes[*].[VolumeId,VolumeType,Iops,Throughput]' \
--output table
`
You should see gp3, 3000 IOPS, and 125 MB/s throughput as the baseline.
If your application needs more than 3,000 IOPS, provision them:
`bash
aws ec2 modify-volume \
--volume-id vol-xxxxxxxxxxxxxxxxx \
--volume-type gp3 \
--iops 6000 \
--throughput 500
`
The real reason teams skip this
It's not technical complexity — GP2 to GP3 migration is genuinely simple.
The real reason is that nobody owns "go find all our GP2 volumes across all accounts and migrate them." It falls in the gap between DevOps (who manages infrastructure) and Finance (who sees the bill). Everyone knows it should be done. Nobody has it on their sprint.
This is the pattern with most AWS cost savings — not hard to execute, just easy to deprioritize.
Free scan
See what's wasting money in your AWS account
Read-only scan · No AWS changes · Results in 60 seconds
Scan My AWS Account Free →What to do right now
- Open AWS Console → EC2 → Volumes → filter by
gp2 - Count how many you have and their total GB
- Calculate your monthly saving (total GB × $0.02)
- If it's more than $20/month, migrate today — it takes less time than this article
The migration is zero-risk for most volumes, zero-downtime, and the savings start from the next billing cycle.
It is the most boring AWS optimization. It is also one of the most consistent.