What Stays Free After Month One: AWS, GCP and Oracle Free-Tier Cost Curves

Free-tier comparisons usually stop at the spec table: vCPUs, RAM, disk, how long the offer lasts. The bill that actually lands in month two, three and seven is a different document. Trial credits expire, egress counters roll over, and the disks you left attached keep billing whether or not anything is running on them. If you want a cheap always-on box instead, a low-cost VPS with a published monthly price gives you a flat number you can plan against. This article walks the month-by-month cost curve of AWS, Google Cloud and Oracle free tiers once the honeymoon ends, and points out the line items that surprise people.

The Three Curves in One Sentence Each

AWS Free Tier is a 12-month promotion that converts to on-demand pricing on the anniversary date. Google Cloud is a $300 credit that drains at whatever rate your resources consume, plus a small set of always-free resources. Oracle’s Always Free tier is permanent but tied to capacity availability and utilisation checks. The shape of the curve after month one is therefore: a cliff (AWS), a slope (GCP), and a flat line with a floor of risk (Oracle).

Provider What happens at month 13 Typical surprise charge
AWS Instance bills at on-demand (~$7.50/mo for t3.micro in us-east-1) EBS GP3 at $0.08/GB-mo, snapshots at $0.05/GB-mo
GCP e2-micro stays free in 3 US regions; credit is gone Static IP on an attached disk: ~$3/mo; egress at $0.12/GB
Oracle Ampere A1 stays free if in use Boot volume over 200 GB, block volume backups

Month 1–3: The Credit Mask

During the credit window nothing looks wrong. You spin up an extra instance, attach a second volume, take a snapshot before a risky upgrade. All of it is paid from the credit and the dashboard reads zero. The trap is that credit consumption is not visible in the same place as usage. Pull both numbers weekly:

# AWS: credit remaining and month-to-date usage
aws ce get-cost-and-usage --time-period Start=2026-09-01,End=2026-10-01 \
  --granularity MONTHLY --metrics UnblendedCost

# GCP: credit balance vs. run rate
gcloud billing accounts describe ACCOUNT_ID
gcloud billing budgets list --billing-account=ACCOUNT_ID

A $300 credit burning at $40/month lasts seven and a half months, not the twelve people assume. If your run rate is $40 while still nominally free, you have a hard deadline, not a soft one.

Month 4–12: The Slope Appears

This is where GCP behaves differently from AWS. Google’s always-free e2-micro is real but narrow: one instance, three US regions, 30 GB standard persistent disk, 1 GB egress to most destinations, and it must not have a static external IP attached when idle. The 1 GB egress ceiling is the deciding factor for anything that serves traffic. A site pushing 4 GB/month egress costs about $0.36 in egress plus a few cents for the IP — trivial, but it is a charge that never goes away and never appears in a headline comparison.

AWS behaves the opposite way: it is generous for eleven months and then abruptly not. The gotcha is not the instance, it is the storage. A t3.micro with a 30 GB root volume plus two 20 GB snapshots you forgot about bills roughly $7.50 + $2.40 + $1.00 ≈ $10.90/month starting on day 366. Nothing you can see in the console says “this used to be free.”

Idle Disks and Orphaned Snapshots: The Silent Line Item

Detached volumes keep billing. So do AMIs, machine images, and any snapshot chain derived from them. Enumerate them before the trial ends:

# AWS: volumes not attached to any instance
aws ec2 describe-volumes --filters Name=status,Values=available \
  --query 'Volumes[].[VolumeId,Size,CreateTime]' --output table

# AWS: snapshots older than 90 days
aws ec2 describe-snapshots --owner-ids self \
  --query 'Snapshots[?StartTime<=`2026-07-27`].[SnapshotId,VolumeSize,StartTime]' --output table

# GCP: unattached persistent disks
gcloud compute disks list --filter="-users:*" --format="table(name,sizeGb,zone)"

On a 100 GB account, a forgotten snapshot chain from three upgrades can be 180 GB of billed storage, which at AWS rates is $9/month for data you cannot boot from and will never restore. Deletion policy is part of provisioning, not cleanup.

Egress: Where the Curve Turns Vertical

AWS charges $0.09/GB after the first 100 GB/month aggregate egress (your 15 GB free allowance only applies within the 12-month window). GCP’s premium tier is $0.12/GB after 200 GB free, with a $0.01–0.05/GB discount on network tiers that exit closer to the user. Oracle includes 10 TB/month. The practical consequence: a 5 GB image tarball pulled 200 times a month is 1 TB of egress — about $81 on AWS, $96 on GCP premium, and $0 on Oracle. That single number, not vCPU count, should decide where a free-tier mirror or artifact host lives.

# AWS Cost Explorer: confirm egress is the driver
aws ce get-cost-and-usage --time-period Start=2026-09-01,End=2026-10-01 \
  --granularity DAILY --metrics UsageQuantity \
  --group-by Type=DIMENSION,Key=USAGE_TYPE \
  --filter '{"Dimensions":{"Key":"USAGE_TYPE_GROUP","Values":["EC2: Data Transfer - Internet (Out)"]}}'

Region Pricing: The Same Box, Four Prices

Free tiers are region-scoped, and the paid price you fall into is the price of the region you created the instance in. A t3.micro is $7.50/month in us-east-1, around $9.10 in eu-west-1, and $11.40 in ap-southeast-1. GCP’s free e2-micro only exists in us-west1, us-central1 and us-east1 — an instance in europe-west1 is free for nothing. If you chose a region to be close to users during a trial, your post-trial bill inherits that choice forever. Decide region on latency, then accept the price; don’t discover it at month thirteen.

Oracle’s Flat Line and Its Hidden Floor

Oracle Always Free has no cliff, which makes it the best long-run deal on paper: 4 Ampere A1 cores and 24 GB RAM split across up to four VMs, 200 GB block storage total, 10 TB egress. Two caveats. First, A1 capacity is genuinely scarce in popular regions; you may wait days for “Out of host capacity” to clear, and automating the retry loop is standard practice. Second, idle reclamation policy can target instances that show negligible CPU and network over long windows, so a monitoring box that does nothing but poll an API is more exposed than a busy one. Keep at least one meaningful workload on it, or accept that it may vanish.

Also watch the storage sum: 200 GB is the total across boot volumes and block volumes, and block volume backups bill separately once you exceed the free allowance. A single 200 GB boot volume uses the entire budget.

Decision Table by Workload

  • Static site, <1 GB/month egress: GCP e2-micro in a free region, static IP removed when idle. Cost stays at $0.
  • Self-hosted service with real egress: Oracle A1 if you can get capacity; otherwise a paid VPS is cheaper than $0.09/GB AWS egress past 1 TB.
  • Learning AWS specifically: treat month 12 as a hard stop date, set a calendar reminder and a billing alarm at $1.
  • Anything with a database and sustained CPU: none of these. Burstable free instances throttle exactly when the workload is interesting.
# A billing alarm that fires on the first cent of real spend
aws cloudwatch put-metric-alarm --alarm-name free-tier-breach \
  --namespace AWS/Billing --metric-name EstimatedCharges \
  --statistic Maximum --period 21600 --evaluation-periods 1 \
  --threshold 1 --comparison-operator GreaterThanThreshold

When the Flat Price Wins

The free-tier curve rewards you for doing nothing and punishes you for growing. Once a workload is earning its keep, the arithmetic flips: a $6–12/month VPS with a stated transfer allowance removes egress anxiety, snapshot surprises and the anniversary cliff in one line of a spreadsheet. The right time to migrate is before the credit runs out, not after the first overage invoice — moving a running workload under deadline pressure is how people lose a weekend. If you want to compare flat-price plans against these curves directly, browse the VPS plan comparison and price the same workload by month twelve.

Leave a Reply