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.

Specific service comparison beyond compute

Compute and databases are the headline items, but you will use other services too. Here is what I actually touched across the three providers.

CategoryAWSAzureGCP
Object storageS3 (5 GB free, 12 months)Blob Storage (5 GB free, 12 months)Cloud Storage (5 GB Always Free)
Serverless functionsLambda (1M free requests/month, always)Functions (1M free requests/month, always)Cloud Functions (2M free requests/month, always)
CDNCloudFront (1 TB free, 12 months)Front Door (limited free)Cloud CDN (limited free via Cloud Storage)
DNSRoute 53 (not free)Azure DNS (not free)Cloud DNS (not free)

The serverless comparison is interesting. All three give you a million or more free invocations per month, and all three make it permanent, not just 12 months. For a small API or a webhook handler, Lambda, Azure Functions, and Cloud Functions are all viable. I found Lambda the easiest to deploy because the ecosystem of tutorials and SAM/Serverless Framework tooling is the largest. Cloud Functions was the simplest to wire up to Firestore if you are already in GCP. Azure Functions felt fine but the portal-based setup was slower than I wanted.

For storage, S3 is the industry default and every tool integrates with it. Cloud Storage is compatible with the S3 API in most cases. Azure Blob Storage works but its naming conventions (containers, not buckets) and tooling felt more Microsoft-specific.

Pricing comparison for a typical small project

I ran the same project on all three: a static site with a small backend API and a database. Here is what the monthly cost looked like after the free tier expired or where it did not apply.

ResourceAWSAzureGCP
Compute (smallest instance)~$8/mo (t3.micro)~$8/mo (B1s)~$7/mo (e2-micro, Always Free in eligible region)
Database (smallest managed)~$13/mo (RDS micro)~$15/mo (Azure SQL Basic)~$10/mo (Firestore on free tier)
Storage~$0.23/mo (5 GB S3)~$0.20/mo (5 GB Blob)~$0.20/mo (5 GB Cloud Storage)
Bandwidth~$0.90/mo (10 GB out)~$0.87/mo (10 GB out)~$0.12/mo (10 GB out, first 200 GB free)
Total~$22/mo~$24/mo~$0-10/mo

GCP wins on cost for a small always-on project because of the Always Free compute tier and the generous egress allowance (200 GB/month free vs. AWS's 100 GB and Azure's 100 GB). AWS and Azure are close to each other once the 12-month free tier ends. These are small numbers, but they add up over a year, and they are the difference between a hobby project that costs nothing and one that quietly drains $20/month.

Which cloud is best for different use cases

  • Resume and job hunting: AWS. It has the largest market share and the most job postings. If you want cloud experience that hiring managers recognize, AWS is the default.
  • Long-term hobby hosting with zero budget: GCP. The e2-micro Always Free tier and Firestore free allowance let you run a real project indefinitely for free if you stay in the eligible regions.
  • Microsoft ecosystem (.NET, Active Directory, enterprise): Azure. If your company already uses Microsoft 365 or Windows Server, Azure is the natural extension.
  • Machine learning and data work: GCP. BigQuery, Vertex AI, and the TensorFlow ecosystem are strongest here, though AWS SageMaker is competitive.
  • E-commerce or high-traffic web apps: AWS. The breadth of services (CloudFront, ElastiCache, RDS, ECS) is unmatched for production web infrastructure.
  • Simple static sites: Any of them, or none of them. A static site on Netlify or Vercel is cheaper and simpler than any cloud provider. I use Netlify for my own site and do not pay for cloud hosting at all.

Personal experience with each

AWS is where I spent the most time, starting with my internship. I set up EC2 instances, RDS databases, S3 buckets, and Lambda functions. The console is overwhelming at first because there are 200+ services, but once you learn the core ones (EC2, S3, IAM, RDS, Lambda), the rest are variations. The IAM permission model was the hardest part. I locked myself out of my own resources more than once before I understood policies. The orphaned EBS volume I mentioned earlier was an AWS-specific mistake.

Azure was the most frustrating for me because I do not work in the Microsoft stack day to day. The portal is visually clean but I found it slower to navigate than AWS's console. Resource groups are a good concept but they added a layer of mental overhead I did not need for a small project. The free SQL Database was useful, but since it was SQL Server and not Postgres, I could not use it for the project I was testing. I would use Azure again if a client was already in the Microsoft ecosystem, but I would not choose it for a personal project.

GCP was the most pleasant surprise. The console is the cleanest of the three. Firestore was easier to use than I expected, and the Always Free tier is genuinely free if you are careful about regions. The one mistake I made was deploying in us-east4 instead of us-central1, which cost me about $2 before I caught it. GCP is my default for personal tools that need to stay running without a budget.

How to choose if you are starting fresh

If you are new to cloud and picking one provider today, here is my recommendation:

  1. Open an AWS account first. The job market value is real. Even if you never deploy anything serious, learning the AWS console and the core services is worth it for your resume. Set a $0.01 billing alert the moment you create the account.
  2. Use GCP for anything you want to run long-term for free. The Always Free tier is the best deal in cloud computing. Deploy in us-central1 or us-west1 and check the region list every time.
  3. Only use Azure if you are already in the Microsoft ecosystem or you want to learn .NET deployment. It is a fine platform, but it adds friction if you are not already a Microsoft user.

The most important habit across all three: set billing alerts immediately, check your resources weekly, and clean up anything you are not using. The provider will not warn you. The bill will.

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.