Skip to content

Staying always-free

Oracle's Always-Free tier is only free if you stay inside the allowance. Every "I accidentally got charged $50" story from the OCI free tier is one of the traps below. Here's the specific checklist to avoid them.

Set a budget alert first

Do this before you provision anything else. It's your fail-safe.

Governance & AdministrationBudgetsCreate budget.

Field Value
Name always-free-fail-safe
Compartment root
Target compartment root
Budget amount $1.00
Alert threshold 50% of budget
Threshold type Actual
Email Your address

Now the moment your usage hits $0.50, Oracle emails you. That's long before anything meaningful can accumulate. If you ever see one of these emails, log into the console and look at Cost Management → Cost Analysis to see what's costing money.

Enable cost tracking

Governance & AdministrationCost ManagementCost Analysis. Bookmark this page. Check it once a week for the first month, monthly after that.

For Always-Free-tier services, every cost row should show $0.00. Any non-zero row means you provisioned something outside the free tier — figure out what and terminate it.

The specific traps

Load Balancer (flexible)

ComputeLoad Balancer → any load balancer with a "Flexible" or non-10 Mbps shape is not always-free. If you provisioned one by accident, terminate it: Load Balancer… menuTerminate.

The only free LB is the 10 Mbps shape, and only one instance of it. Even that adds unnecessary complexity for this guide — Caddy on your VMs does the job.

NAT Gateway

Any NAT Gateway (NetworkingVCNNAT Gateways) is not always-free. The one the VCN Wizard creates is a common trap — we told you to delete it in the networking chapter.

Bare Metal shapes

Any compute shape starting with BM. is billed. Stick to VM.Standard.E2.1.Micro (AMD) and VM.Standard.A1.Flex (ARM).

GPU shapes

Anything with .GPU or A10/A100/H100 in the shape name is billed at serious hourly rates. Don't touch.

Boot volumes and block volumes over budget

  • Total block storage: 200 GB across all volumes in your tenancy.
  • Each instance's boot volume counts. Ubuntu 24.04 minimal at 47 GB × 3 instances = 141 GB. That leaves 59 GB for additional block volumes.
  • Attaching a 100 GB block volume to arm-1 (total: 241 GB) → billed for the 41 GB over the free tier.

Verify: StorageBlock Volumes and StorageBoot Volumes. Sum the sizes. Should be ≤ 200 GB.

Reserved public IPs beyond one per instance

Each instance gets one free IP. Extra Reserved Public IPs you provision manually and don't attach to an instance are billed. Check: NetworkingPublic IPsReserved Public IPs. Terminate any you're not actively using.

Object storage

Free: 20 GB in the Standard tier. Any bucket total beyond that is billed at a low rate ($0.026/GB/month at time of writing) but it's still not free.

Verify: StorageBuckets → sum the sizes.

Cross-region traffic

Egress from your home region to another region is billed. If you're serving traffic to another region, it comes out of your 10 TB/month egress allowance if the destination is public internet, but inter-region OCI traffic to another region of your own is billed separately.

For a solo lab, you don't do this. But if you find yourself replicating data to another region "just in case," check the rates first.

Bandwidth egress

10 TB/month is a lot but not infinite. Check: Governance & AdministrationUsage Reports → bandwidth summary.

If you find yourself approaching the limit (say, a Reddit hug of death on one of your demos), Cloudflare's free tier proxied mode (orange cloud) can absorb a lot of it — Cloudflare caches static content at their edge and serves it without your origin seeing the traffic. Trade-off: as discussed in the DNS chapter, orange-cloud interferes with Caddy's auto-TLS. If you need this migration, switch to Cloudflare-issued origin certificates instead of Let's Encrypt.

The audit checklist

Once a month, walk this checklist. Takes 5 minutes:

  • [ ] Cost Analysis page shows all $0.00 rows
  • [ ] Load Balancers: none (or only the free 10 Mbps one)
  • [ ] NAT Gateways: none
  • [ ] Compute Instances: only E2.1.Micro and A1.Flex shapes
  • [ ] Block Volumes + Boot Volumes: total ≤ 200 GB
  • [ ] Reserved Public IPs: none unassigned to running instances
  • [ ] Object Storage buckets: total ≤ 20 GB
  • [ ] Usage Reports → bandwidth: comfortably below 10 TB
  • [ ] Any newly-launched service in the console: verify Always-Free-eligible before creating

If you already got charged

Don't panic. Two things:

  1. Terminate the billable resource immediately. Stop the bleed.
  2. Open an OCI support ticket. For genuine first-time-user mistakes on the Always-Free tier, Oracle has been known to credit small charges as a goodwill gesture — no promises, but it's worth asking. Support → HelpCreate Support Request.

The philosophical bit

The free tier isn't a trap. Oracle offers it because free-tier users become paid customers eventually (and because it's cheap capacity that would otherwise sit idle). If you outgrow the free tier and start paying, that's fine — a paid OCI VM is still one of the cheaper options among the major clouds. The point of this guide is that you don't have to.

Next

Head to Troubleshooting if something isn't working, or head back to Overview to check what you've completed.