Azure Virtual Machines vs Hetzner Cloud
Azure Virtual Machines is a hyperscaler: hundreds of sizes, GPUs, Windows, Arm and 77 regions, billed per minute. Hetzner Cloud rents plain Linux servers by the hour with a monthly cap, in a few locations, and bills them until you delete them.
The companies and products
Azure Virtual Machines
Azure Virtual Machines is Microsoft's general-purpose cloud VM service: you rent Linux or Windows machines by the minute in Azure regions worldwide.
It is a hyperscaler IaaS product, not a sandbox API. Each VM runs on Microsoft's Hyper-V hypervisor with its own kernel, root and SSH, and you pick from hundreds of sizes, including Arm, burstable and GPU families. Networking, disks, images, firewalls and any agent tooling are separate pieces you set up yourself, so it suits teams that already run on Azure and want full control.
Hetzner Cloud
Hetzner is a German hosting company founded in 1997; Hetzner Cloud rents virtual servers, storage and networking by the hour.
A Hetzner Cloud server is a Linux VM picked from shared vCPU lines (cost-optimized CX and CAX, regular CPX) or dedicated vCPU (CCX), with local NVMe disk, a public IP and up to 20 TB of traffic in the EU. You add volumes, private networks, firewalls and load balancers, and run everything yourself through the Console, the Cloud API, the hcloud CLI or Terraform. It is general infrastructure, not an agent sandbox, so this page compares the two where they overlap: giving an agent its own Linux machine.
Which use cases each one fits
For each use case, Battleships prices every sandbox provider on the same workload and sorts them from the cheapest monthly bill up. “3rd cheapest of 364” means 2 of the other 363 providers run that workload, with every feature it needs, for less. “With limits” means the provider runs it but misses something, so it is listed after every full match. Open a use case for its whole ranking and what each provider misses.
| Use case and its workload | Azure Virtual Machines: price rank | Hetzner Cloud: price rank | boat: price rank |
|---|---|---|---|
| Software factory 100 at once · 4 vCPU / 8 GB · 2,200 sessions of 8 h a month Both give a full VM with root and Docker, but Hetzner has no nested virtualization and Azure has it only on x86 D and F sizes; boat has /dev/kvm, agents and HTTPS URLs on every machine. | 83rd of 367, with limits $730 a month | 46th of 367, with limits $287 a month | 3rd cheapest of 367 $634 a month |
| Always-on AI employees 50 machines 24/7 · 2 vCPU / 4 GB Either can run an assistant around the clock, but you build the agent setup, HTTPS and backups yourself; boat has them built in. | 113th of 366, with limits $644 a month | 94th of 366, with limits $325 a month | 5th cheapest of 366 $657 a month |
| Code interpreter bursts 100 at once · 1 vCPU / 2 GB · 200,000 sessions of 1 min a month Azure suits short code runs better than Hetzner, because it bills per minute while Hetzner bills every started hour in full. | 114th of 345, with limits $222 a month | 156th of 345, with limits $649 a month | 186th of 345, with limits $2,000 a month |
| Sandboxes for your users 300 at once · 2 vCPU / 4 GB · 30,000 sessions of 23 min a month Hetzner ranks 46th and Azure 63rd here, and on both you build the sandbox layer (URLs, auth, cleanup) yourself; boat ranks first and gives you that through its API. | 63rd of 361, with limits $500 a month | 46th of 361, with limits $314 a month | Cheapest of 361 $209 a month |
| RL rollouts 1,000 at once · 2 vCPU / 4 GB · 1,000,000 sessions of 3 min a month Azure Spot VMs make large RL fleets cheap if rollouts can survive eviction with 30 seconds of notice; Hetzner has no spot or per-minute billing. | 19th of 360, with limits $1,039 a month | 104th of 360, with limits $6,490 a month | 34th of 360, with limits $2,000 a month |
| Agent evals 250 at once · 4 vCPU / 8 GB · 15,000 sessions of 20 min a month Azure fits eval batches very well thanks to per-minute billing and a huge size range; Hetzner fits too, but each short run is billed a full hour. | 3rd cheapest of 364 $173 a month | 51st cheapest of 364 $1,010 a month | 10th cheapest of 364 $200 a month |
| CI runners 40 at once · 8 vCPU / 16 GB · 6,000 sessions of 12 min a month | 35th cheapest of 377 $335 a month | 83rd cheapest of 377 $788 a month | 4th cheapest of 377 $86 a month |
| 24/7 dev boxes 1 machine 24/7 · 4 vCPU / 8 GB Both fit a 24/7 dev box: a Hetzner server is a classic always-on machine with a monthly cap, and boat keeps the disk with snapshots every minute. | 72nd cheapest of 368 $94 a month | 32nd cheapest of 368 $42 a month | 18th cheapest of 368 $26 a month |
| Computer-use agents 50 at once · 4 vCPU / 8 GB · 20,000 sessions of 15 min a month Neither Azure nor Hetzner has a desktop stream or computer-use API; on boat a 60fps desktop and Chromium come with every machine. | 100th of 369, with limits $192 a month | 134th of 369, with limits $320 a month | 6th cheapest of 369 $200 a month |
| Browser-use agents 50 at once · 2 vCPU / 4 GB · 30,000 sessions of 10 min a month | 168th of 367, with limits $107 a month | 227th of 367, with limits $312 a month | 7th cheapest of 367 $200 a month |
| Scraping & bots (startup scale) 50 at once · 1 vCPU / 2 GB · 100,000 sessions of 3 min a month | 194th of 346, with limits $116 a month | 157th of 346, with limits $62 a month | 6th cheapest of 346 $90 a month |
| Mass scraping & bots (undetectable) 1,000 at once · 1 vCPU / 2 GB · 3,000,000 sessions of 2 min a month | 81st of 338, with limits $2,044 a month | 45th of 338, with limits $1,248 a month | 71st of 338, with limits $1,800 a month |
| Parallel red teaming 200 at once · 2 vCPU / 4 GB · 5,000 sessions of 30 min a month | 110th of 360, with limits $46 a month | 114th of 360, with limits $52 a month | 2nd cheapest of 360 $200 a month |
| GPU eval jobs 10 at once · 8 vCPU / 32 GB · 500 sessions of 30 min a month | Can't run it | Can't run it | Can't run it |
| macOS agents 5 at once · 4 vCPU / 8 GB · 1,000 sessions of 20 min a month | Can't run it | Can't run it | Can't run it |
Key features
| Feature | Azure Virtual Machines | Hetzner Cloud | boat |
|---|---|---|---|
| Isolation | Full Hyper-V VM with its own kernel | Full VM with its own kernel | Full VM with its own kernel |
| CPU speed (Node.js build-and-test, 4 vCPU / 8 GB) | Not measured in the public benchmark | 8.88 runs/s on a shared CX33; CPX and CCX not measured | 26.69 runs/s on dedicated AMD Ryzen 9 9950X (Zen 5) hosts |
| Docker and nested virtualization | Root and Docker on any size; nested virtualization on Intel and AMD D and F sizes, not on Arm or B-series | Root and Docker; nested virtualization is "not possible on cloud server" | Docker, root, systemd and /dev/kvm on every machine |
| Billing and stopping | Per full minute; a deallocated VM stops compute billing, but disks and static IPs keep billing | Every started hour, with a monthly cap; a powered-off server bills at the full rate until you delete it | Per second from a monthly plan; a stopped sandbox costs nothing and keeps its disk |
| Snapshots | Disk snapshots you take; scheduled ones need Azure Backup, a separate paid service | Snapshots you take, or daily backups in 7 slots for 20% of the server price | Automatic snapshots every minute and on stop |
| Pause with memory | Hibernation saves memory on supported sizes up to 64 GB of RAM | Disk snapshots only, no memory | Resume reboots from disk (no memory snapshots) |
| Fork and clone | Capture an image or disk snapshot, then boot new VMs cold; image capture needs the VM stopped | Take a snapshot, then create a new server from it (shutting down first is recommended) | Fork a running sandbox in one call |
| Reaching the machine | Public IPv4 and any port through security groups; HTTPS is yours to run, or add a gateway | Public IPv4 and IPv6 on any port; HTTPS needs your own certificates or a paid load balancer | HTTPS URLs for up to 50 ports, token-protected; raw TCP; own IP |
| Outbound rules | Security group rules by IP, and domain allowlists with the paid Azure Firewall | Free Cloud Firewalls with outbound rules by IP, port and protocol | Open internet on every plan; no provider-side allowlist |
| Desktop and computer use | None built in; you install a VNC or RDP server | None built in; a VNC console for admin, and you install a desktop yourself | 60fps desktop and Chromium, computer use and browser control, embeddable stream |
| Coding agents and keys | No agents built in; Key Vault fetches secrets into the VM, where code can read them | No agents built in; secrets go on the server through cloud-init, files or env vars | Claude Code, Codex, OpenCode and more with a prompt, steer and events API; AI credentials proxy keeps keys out of the machine |
| Machines, GPUs and operating systems | Linux and Windows on Intel, AMD and Arm; GPU families such as NC with Nvidia H100 and A100 | Linux on shared or dedicated vCPU, up to 48 vCPU / 192 GB (CCX63); no GPUs | Linux up to 16 vCPU / 32 GB on dedicated AMD Ryzen 9 9950X hosts; no GPUs |
| Regions | 77 regions worldwide, available or coming soon, including many in the EU | Germany and Finland, plus Ashburn, Hillsboro and Singapore | EU only: Germany, Finland, France |
Every feature Battleships tracks (43)
| Feature | Azure Virtual Machines | Hetzner Cloud | boat |
|---|---|---|---|
| Full VM (own kernel) | Yes | Yes | Yes |
| Docker inside | Yes | Yes | Yes |
| Nested virtualization | Yes | No | Yes |
| Root | Yes | Yes | Yes |
| Systemd | Yes | Yes | Yes |
| Desktop GUI | No | No | Yes |
| Browser | No | No | Yes |
| Computer-use API | No | No | Yes |
| SSH | Yes | Yes | Yes |
| Persistent disk | Yes | Yes | Yes |
| Pause/resume | Yes | Yes | Yes |
| Automatic snapshots | No | No | Yes |
| Fork/clone | Yes | Yes | Yes |
| Live fork (no pause) | No | Yes | Yes |
| Memory fork | No | No | No |
| Custom image (Docker or snapshot) | Yes | Yes | Yes |
| ≥24 h sessions | Yes | Yes | Yes |
| Idle auto-stop | No | No | No |
| Wake on request | No | No | No |
| HTTPS preview URLs | No | No | Yes |
| Raw TCP inbound | Yes | Yes | Yes |
| Public IPv4 | Yes | Yes | No |
| Egress allowlist | Yes | Yes | No |
| Secret proxy | No | No | Yes |
| Secret proxy for any API | No | No | Yes |
| Preinstalled agents | No | No | Yes |
| Agent harness API | No | No | Yes |
| MCP server | Yes | No | No |
| GPU | Yes | No | No |
| Windows | Yes | No | No |
| Arm64 | Yes | Yes | No |
| Self-hosting | No | No | No |
| BYOC | No | No | No |
| Open source | No | No | No |
| Scoped API keys | Not published | Not published | Yes |
| Spend limits | No | No | Yes |
| Usage per sandbox (API) | Yes | No | Yes |
| Audit logs | Yes | Not published | No |
| SSO | Yes | No | No |
| SOC 2 | Yes | No | No |
| HIPAA | Yes | No | No |
| EU data residency | Yes | Yes | Yes |
| Zero data retention | Not published | Not published | Yes |
Performance
There is no comparable measurement for Azure Virtual Machines: the public benchmark we use did not include it. Hetzner's only number comes from a shared CX33 that ran boat's temporary fallback capacity on 2026-08-24, at 8.88 Node.js build-and-test runs per second. boat did 26.69 runs per second at 4 vCPU / 8 GB on 2026-09-29, about three times the CX33.
Node.js build-and-test loop at 4 vCPU / 8 GB, higher is better. Measured with the open hpc-sandbox-benchmarks suite. Hetzner Cloud measured on: Shared vCPU, Cost-Optimized (CX, Intel/AMD), EU. Azure Virtual Machines has no published run in this suite yet, so there is no like-for-like number to compare.
Pricing in five scenarios
Each bill is priced from the providers' public price lists by the open Battleships engine, with the cheapest plan that runs the scenario.
| Scenario | Azure Virtual Machines, a month | Hetzner Cloud, a month | boat, a month |
|---|---|---|---|
| One coding agent, workdays 4 vCPU / 8 GB, 50 GB disk, 8 hours a day, 22 days a month, files kept between days | $26 · Pay-as-you-go subscription (no plan fee) | $3 · Pay-as-you-go (postpaid) · with limits | $20 · $20/mo |
| One agent that never stops 4 vCPU / 8 GB, 50 GB disk, running 24/7 all month | $48 · Pay-as-you-go subscription (no plan fee) · with limits | $10 · Pay-as-you-go (postpaid) · with limits | $26 · $20/mo |
| 50 agents in parallel 50 machines of 4 vCPU / 8 GB at once, 8-hour sessions, 1,100 sessions a month, Docker inside | $1,168 · Pay-as-you-go subscription (no plan fee) | $141 · Pay-as-you-go (postpaid) · with limits | $317 · $20/mo × 3 seats |
| Sandboxes for your users 2 vCPU / 4 GB, 30,000 sessions of 10 minutes a month, up to 300 at once | $225 · Pay-as-you-go subscription (no plan fee) | $312 · Pay-as-you-go (postpaid) · with limits | $200 · $100/mo × 2 seats |
| 1,000 short jobs at once 2 vCPU / 4 GB, 1,000 at once, 3 minutes each, 200,000 jobs a month | $483 · Pay-as-you-go subscription (no plan fee) · with limits | $2,080 · Pay-as-you-go (postpaid) · with limits | $2,000 · $2000/mo · with limits |
Azure Virtual Machines: Azure bills each VM per full minute while it runs, with no plan fee; disks, public IPv4 and egress are extra, and disks keep billing while the VM is deallocated. The always-on price here needs a 3-year reservation.
Hetzner Cloud: Hetzner bills every started hour with a monthly cap and keeps billing until you delete the server, even when it is off. The prices here use the cheapest CX servers, which are currently out of stock.
Hetzner Cloud: You pick a monthly plan from $20, and all of it becomes usage credit spent per second on running sandboxes. A stopped sandbox costs nothing and keeps its disk.
Limits in those scenarios
Every Hetzner scenario is priced on the CX line, which hetzner.com marks as currently unavailable, so none fit as priced today; Hetzner also does not publish its server limits and raises them by a request reviewed by hand. Azure limits vCPUs per region and per VM family, stopped VMs still count, and the always-on price only works with a 3-year commitment. For 1,000 short jobs at once, Azure's figure uses B-series burstable VMs that guarantee 30% of each vCPU, while Hetzner bills each 3-minute job as a full hour. On boat the same burst is queued by starts per minute and per day, even on the $2,000 plan.
| Scenario | Azure Virtual Machines | Hetzner Cloud | boat |
|---|---|---|---|
| One coding agent, workdays | None that bite |
| None that bite |
| One agent that never stops |
|
| None that bite |
| 50 agents in parallel | None that bite |
| None that bite |
| Sandboxes for your users | None that bite |
| None that bite |
| 1,000 short jobs at once |
|
|
|
Which one should you use?
Use Azure Virtual Machines when
you need GPUs, Windows, Arm, hibernation or a region outside Europe, or your company already runs inside Azure.
- GPUs, Windows and Arm. Useful if agents train or test models, or need Windows or Arm: Azure rents all of these as plain VMs.
- Regions almost everywhere. Useful if data must stay in a given country: Azure lists 77 regions worldwide, against six Hetzner Cloud locations.
- Per-minute billing, Spot and hibernation. Useful for short batches, big jobs that can survive eviction, or machines that must resume with their memory.
Use Hetzner Cloud when
you want plain long-lived Linux servers you run yourself, with a monthly price cap, big dedicated machines and free outbound firewall rules.
- Simple long-lived servers. Useful for machines that run all month: a monthly price cap and 20 TB of included EU traffic per server keep bills predictable.
- Free outbound firewall rules. Useful if an agent's machine must reach only a few addresses: Cloud Firewalls are free and drop all other outbound traffic.
- Big dedicated machines. Useful for heavy single machines: dedicated CCX servers go up to 48 vCPU and 192 GB of memory.
Where boat fits
Azure and Hetzner both rent general servers, and you build everything an agent needs on top. If what you are really running is agents, boat gives each one a full VM that already has /dev/kvm, a desktop, HTTPS URLs, snapshots every minute, forks and coding agents you drive from outside, in the EU.
/dev/kvm on every machine
Hetzner Cloud cannot run VMs inside a server at all. Azure can only on x86 D and F sizes, and the Arm Dplsv6 sizes priced here for one agent and for 50 agents have no nested virtualization.
Free stops, snapshots every minute
A powered-off Hetzner server bills in full until deleted, and a deallocated Azure VM still bills its disks and IPs. The workaround on both is scripting snapshot, delete and recreate, and a crash can lose work since the last manual snapshot.
Agents, a desktop and keys handled for you
Neither has a coding agent API, a desktop stream or a credentials proxy. You install and supervise each agent over SSH, and keys placed by Key Vault or cloud-init sit inside the VM where agent code can read them.
Use boat when the machines are for agents: a full VM with /dev/kvm, a desktop, HTTPS URLs, snapshots every minute, forks of running sandboxes and coding agents built in, with stops that cost nothing. Compare it one to one: boat vs Azure Virtual Machines and boat vs Hetzner Cloud.
Questions people ask
Is Azure cheaper than Hetzner Cloud?
Usually not on paper: one agent on workdays is $3 a month on Hetzner (if you delete the server each night) against $26 on Azure, and 50 agents in parallel are $141 against $1,168. Azure wins for 300 user sandboxes ($225 against $312) and 1,000 short jobs ($483 against $2,080), because Hetzner bills every started hour. All Hetzner prices use the CX line, which is currently out of stock; boat comes to $20, $317, $200 and $2,000 for the same four.
Which is faster, Azure or Hetzner?
Azure Virtual Machines has no comparable measurement in the public benchmark we use. A shared Hetzner CX33 did 8.88 Node.js build-and-test runs per second, and boat did 26.69 at the same 4 vCPU / 8 GB size.
Can Azure and Hetzner run Docker and nested virtualization?
Both run Docker, since each server is a full VM with root. Azure supports nested virtualization on Intel and AMD D and F sizes, not on Arm or B-series; Hetzner says it is not possible on cloud servers. boat documents Docker, systemd and /dev/kvm on every machine.
Do I pay for a stopped server?
On Hetzner, yes: a server bills at the full rate until you delete it. On Azure, a VM stopped from inside the OS keeps billing compute; a deallocated VM stops compute billing, but disks and static IPs still bill. A stopped boat sandbox costs nothing and keeps its files.
Do Azure or Hetzner have GPUs?
Azure has GPU families such as NC with Nvidia H100 and A100, and Windows and Arm sizes too. Hetzner Cloud has no GPU servers, and neither does boat.
Where does my data run?
Azure lists 77 regions worldwide, including many in the EU. Hetzner Cloud runs in Germany and Finland, and also in Ashburn, Hillsboro and Singapore, outside the EU. boat runs only in the EU (Germany, Finland and France), with EU data residency.
Try boat
Install the CLI, then run boat new.
7-day free trial
More comparisons
- boat vs Azure Virtual Machines
- boat vs Hetzner Cloud
- AWS EC2 vs Azure Virtual Machines
- Google Compute Engine vs Azure Virtual Machines
- Azure Virtual Machines vs Oracle Cloud
- Azure Virtual Machines vs DigitalOcean
- Azure Virtual Machines vs Vultr
- Azure Virtual Machines vs Linode
- Azure Virtual Machines vs Scaleway
- Azure Virtual Machines vs OVHcloud
- Azure Virtual Machines vs IONOS Cloud
- Azure Virtual Machines vs Contabo