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 & Administration → Budgets → Create 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 |
| 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 & Administration → Cost Management → Cost 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)¶
Compute → Load 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 → … menu → Terminate.
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 (Networking → VCN → NAT 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: Storage → Block Volumes and Storage → Boot 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: Networking → Public IPs → Reserved 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: Storage → Buckets → 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 & Administration → Usage 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.MicroandA1.Flexshapes - [ ] 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:
- Terminate the billable resource immediately. Stop the bleed.
- 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 → Help → Create 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.