Cloud cost engineering

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.

cloudprice editorial ~5 min read

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.

Try it yourself
Compare list prices across all seven providers, side by side. Live snapshot updated regularly.