AWS Trusted Advisor has some good metrics on Cost Optimization when it comes to looking at your infrastructure portfolio and potential savings, however, it doesn’t offer a good way to see underutilized reservations. By using awscli
you can check your reservations against what is actually running in order to find under provisioned reservations:
#!/bin/bash # super quick hack to see difference between reserved and actual usage for RI IFS=" " first="true" for az in us-east-1b us-east-1d do if [ "$first" == "true" ] then echo "AvailabilityZone InstanceType Reserved Actual Underprovisioned" first="false" fi for itype in `aws ec2 describe-reserved-instances --filters Name=state,Values=active Name=availability-zone,Values=$az | grep InstanceType | sed -e 's/ //g' | cut -d'"' -f 4 | sort -u` do rcount=$(aws ec2 describe-reserved-instances --filters Name=state,Values=active Name=availability-zone,Values=$az Name=instance-type,Values=$itype | egrep 'InstanceCount' | awk '{print $NF}' | awk 'BEGIN{i=0}{i=i+$1}END{print i}') icount=$(aws ec2 describe-instances --filter Name=availability-zone,Values=$az Name=instance-type,Values=$itype | grep InstanceId | wc -l) echo "$az $itype $rcount $icount" | awk '{ if($4<$3){alert="YES"} print $1" "$2" "$3" "$4" "alert}' done; done | column -t
Output:
$ compare_reserved_instances_vs_actual.sh
AvailabilityZone InstanceType Reserved Actual Underprovisioned
us-east-1b m3.2xlarge 2 0 YES
us-east-1b m3.medium 2 8
us-east-1b m3.xlarge 11 4 YES
us-east-1b m4.xlarge 2 46
us-east-1d m3.medium 2 8
us-east-1d m3.xlarge 6 0 YES
us-east-1d m4.xlarge 1 17