Order of work
- Visibility → 2. Waste → 3. Rightsize and schedule → 4. Storage and data transfer → 5. Commitments → 6. Governance
Buying Savings Plans before rightsizing locks in waste for one or three years.
1. Visibility
- Cost allocation tags (
owner,app,env,costcenter) activated in Billing - Tag policy in Organizations; untagged spend reported weekly
- Cost and Usage Report (CUR 2.0 / Data Exports) to S3, queried with Athena or QuickSight
2. Waste
# Unattached EBS volumes
aws ec2 describe-volumes --filters Name=status,Values=available --query "Volumes[].[VolumeId,Size,VolumeType,CreateTime]" --output table
# Unassociated Elastic IPs
aws ec2 describe-addresses --query "Addresses[?AssociationId==null].[PublicIp,AllocationId]" --output table
# Old snapshots
aws ec2 describe-snapshots --owner-ids self --query "Snapshots[?StartTime<'2025-10-01'].[SnapshotId,VolumeSize,StartTime]" --output table
- Unattached volumes, idle EIPs, old snapshots and AMIs cleaned
- Idle load balancers and NAT gateways in unused VPCs removed
- CloudWatch log groups have retention set
3. Rightsize and schedule
aws compute-optimizer get-enrollment-status
aws compute-optimizer get-ec2-instance-recommendations \
--query "instanceRecommendations[?finding=='OVER_PROVISIONED'].[instanceArn,currentInstanceType,recommendationOptions[0].instanceType]" --output table
- Compute Optimizer enabled org-wide (enhanced metrics for better accuracy where justified)
- Over-provisioned EC2, ASGs, Lambda memory and EBS rightsized
- Dev/test stopped out of hours (EventBridge Scheduler or Instance Scheduler)
- Graviton evaluated for compatible workloads
- Spot for fault-tolerant batch, CI and stateless workers
4. Storage and data transfer
- gp2 → gp3; S3 Intelligent-Tiering or lifecycle rules for cold data
- S3 noncurrent version expiration set
- Gateway VPC endpoints for S3/DynamoDB to cut NAT data processing
- Cross-AZ chatter reviewed for chatty services
5. Commitments
| Instrument | Covers | Flexibility |
|---|---|---|
| Compute Savings Plans | EC2 any family/region, Fargate, Lambda | Highest |
| EC2 Instance Savings Plans | One instance family in one region | Medium, deeper discount |
| Reserved Instances | RDS, ElastiCache, OpenSearch, Redshift, etc. | Per service |
aws ce get-savings-plans-purchase-recommendation --savings-plans-type COMPUTE_SP \
--term-in-years ONE_YEAR --payment-option NO_UPFRONT --lookback-period-in-days THIRTY_DAYS
- Commit to the stable baseline after rightsizing, not the peak
- Ladder purchases (smaller commitments every quarter) instead of one big buy
- Coverage and utilisation reviewed monthly
6. Governance
- AWS Budgets per account and per app with alerts to owners
- Cost Anomaly Detection monitors to on-call chat
- Monthly FinOps review with engineering owners; savings tracked