Pricing model traps: per-second billing, prorated months, minimum charges
Per-second billing isn't always what it sounds like. Prorated months on Hetzner. AWS minimums. The billing-unit details that distort apples-to-apples comparison.
Every provider advertises a billing model: per-hour, per-second, monthly. The marketing makes them sound similar. They're not. Each has trap cases that distort the headline rate by 10-30%.
AWS: per-second with a 60-second minimum (Linux), per-hour rounded (Windows / RHEL)
Linux EC2 is billed per second after a 60-second minimum. A 30-second container task costs the same as a 60-second one. A 2-minute job costs 2 minutes (120 seconds). Fair, if you remember the minimum.
Windows and RHEL EC2 are billed per hour, always rounded up. Spin up a Windows instance for 5 minutes, pay for a full hour. This is licensing-driven (Microsoft RDP CALs work this way) but it's a hidden tax: launching a Windows test box 50 times a day for a 10-minute test = 50 instance-hours billed, vs ~9 hours of actual usage.
Spot instances follow the same minimum but the price changes by the second.
GCP: per-second after 1 minute
Same as AWS Linux. 1-minute minimum, then per-second granularity. No quirks for Windows on GCP at the per-second level — Windows licensing premium is folded into the hourly rate.
Azure: per-minute, rounded
Azure VMs are billed per minute. A 30-second run pays for a full minute. A 1:45 run pays for 2 minutes. Smaller minimum than AWS but coarser granularity. Practical impact is negligible for steady workloads, real for autoscaling burst-creation patterns.
Hetzner: per-hour, capped at monthly
Hetzner VMs are billed per hour, with a monthly cap. A €5.83/month CPX21 is technically €0.008/hour but you never pay more than €5.83/month no matter how long you run it.
Cap reset: monthly bill closes at the calendar month end. Start a VM on the 27th of a month, run it 4 days, you pay for 4 days (~€0.78) then the cap kicks in for the next month. Start it on the 1st and the monthly cap covers everything.
The interaction with prorated upgrades: change instance type mid-month and you're billed for each hour at the rate applicable. Hetzner handles this transparently but bigger upgrades can be lumpy.
DigitalOcean: per-second after 5 minutes
DO has a 5-minute minimum and then bills per second. Useful nuance: their "transfer pool" is calculated monthly based on droplets that existed at any point — destroying a droplet doesn't recover its bandwidth allocation, but creating one mid-month gives you a partial allocation prorated by the days remaining.
Vultr: per-hour, capped at monthly
Similar to Hetzner. Hourly granularity, monthly cap. Per-minute available on some plan tiers.
Linode: per-hour, capped at monthly
Same model as Hetzner / Vultr.
The trap cases
Spinning up and tearing down quickly
Launching a 50-instance ASG for 10 minutes to absorb a traffic spike: AWS Linux is essentially fair (you pay for ~9 instance-hours). On Windows it's 50 hours. On Azure it's still close to fair (you pay for ~9). On Hetzner you pay for ~1 instance-hour per VM created. On DigitalOcean you pay for 50 × 5-minute minimums = ~4 instance-hours.
For workloads with high churn (CI/CD spawning ephemeral runners, ML training that scales out for a single job), this matters.
The "started and immediately failed" instance
VM launches, application fails immediately, ASG terminates after 30 seconds. AWS: 60-second minimum, so you paid for 60 seconds. GCP: 60 seconds. Azure: 1 minute (60 seconds). Hetzner: 1 hour. Vultr: 1 hour. Linode: 1 hour.
The hyperscalers are better here. For self-healing systems that may spin up and crash often, the 60-second minimum versus 1-hour minimum is a real cost difference.
The "first 5 minutes" trap on DigitalOcean
DO's 5-minute minimum hurts the same case. A 30-second smoke test instance costs the same as 5 minutes.
Storage volume minimums
AWS EBS gp3 has a 1 GB minimum size, billed per GB-month. Not a real issue.
AWS S3 has no minimum object size in Standard, but Standard-IA / Glacier Instant Retrieval / Glacier all bill objects as if they were at least 128 KB. Storage of a billion 4 KB log files in S3 Glacier Instant Retrieval = bill for 128 GB × $0.004 = $0.51 (cheap!) but the per-request fees on retrieval will eat you alive.
Hetzner storage box: monthly billing only. Resize is per-month.
Network: per-Mbps vs per-GB vs included
AWS / GCP / Azure: pay per GB. Anything you transfer adds to the bill.
Hetzner / DO / Vultr / Linode: each VM has an included monthly egress quota. Unused quota does not roll over. A 1 TB-included VM that uses only 200 GB this month: the other 800 GB are lost.
This makes the per-VM bandwidth allocation more like a "minimum charge for capacity" than a true variable cost. For workloads that hit close to the quota, it's fine. For massively over-provisioned, you're paying for headroom you don't use.
Load balancer fixed costs
AWS ALB: $0.0225/hour + LCU charges ($0.008/LCU). Minimum monthly is about $16.20.
GCP Cloud Load Balancing: free for the first 5 forwarding rules + $0.025/hour + per-GB processed.
Azure Standard Load Balancer: $0.025/hour + per-rule overage.
Hetzner LB11: €5.39/month flat.
DO LB: $12/month flat.
Vultr LB: $10/month flat.
Linode NodeBalancer: $10/month flat.
For low-traffic sites, the hyperscaler load balancer minimums can be a significant chunk of the total bill — $25-50/month on a $100/month workload.
Resource that runs continuously vs intermittently
The granularity differences only matter for intermittent / autoscaling workloads. For a VM that runs 24/7, all the providers' billing models converge — you pay the headline rate for the headline duration.
If your workload is steady-state, ignore the billing-model fine print and just compare hourly rates (or monthly caps). The cloudprice catalogue shows both for every instance.
If your workload is bursty / autoscale-heavy / batch-job-heavy, the AWS / GCP per-second model after a 1-minute minimum is genuinely an advantage. Hetzner / Linode / Vultr are not optimised for this pattern, and you can pay 20-30% more than the headline rate suggests once you factor in the hourly rounding.
The cheat sheet
- Steady production workload: Doesn't matter, pick by hourly rate.
- CI/CD with ephemeral runners: Hyperscaler Linux per-second billing matters; Hetzner hourly hurts.
- Batch jobs <5 min each: AWS Linux Spot is unbeatable.
- Batch jobs hours long: Anything works; pick on hourly rate.
- Cold standby VMs: Hetzner / Vultr / Linode monthly cap is helpful — VM idle costs less than its theoretical hourly × 730.
For an apples-to-apples view, the cloudprice main table shows hourly, monthly, and 1-year reserved together. The TCO calculator assumes 24/7 operation, so for non-24/7 workloads scale down the compute line accordingly.