← Back to Blog

AWS Cost Optimization - Top 10 Wins

Cloud
AWSCost OptimizationCloudFinOps

AWS cost optimization is an ongoing process, not a one-time activity. After helping dozens of organizations reduce their cloud spend, I've compiled the top 10 most impactful cost optimization strategies.

1. Right-Size Your Instances

Impact: 20-40% savings

Many organizations over-provision resources "just to be safe." Use CloudWatch metrics to analyze actual utilization:

# Analyze CPU utilization over 30 days
aws cloudwatch get-metric-statistics \
  --namespace AWS/EC2 \
  --metric-name CPUUtilization \
  --dimensions Name=InstanceId,Value=i-1234567890abcdef0 \
  --start-time 2024-01-01T00:00:00Z \
  --end-time 2024-01-31T23:59:59Z \
  --period 3600 \
  --statistics Average
bash

Action Items:

  • Review CloudWatch metrics for CPU, memory, and network
  • Downsize instances running below 40% utilization
  • Use AWS Compute Optimizer for recommendations

2. Use Reserved Instances Strategically

Impact: 30-50% savings on baseline workloads

Reserved Instances (RIs) offer significant discounts for predictable workloads:

  • Standard RIs: Up to 72% discount, 1-3 year terms
  • Convertible RIs: Up to 54% discount, can change instance family
  • Savings Plans: Flexible, apply to any instance in a family

Best Practices:

  • Start with 1-year terms for flexibility
  • Use Savings Plans for variable workloads
  • Purchase RIs for baseline capacity only

3. Implement Autoscaling

Impact: 30-50% savings on variable workloads

Autoscaling ensures you only pay for what you need:

# Example CloudFormation autoscaling configuration
AutoScalingGroup:
  Type: AWS::AutoScaling::AutoScalingGroup
  Properties:
    MinSize: 2
    MaxSize: 10
    TargetTrackingScalingPolicy:
      TargetValue: 70.0
      PredefinedMetricSpecification:
        PredefinedMetricType: ASGAverageCPUUtilization
yaml

Benefits:

  • Scale down during off-peak hours
  • Handle traffic spikes automatically
  • Pay only for active instances

4. Clean Up Unused Resources

Impact: 5-15% savings

Unused resources accumulate over time:

  • Orphaned EBS volumes - Detached volumes still incur charges
  • Idle load balancers - ALBs cost ~$16/month even when unused
  • Unused snapshots - Old snapshots can add up
  • Stopped instances - Still charge for EBS volumes

Automated Cleanup:

import boto3

def cleanup_orphaned_volumes():
    ec2 = boto3.client('ec2')
    volumes = ec2.describe_volumes(
        Filters=[{'Name': 'status', 'Values': ['available']}]
    )
    for volume in volumes['Volumes']:
        # Delete volumes older than 30 days
        if volume['CreateTime'] < (datetime.now() - timedelta(days=30)):
            ec2.delete_volume(VolumeId=volume['VolumeId'])
python

5. Optimize S3 Storage

Impact: 40-70% savings on storage costs

S3 offers multiple storage classes for different access patterns:

  • S3 Standard: Frequently accessed data
  • S3 Intelligent-Tiering: Automatic cost optimization
  • S3 Standard-IA: Infrequently accessed (90% cheaper)
  • S3 Glacier: Archive data (95% cheaper)

Lifecycle Policies:

{
  "Rules": [
    {
      "Id": "Move to IA after 30 days",
      "Status": "Enabled",
      "Transitions": [
        {
          "Days": 30,
          "StorageClass": "STANDARD_IA"
        }
      ]
    },
    {
      "Id": "Archive to Glacier after 90 days",
      "Status": "Enabled",
      "Transitions": [
        {
          "Days": 90,
          "StorageClass": "GLACIER"
        }
      ]
    }
  ]
}
json

6. Use Spot Instances for Non-Critical Workloads

Impact: 70-90% savings on flexible workloads

Spot instances offer massive discounts for workloads that can tolerate interruptions:

Best Use Cases:

  • Batch processing
  • CI/CD pipelines
  • Development/test environments
  • Data processing jobs

Implementation:

SpotFleetRequestConfig:
  Type: AWS::EC2::SpotFleet
  Properties:
    SpotFleetRequestConfig:
      IamFleetRole: !GetAtt SpotFleetRole.Arn
      TargetCapacity: 10
      LaunchSpecifications:
        - InstanceType: m5.large
          SpotPrice: "0.10"
yaml

7. Optimize Database Costs

Impact: 20-40% savings

Databases are often over-provisioned:

  • Right-size RDS instances - Use CloudWatch metrics
  • Use Aurora Serverless - Pay per use for variable workloads
  • Enable RDS automated backups - But limit retention
  • Use read replicas - Distribute read load efficiently

8. Implement Cost Allocation Tags

Impact: Better visibility and accountability

Tags help identify cost drivers:

# Tag all resources
aws ec2 create-tags \
  --resources i-1234567890abcdef0 \
  --tags Key=Environment,Value=Production Key=Team,Value=Engineering
bash

Essential Tags:

  • Environment (prod, staging, dev)
  • Team (engineering, marketing, etc.)
  • Project (project name)
  • CostCenter (for chargeback)

9. Use AWS Cost Explorer

Impact: Identify optimization opportunities

Cost Explorer provides insights into spending:

  • Cost by service - See which services cost the most
  • Cost by tag - Understand spending by team/project
  • Forecasting - Predict future costs
  • Reserved Instance recommendations - Get RI purchase suggestions

10. Monitor and Alert on Costs

Impact: Prevent budget overruns

Set up AWS Budgets to get alerts:

Budget:
  Type: AWS::Budgets::Budget
  Properties:
    Budget:
      BudgetName: MonthlyBudget
      BudgetLimit:
        Amount: "10000"
        Unit: USD
      TimeUnit: MONTHLY
    NotificationsWithSubscribers:
      - Notification:
          Threshold: 80
          Type: ACTUAL
        Subscribers:
          - SubscriptionType: EMAIL
            Address: finance@example.com
yaml

Quick Wins Checklist

  • [ ] Review and right-size EC2 instances
  • [ ] Purchase Reserved Instances for baseline workloads
  • [ ] Implement autoscaling for variable workloads
  • [ ] Clean up unused EBS volumes and snapshots
  • [ ] Configure S3 lifecycle policies
  • [ ] Use Spot instances for flexible workloads
  • [ ] Right-size RDS instances
  • [ ] Implement cost allocation tags
  • [ ] Set up AWS Budgets and alerts
  • [ ] Review Cost Explorer regularly

Conclusion

Cost optimization is an iterative process. Start with the quick wins (right-sizing, cleanup) and gradually implement more advanced strategies (RIs, Spot instances, autoscaling).

Remember: The goal isn't just to reduce costs, but to optimize the cost-performance ratio. Sometimes spending a bit more on the right resources can save money overall by improving efficiency.

Monitor your costs regularly and make optimization a part of your regular operations, not a one-time project.