Home/Infrastructure/Cloud Cost Optimization Strategies: 10 Practical Savings Techniques
InfrastructureFinOpsCost optimization

Cloud Cost Optimization Strategies: 10 Practical Savings Techniques

Flexera research finds that enterprises waste an average of 32% of cloud spend. At ₩10 million per month, that can mean ₩3 million going to waste.

Cloud Cost Optimization Strategies: 10 Practical Savings Techniques
Contents
  1. The Reality of Cloud Waste
  2. Strategy 1: Clean Up Unused Resources
  3. Strategy 2: Reserved Instances / Savings Plans
  4. Strategy 3: Spot Instances (Up to 90% Savings)
  5. Strategy 4: Optimize Auto Scaling
  6. Strategy 5: S3 Intelligent-Tiering
  7. Strategy 6: Cut Data Transfer Costs
  8. Strategy 7: Schedule Development Environments
  9. Strategy 8: Right-Size Resource Requests with VPA
  10. Strategy 9: Cost Tagging
  11. Strategy 10: Cost Anomaly Alerts
  12. Finding the Cause When Costs Climb Again After Savings

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

Bash
# 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

CODE
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)

YAML
# EKS Spot
managedNodeGroups:
- name: spot-workers
  spot: true
  instanceTypes:
  - m5.xlarge
 - m5a.xlarge #
  - m4.xlarge

Strategy 4: Optimize Auto Scaling

YAML
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
spec:
  minReplicas: 2
  maxReplicas: 20
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        averageUtilization: 70
  behavior:
    scaleDown:
      stabilizationWindowSeconds: 300

Strategy 5: S3 Intelligent-Tiering

Bash
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

Python
# 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

Bash
# Vertical Pod Autoscaler
kubectl describe vpa my-app-vpa
# Result: cpu: 120m, memory: 180Mi
# ( 500m/512Mi 75% )

Strategy 9: Cost Tagging

Bash
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=Service

Strategy 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)

Bash
# 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 table

Fix 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 verification

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.

Published ·
Topic-related official docs (auto-linked · not per-claim sources)AWS documentation ↗pgvector repository ↗

Comments

Be the first to comment.