2026-04-22 · 8 min read · Field notes

Hetzner Object Storage vs. AWS S3 for EU backup stacks

Resistro Cloud runs its backup storage on Hetzner Object Storage in Nuremberg. Several customers have asked why not AWS S3 in Frankfurt — it's the obvious enterprise choice, the APIs are identical, the tooling is mature. Here's the honest side-by-side, with the one failure mode I hit early that changed how we lay out keys.

Cost at 1 TB / month

Storage cost is the headline everyone looks at, and it genuinely matters once you're past 500 GB. Numbers are net of VAT, as of April 2026:

Hetzner Object StorageAWS S3 (eu-central-1)
1 TB stored / month~6 € (first TB included with bucket)~21 €
Egress 100 GB / month0 € (inside Hetzner) / low external~8 €
PUT/COPY/POST per million~0.55 € (approx)~4.40 €
GET per million~0.055 €~0.35 €

For a typical mid-market backup workload — say 200 GB of encrypted dumps per week, fetched rarely — the pure storage bill on AWS is roughly 3–4× Hetzner. The request-priced APIs (PUT, LIST) push it further if your workload is chunky. A typical 200–500 GB backup stack moving from S3 eu-central-1 to Hetzner Object Storage saves on the order of 200–300 € / month at identical retention; the exact delta depends on how often you touch the data.

That said: AWS still wins at fractional-TB scale (below 50 GB) because of free tier, and is usually cheaper than people assume for hot tiers you actually hit.

Rate limits — the one that bit me

This is the gotcha that matters for anyone going multi-tenant:

Notice the difference: AWS rate-limits per prefix, and you can have as many prefixes as you want. Hetzner rate-limits per bucket, full stop. If you put every customer's backup under /tenant-abc/… and /tenant-xyz/…, you still share one 750/s budget across all tenants.

The failure that made us shard

Early on, Resistro Cloud stored objects as <tenant-uuid>/<backup-uuid>.backup. For two customers that's fine. For 50 customers with hourly backups, ~3 operations per backup (PUT + HEAD + COMPLETE), you are well inside the budget — on paper. In practice the load is bursty, not uniform, and 30 customers triggering at the top of the hour can spike past 750.

The fix took one afternoon: prefix the key with two hex chars derived from a SHA-256 of the tenant UUID.

shard = hex(sha256(tenant_id.bytes)[0])  // "37" / "c9" / "f2" / ...
key   = <shard>/<tenant-uuid>/<backup-uuid>.backup

256 possible shards, roughly uniform distribution. From Hetzner's point of view the bucket is 256 independent write surfaces, because their internal partitioning keys off the prefix. The 750/s per-bucket cap becomes effectively ~2.9/s per shard, which is way above what any single tenant produces.

Migration cost: zero for new backups (new code path), old objects stay where they are, the DB keeps the full path per backup record. No rekey needed.

Durability and guarantees

Both providers claim "eleven nines" of durability for stored objects. The disclaimer in both cases: that number covers the provider not losing your data, not your data still being correct. Bit rot is prevented; a PUT of garbage is not. That's your responsibility.

Practical difference:

Data residency and processing law

The answer DACH buyers actually care about:

For a regulated DACH customer, this one point can be decisive. A Bavarian Sparkasse's procurement team will not sign an AVV with AWS Europe as the data processor. They will sign with Hetzner.

Operational ergonomics

Where AWS still wins:

Where Hetzner is fine but requires more work:

The boring truth: if your team already has AWS muscle memory and you're not cost-sensitive, AWS is fine. If you're building for the EU and cost matters, Hetzner is the better default.

When to pick which

SituationRecommendation
Below 50 GB, already on AWSStay on S3. Not worth moving.
100 GB – 5 TB, EU-only customersHetzner. Cost and residency both win.
> 5 TB, or regulated mid-marketHetzner for primary + AWS Deep Archive for quarterly off-provider copy. Two-provider strategy is cheap insurance.
Need S3 Intelligent-Tiering or CRRAWS. Hetzner doesn't play here.
Multi-tenant SaaS, need to predict rate-limit budgetEither — but shard your prefixes day one.

Need help picking a backup target?

A backup audit looks at your current storage layer and either confirms it's fine or writes a 1-page cost + risk comparison against alternatives — so you don't end up migrating on a hunch.

Book an audit