I have burned small amounts of money on all three major cloud providers. Not a lot, but enough to remember the mistakes. This post is the comparison I wish I had before opening those accounts: not a marketing table, but the practical differences I noticed while actually using AWS, Azure, and GCP for small projects.

I am not going to declare a winner. Each one is free in a different way, and each one has a different way of surprising you with a bill. What matters is matching the provider to what you are actually trying to do.

Why I compared them at all

After my AWS internship and a few side projects, I wanted to know whether the free tier on Azure or GCP was meaningfully better for a hobby project. I built the same small static site plus a tiny database-backed note app on all three. I tracked what was free, what broke, what was annoying, and what quietly cost money.

The honest answer: AWS has the most hiring-market value, GCP has the best long-term free compute option, and Azure sits in the middle with a few specific Microsoft ecosystem wins. None of them is magic. All of them require you to watch your resources.

Cloud architecture checkpoint illustration for this section.

Compute comparison

Compute is usually the biggest line item, so this is where the free tiers matter most.

ProviderFree computeNotes
AWS750 hours/month of t2.micro or t3.micro for 12 monthsTwo burstable vCPUs. Watch CPU credit balance during spikes.
Azure750 hours/month of B1s for 12 monthsOne vCPU, similar burstable model. Slightly weaker baseline.
GCPe2-micro Always FreeTwo shared vCPUs, but only free in certain regions. No 12-month clock.

AWS and Azure both give you a year. That sounds generous, but on day 366 the free ride is over. GCP's e2-micro is the only option here that is designed to stay free indefinitely, as long as you stay inside the eligible regions. GCP publishes the Always Free limits directly on its pricing page, and the eligible regions are part of that same doc.

The catch with GCP is location. If you deploy in the wrong region, it is not free. I accidentally left something in us-east4 once and saw a small charge the next month. The fix was just moving it to us-central1, but it taught me to check the region list before creating anything.

Databases: the part that actually gets expensive

Free compute is easy to understand. Free databases are where the providers start splitting hairs.

  • AWS RDS: gives you a managed MySQL, Postgres, or MariaDB micro instance for 12 months, plus 20 GB of storage.

  • Azure: gives you 250 GB of Azure SQL Database, but that is Microsoft SQL Server. If your project expects Postgres, that free tier does not help you.

  • GCP: does not offer a strong free relational tier, but Firestore has a generous NoSQL free allowance.

  • Sources: Amazon RDS pricing, Azure SQL Database pricing, Firestore pricing

For learning relational databases, AWS was the clearest path. For a tiny side project that needed a small NoSQL store, Firestore was simpler than I expected. For anything Microsoft-specific, Azure made sense, but I do not use .NET day to day, so I ended up fighting the portal more than I expected.

Billing surprises I actually hit

These are not edge cases. They are the things that got me on each provider.

AWS: the orphaned EBS volume

I deleted an EC2 instance but forgot the EBS volume. A month later I had a charge for an unattached 8 GB disk. The fix takes ten seconds once you know where to look. I now clean up volumes as a separate step every time I terminate an instance.

Azure: a disk tier that was not free

I picked a disk tier that looked standard but was not covered by the free tier. The charge was small, but the reason was not obvious from the portal summary. Now I double-check that a disk SKU is listed in the Azure free services scope before I create it.

GCP: wrong region

I deployed in the wrong region. That is the whole story. Region discipline matters more on GCP because the Always Free regions are specific. I keep the Always Free region list open when I create resources.

The common thread is that the cloud provider will not stop you. You have to verify what is still running and where.

Cloud operations checkpoint illustration for this section.

Quick CLI checks I use before walking away

I do not trust my memory, so I run the same quick checks on every provider before I log out.

AWS

# Compute still running?
aws ec2 describe-instances --query "Reservations[].Instances[].{Id:InstanceId,State:State.Name,Type:InstanceType}" --output table
# Unattached EBS volumes (common hidden charge)
aws ec2 describe-volumes --filters Name=status,Values=available --query "Volumes[].{Id:VolumeId,Size:Size,AZ:AvailabilityZone}" --output table

Azure

# VMs still allocated
az vm list -d --query "[].{name:name,rg:resourceGroup,power:powerState}" -o table
# Public IPs and allocation method
az network public-ip list --query "[].{name:name,rg:resourceGroup,allocation:publicIPAllocationMethod,sku:sku.name}" -o table

GCP

# Running compute instances
gcloud compute instances list --format="table(name,zone,status,machineType)"
# Persistent disks (watch for detached/unused resources)
gcloud compute disks list --format="table(name,zone,status,sizeGb,type)"

These commands take seconds and catch the most common leftover resources.

Which provider fits what you are doing

If your priority is...ChooseWhy
Resume value and job marketAWSLargest market share and most job postings mention it
Permanent free compute for a personal toolGCPe2-micro Always Free is unmatched if you stay in eligible regions
Microsoft stack integrationAzureVisual Studio and .NET tooling flow nicely
Learning managed relational databasesAWSRDS free tier is the most straightforward
Avoiding accidental chargesAny, with disciplineSet a billing alert for $0.01 and check it weekly

The golden rule is the same across all three. Set a billing alert the moment you create the account. A $0.01 alert tells you the instant something starts charging. That early warning is worth more than any free tier comparison.

What changed in 2026

The core free tier structures have not shifted dramatically, but the defaults and UI keep moving. AWS still leads the job market. Azure still leans into the Microsoft ecosystem. GCP still offers the only long-term free compute tier if you stay inside the eligible regions. The biggest change is that all three providers now surface billing alerts more aggressively, which helps, but it does not replace your own weekly resource check.

If I were starting fresh today, I would open an AWS account for resume relevance, a GCP account for long-term hobby hosting, and only touch Azure when a project is already using Microsoft services.

Closing

AWS, Azure, and GCP all have usable free tiers. None of them will protect you from your own forgetfulness. The provider that is best for you depends on whether you care more about career signal, long-term free hosting, or ecosystem fit.

My practical setup: AWS for anything that needs to look like real cloud work on a resume, GCP for small always-on personal tools, and Azure only if the project is already living in a Microsoft stack. If you start with that rule of thumb and add billing alerts, you will avoid most of the mistakes I made.