Amazon Elastic Block Store (EBS) enables you to provision block storage volumes in your Amazon Web Services (AWS) account. These storage volumes can be configured with a variety of size and performance options, which affects their monthly cost.
The over-provisioned EBS volume check comes from the AWS Trusted Advisor service. This service uses a proprietary algorithm to determine when EBS volumes should be flagged as over-provisioned. At a high level, it uses the performance utilization metrics of the EBS volume to determine if the provisioned capacity is being used or not.
If an EBS volume is over-provisioned, it means that the utilized capacity of the volume is not being fully consumed by workloads running in AWS.
Amazon EBS volumes can be reconfigured once every six hours. You can modify the performance characteristics of volumes, such as provisioned IOPS and throughput (aka. bandwidth), and the underlying storage type.
The modifications you can make to an EBS volume depend on the volume type.
You can use the AWS Management Console to modify EBS volumes individually. To modify many EBS volumes, you can use automation tools like the AWS CLI or AWS PowerShell module to perform volume modifications at scale.
Example: Let's assume you have an EBS volume using the io2 Block Express volume type, with
In order to remediate an over-provisioned Amazon EBS volume, you can reconfigure the volume's provisioned performance characteristics, using EBS volume modifications.
Before you modify an EBS volume, you'll want to see what your currently utilized IOPS and Throughput (Bandwidth) are, over a given look-back period (eg. 2 weeks). You can examine the metrics for your EBS volumes in the Amazon CloudWatch metrics service.
Once you've identified the average per-second IOPS and Throughput, you can use this information to make an informed decision about how to reconfigure your EBS volume.
In the graph screenshot below, you can see we're maxing out at roughly 7.8 GB/minute of EBS volume read throughput. If we divide that by 60, that's about 133 MB/sec of data throughput. Since this EBS volume has a GP3 volume type, with 125 MB/sec of throughput, we are actually exceeding the provisioned capacity very slightly.
For volume IOPS, we're using 164,000 read IOPS per minute, which is around 2,700 IOPS per second. Our GP3 volume already has the minimum of 3,000 IOPS configured, so we can't reduce that any further. In your case, you'll want to examine the provisioned IOPS for your volume, and compare it to the IOPS from CloudWatch, and determine if a reduction is possible.
If you'd like to use the AWS Management Console to modify an Amazon EBS volume, you can follow these steps:
The AWS CLI tool can be used to automate changes to Amazon EBS volumes as well. This is helpful if you want to perform changes across a large number of volumes, in different regions, and in different AWS accounts.
Here's a sample command you could use to modify a specific volume ID. Let's say we wanted to increase the IOPS from 3,000 to 3,500, for a GP3 volume type.
aws ebs modify-volume --volume-id vol-1234567890 --iops 3500
Here's a sample command that changes the IOPS and Throughtput for a GP3 volume. The --throughput parameter accepts an integer in megabytes per second (MBps). If you're using the default 125 MB/sec of throughput for GP3, this would increase it to 300 MB/sec.
aws ebs modify-volume --volume-id vol-1234567890 --iops 3500 --throughput 300
The AWS PowerShell module also acts as a wrapper around the AWS APIs, using an object-oriented shell scripting interface. You can either install the AWS PowerShell module locally or use it inside of the AWS CloudShell environment, within the AWS Management Console. For now, we'll assume you're running PowerShell from CloudShell, where the AWS modules are pre-installed.
To modify an EBS volume IOPS, use the Edit-EC2Volume command, similar to the example command below.
Edit-EC2Volume -VolumeId vol-1234567890 -Iops 4200
To change both the IOPS and Throughput for an EBS volume, try this command.
Edit-EC2Volume -VolumeId vol-1234567890 -Iops 5300 -Throughput 275
If you'd like to modify multiple volumes in the same AWS region, you can iterate over an array of EBS volume IDs in PowerShell.
$VolumeList = @(
'vol-12345'
'vol-56789'
)
foreach ($Volume in $VolumeList) {
Edit-EC2Volume -VolumeId $Volume -Iops 3200
}
If you want to modify EBS volumes within a single AWS account, but across multiple AWS regions, you may want to use a HashTable (aka. Dictionary) data structure to define the volume IDs that belong to each region.
$VolumeList = @{
'us-west-1' = @(
'vol-7833'
'vol-1234'
'vol-3456'
)
'eu-central-1' = @(
'vol-8383'
'vol-4844'
'vol-8228'
)
}
foreach ($Region in $VolumeList.Keys) {
foreach ($Volume in $VolumeList.$Region) {
Edit-EC2Volume -Region $Region -VolumeId $Volume -Throughput 340
}
}
For more advanced implementations of cost optimization at your company, please reach out to us at StratusGrid and ask about our success-based cost optimization program! Our cloud engineers are equipped to perform in-depth cost analysis of your cloud environment, make recommendations, and implement the changes in accordance with your organization's change management policies.