The Reality of Cloud Waste
According to Flexera research, enterprises waste an average of 32% of their cloud spend. If you spend ₩10 million a month, ₩3 million of that may be waste.
Strategy 1: Clean Up Unused Resources
# EBS volume
aws ec2 describe-volumes \
--filters Name=status,Values=available \
--query 'Volumes[*].[VolumeId,Size]'
# IP
aws ec2 describe-addresses \
--query 'Addresses[?AssociationId==null].[PublicIp]'Strategy 2: Reserved Instances / Savings Plans
On-Demand m5.xlarge: $0.192/when = $140/
1 RI : $0.095/when = $69/ (51% )
3 RI : $0.060/when = $44/ (69% )Strategy 3: Spot Instances (Up to 90% Savings)
# EKS Spot
managedNodeGroups:
- name: spot-workers
spot: true
instanceTypes:
- m5.xlarge
- m5a.xlarge #
- m4.xlargeStrategy 4: Optimize Auto Scaling
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
spec:
minReplicas: 2
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
averageUtilization: 70
behavior:
scaleDown:
stabilizationWindowSeconds: 300Strategy 5: S3 Intelligent-Tiering
aws s3api put-bucket-intelligent-tiering-configuration \
--bucket my-bucket \
--id EntireBucket \
--intelligent-tiering-configuration '{
"Status": "Enabled",
"Tierings": [
{"Days": 90, "AccessTier": "ARCHIVE_ACCESS"},
{"Days": 180, "AccessTier": "DEEP_ARCHIVE_ACCESS"}
]
}'Strategy 6: Cut Data Transfer Costs
- Place services in the same AZ (inter-AZ transfer is billed too!)
- Use CloudFront to reduce origin traffic
- Connect to S3 for free with VPC Gateway Endpoints
Strategy 7: Schedule Development Environments
# 10when~ 8when,
def stop_dev_instances():
ec2 = boto3.client('ec2')
instances = ec2.describe_instances(
Filters=[
{'Name': 'tag:Environment', 'Values': ['dev', 'staging']},
{'Name': 'instance-state-name', 'Values': ['running']}
]
)
ids = [i['InstanceId'] for r in instances['Reservations'] for i in r['Instances']]
if ids:
ec2.stop_instances(InstanceIds=ids)Strategy 8: Right-Size Resource Requests with VPA
# Vertical Pod Autoscaler
kubectl describe vpa my-app-vpa
# Result: cpu: 120m, memory: 180Mi
# ( 500m/512Mi 75% )Strategy 9: Cost Tagging
aws ce get-cost-and-usage \
--time-period Start=2025-01-01,End=2025-01-31 \
--granularity MONTHLY \
--metrics BlendedCost \
--group-by Type=TAG,Key=ServiceStrategy 10: Cost Anomaly Alerts
Configure AWS Budgets to alert immediately when spend exceeds budget. Catch sudden bill shock before it hits.
Cloud cost optimization is not a one-off task. Make a monthly cost review part of your team's routine.
Finding the Cause When Costs Climb Again After Savings
Cost optimization isn't one-and-done; costs often creep back months later. Start by narrowing down what grew, by service and by tag.
Causes
- New services deployed without cost tags, so no one knows the owner
- Commitments (Savings Plans, RIs) expired and usage fell back to on-demand rates
- No retention set for logs and snapshots, so they accumulate
Checks (AWS example)
# cost by service over the last two months
aws ce get-cost-and-usage --time-period Start=2026-07-01,End=2026-09-01 \
--granularity MONTHLY --metrics UnblendedCost --group-by Type=DIMENSION,Key=SERVICE
# commitment coverage
aws ce get-savings-plans-coverage --time-period Start=2026-08-01,End=2026-09-01
# old EBS snapshots
aws ec2 describe-snapshots --owner-ids self --query "Snapshots[?StartTime<='2026-03-01'].[SnapshotId,VolumeSize,StartTime]" --output tableFix and prevention
- Block creation of untagged resources with policies (SCPs, tag policies) and set an alert 30 days before commitments expire.
- Clean up snapshots and logs automatically with lifecycle policies (Data Lifecycle Manager, log retention periods).
Sources and checks vary by article. Only articles with a recorded check date, scope and sources below were checked, and only within that scope. For other articles, verify against the current docs for your version before applying anything, and email us about errors. Editorial policy · email us
This article has no recorded human check (date and scope) yet.
Comments
Be the first to comment.