TestForge Blog
← All Posts

Cloud Cost Optimization — Cut Your AWS/GCP Bill by 30% Every Month

Real cost reduction strategies that work. Reserved Instances, Spot, storage optimization, and network cost control — item-by-item savings tactics.

TestForge Team ·

Anatomy of a Cloud Bill

For most services, the cost breakdown looks like this:

ItemProportion
EC2/VM instances40–60%
RDS/DB15–25%
Storage (S3/EBS)10–15%
Network (data transfer)5–15%
Other services5–10%

Instances dominate, so start there.

1. Reserved Instances / Savings Plans

40–70% savings compared to On-Demand.

On-Demand m5.xlarge (Seoul): $0.214/h = $155/month
1-Year Reserved (no upfront): $0.136/h = $99/month → 36% savings
1-Year Reserved (full upfront): $0.113/h = $82/month → 47% savings

Strategy:

  • Baseline traffic → Reserved
  • Peak traffic → On-Demand or Spot
  • Uncertain future → Savings Plans (instance type can change)

2. Spot Instances

70–90% savings for interruption-tolerant workloads.

# Kubernetes Spot node group (EKS)
- name: spot-workers
  instanceTypes: ["m5.xlarge", "m5a.xlarge", "m4.xlarge"]  # Diversify types
  spot: true
  taints:
  - key: "spot"
    value: "true"
    effect: "NoSchedule"

Spot-friendly workloads:

  • CI/CD builds
  • Batch processing, data pipelines
  • ML training (with checkpoint saves)
  • Dev / staging environments

3. Right-Sizing Instances

Many teams are over-provisioned without realizing it.

# Check AWS Cost Explorer → "Right Sizing Recommendations"
# Or measure directly:

# Query average CPU over 2 weeks (AWS CLI)
aws cloudwatch get-metric-statistics \
  --namespace AWS/EC2 \
  --metric-name CPUUtilization \
  --dimensions Name=InstanceId,Value=i-xxxxxxxxx \
  --start-time 2026-03-11T00:00:00Z \
  --end-time 2026-03-25T00:00:00Z \
  --period 86400 \
  --statistics Average

Average CPU below 20% → consider downsizing to the next smaller instance type.

4. S3 Storage Class Optimization

S3 Standard:        $0.023/GB/month
S3 Standard-IA:     $0.0125/GB/month (infrequent access)
S3 Glacier Instant: $0.004/GB/month  (archive)
S3 Glacier Deep:    $0.00099/GB/month (long-term storage)
# Lifecycle policy for automatic transition
{
    "Rules": [{
        "Status": "Enabled",
        "Transitions": [
            {"Days": 30,  "StorageClass": "STANDARD_IA"},
            {"Days": 90,  "StorageClass": "GLACIER_IR"},
            {"Days": 365, "StorageClass": "DEEP_ARCHIVE"}
        ],
        "Expiration": {"Days": 2555}  # Delete after 7 years
    }]
}

5. Network Cost Reduction

Network is the cost you don’t see until the invoice arrives.

Expensive patterns:

  • EC2 → Internet: $0.09/GB
  • Cross-region data transfer: $0.02/GB
  • Cross-AZ transfer: $0.01/GB (bidirectional)

Savings approaches:

# 1. Route traffic within the same AZ (AZ-aware routing)
# 2. Use CloudFront instead of direct S3 access
# 3. VPC Endpoints to bypass internet for S3/DynamoDB
aws ec2 create-vpc-endpoint \
  --vpc-id vpc-xxx \
  --service-name com.amazonaws.ap-northeast-2.s3 \
  --route-table-ids rtb-xxx

6. Auto-Shutdown Dev/Staging Environments

# Lambda + EventBridge: stop at 11pm, start at 9am
# 14 hours saved per day → 58% monthly savings

# Terraform tag-based automation
resource "aws_autoscaling_schedule" "stop_dev" {
  scheduled_action_name  = "stop-dev"
  min_size              = 0
  max_size              = 0
  desired_capacity      = 0
  recurrence            = "0 14 * * MON-FRI"  # UTC 14:00 = KST 23:00
  autoscaling_group_name = aws_autoscaling_group.dev.name
}

7. Budget Alerts (Required)

# AWS Budget alert
aws budgets create-budget \
  --account-id 123456789 \
  --budget '{
    "BudgetName": "monthly-limit",
    "BudgetLimit": {"Amount": "1000", "Unit": "USD"},
    "TimeUnit": "MONTHLY",
    "BudgetType": "COST"
  }' \
  --notifications-with-subscribers '[{
    "Notification": {
      "NotificationType": "ACTUAL",
      "ComparisonOperator": "GREATER_THAN",
      "Threshold": 80
    },
    "Subscribers": [{"SubscriptionType": "EMAIL", "Address": "team@company.com"}]
  }]'

Savings Priority Summary

  1. Reserved / Savings Plans — apply immediately to stable baseline workloads
  2. Dev environment auto-shutdown — instant 50%+ savings
  3. Right-sizing — check CPU/memory utilization, then downsize
  4. Spot instances — CI/CD and batch workloads
  5. Storage lifecycle — move old S3 data to Glacier
  6. VPC Endpoints — eliminate S3/DynamoDB network charges