The Cost Savings of EBS gp3
Amazon Elastic Block Store (EBS) volumes offer persistent block storage for EC2 instances. For years, the General Purpose SSD (gp2) volume type has been the default choice for many workloads. However, AWS introduced gp3 volumes, offering a compelling alternative that decouples performance from storage size, leading to significant cost savings. For a direct comparison in the us-east-1 region, gp3 storage costs approximately $0.08 per GB-month, while gp2 costs $0.10 per GB-month. This represents a saving of about 20% for the storage itself.
Crucially, gp3 volumes include 3,000 IOPS and 125 MB/s of baseline throughput for free. This is a substantial improvement over gp2, where performance is directly tied to volume size. With gp2, to increase IOPS, you must increase the volume size, often leading to over-provisioning of storage you don't actually need. This coupling meant that if your application required high IOPS but not a large amount of storage, you were still paying for the excess GBs. gp3 breaks this link, allowing you to provision storage capacity independently from IOPS and throughput, leading to more optimized costs and performance tuning.

Understanding the gp2 vs. gp3 Performance Model
The performance model is a key differentiator. gp2 provides 3 IOPS per GB of storage. This means a 100 GB gp2 volume offers 300 IOPS, while a 1 TB (1000 GB) gp2 volume provides 3,000 IOPS. If your application needs more than 3,000 IOPS, you must provision at least 1 TB of storage, even if you only need 100 GB. This is inefficient and costly.
gp3, on the other hand, provides a minimum of 3,000 IOPS and 125 MB/s throughput by default, regardless of volume size. You can then independently provision additional IOPS up to 16,000 and throughput up to 1,000 MB/s. This independence allows you to tailor performance precisely to your application's needs without paying for unutilized storage capacity. For many workloads that don't require extreme IOPS or throughput, the baseline performance of gp3 is sufficient, and the cost savings on storage alone are substantial.
The Migration Process: Seamless and Downtime-Free
Migrating from gp2 to gp3 is remarkably straightforward and can be performed online with no downtime or data loss. AWS allows you to modify EBS volume types directly through the AWS Management Console, AWS CLI, or AWS SDKs. The primary command for this operation is aws ec2 modify-volume.
The process involves a single API call. You specify the volume ID you wish to modify and the target volume type, which is gp3. AWS handles the underlying conversion. Importantly, this modification does not require detaching the volume from your EC2 instance, nor does it necessitate taking a snapshot beforehand. The volume remains attached and available for I/O operations throughout the conversion process. While the conversion is in progress, the volume's state will be shown as optimizing. Once the optimization is complete, the volume will be available as a gp3 volume.
For those using the AWS CLI, the command would look something like this:
aws ec2 modify-volume --volume-id vol-0123456789abcdef0 --target-size 100 --volume-type gp3 --iops 3000 --throughput 125
Note that when migrating from gp2 to gp3, you can often omit the --iops and --throughput arguments if you intend to use the default baseline performance (3,000 IOPS and 125 MB/s). However, it is good practice to explicitly define them to ensure you are aware of the baseline you are receiving or to set custom performance levels if needed.
Identifying Volumes for Migration
To maximize savings, you need to identify which of your EBS volumes are currently using the gp2 type. This can be done by querying your AWS environment. Using the AWS CLI, you can list all EBS volumes and filter them by type:
aws ec2 describe-volumes --filters "Name=volume-type,Values=gp2" --query "Volumes[*].{ID:VolumeId,Size:Size,IOPS:Iops,Throughput:Throughput,State:State}" --output table
This command will return a table listing the Volume ID, Size (in GiB), IOPS, Throughput, and State for all gp2 volumes. You can then review this list to identify volumes that are not fully utilizing their provisioned IOPS or throughput relative to their size, or those where the storage cost is the primary concern.
Consider the following when identifying candidates:
- Large Volumes with Moderate Performance Needs: Any gp2 volume that is large (e.g., several TBs) but does not consistently require thousands of IOPS or hundreds of MB/s throughput is a prime candidate. The 20% storage cost reduction will be amplified by the large capacity.
- Volumes Approaching Max IOPS/Throughput Limits: If a volume is frequently hitting its gp2 IOPS or throughput limits, a direct migration to gp3 might not be enough. You would need to migrate and then provision additional IOPS and/or throughput to match or exceed the existing performance, potentially with a lower storage cost component.
- Development and Test Environments: These environments often have fluctuating or lower performance demands and can benefit significantly from the cost savings without impacting critical production workloads.
The Caveat: Understanding Bursting Behavior
While gp3 offers significant advantages, there's one crucial aspect to understand, particularly for workloads that relied on the bursting capabilities of gp2. gp2 volumes under 1 TB in size could burst up to 3,000 IOPS for a limited duration. When migrating such volumes to gp3, if you do not explicitly provision IOPS above the baseline 3,000 IOPS, your application might experience a perceived performance decrease if it heavily relied on these short bursts of high IOPS that exceeded the volume's baseline but stayed below 3,000 IOPS.
For example, a 100 GB gp2 volume (300 IOPS baseline) could burst to 3,000 IOPS. If you migrate this to a default gp3 (3,000 IOPS baseline) without provisioning extra IOPS, you are essentially losing that burst capability. If your application's performance profile includes short, intense spikes in I/O that leverage this burst, you must provision gp3 with higher IOPS to compensate. The cost of provisioning extra IOPS on gp3 is separate from the storage cost, and you'll need to balance the cost of these provisions against the overall savings and performance requirements. However, even with provisioned IOPS, the total cost can still be competitive compared to over-provisioned gp2 volumes.
Conclusion: A Smart Move for Most
For the vast majority of AWS users, migrating EBS gp2 volumes to gp3 is a straightforward and highly beneficial action. The ~20% reduction in storage cost per GB, combined with the decoupling of performance from size and the inclusion of baseline IOPS and throughput, makes gp3 a superior option. The ease of online migration with no downtime or snapshots further reduces the barrier to entry. By carefully identifying candidate volumes and understanding the performance implications, particularly regarding burst behavior, you can effectively cut storage costs and optimize your EBS performance.
