resource-control/docs/evidence/RESOURCE-WP-0002-expanded-storage-comparison-2026-08-10.md
tegwick 2c2a6073ff feat(portfolio): complete RESOURCE-WP-0003 T06 optimization cases and T07 reporting
T06: optimization-case schema, fail-closed evaluator, cadence and decision
template. Every option including the baseline must present all ten decision
fields; one unknown blocks the comparison. Validated on the storage case
(Hetzner computes and loses to Scaleway by EUR 29.14/month on operator labour;
Host Europe blocks on four named gaps) and on the non-storage reef-railiance
k3s rightsizing case (low utilization is real, but nothing is costable while
the railiance01 price is unknown).

T07: portfolio report over coverage, lifecycle, utilization, cost, renewals,
risks, open cases, and next actions, derived only from committed evidence.
Portfolio spend is reported null rather than as a partial sum, unattributed
cost is a named list rather than a spread, and unmeasurable resources are
reported rather than dropped.

RESOURCE-WP-0003 is finished; both cases remain blocked_on_evidence against
live delegated records in other repositories. RESOURCE-WP-0002 is untouched.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 09:28:44 +02:00

106 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Expanded object-storage comparison — 2026-08-10
This adds self-managed S3-compatible storage and four large-cloud price points
to the managed-provider comparison. All recurring totals include operator labor
at €60/hour. Taxes are excluded. USD prices use the 2026-08-10 ECB reference
rate of 1 EUR = 1.1555 USD.
## Self-managed reference architecture
Garage is the reference open-source implementation. It has an S3-compatible
API and is designed for distributed deployments. Garage explicitly says its
single-node quick-start has no redundancy and must not be used in production.
CNPG/Barman compatibility remains a live preflight requirement.
The initial fixed-size estimates use locally attached storage:
- Host Europe: 8 vCPU, 16 GB RAM, 400 GB NVMe at €37.99/month including 19%
VAT, normalized to €31.92 net per node. Network traffic is flat-rate.
- Hetzner: CX53, 16 vCPU, 32 GB RAM, 320 GB local SSD at €29.49/month plus
€0.50 IPv4, net per node. The June 2026 price adjustment is used.
Replication consumes the extra nodes; it does not multiply usable capacity.
All nodes at one provider/location still share provider and site failure risk.
| Topology | Infrastructure/month | Internal labor/month | Running total at 320 GB | Internal setup | External setup | Usable ceiling | Assessment |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | --- |
| Host Europe, 1 node | €31.92 | 2 h / €120 | €151.92 | 8 h / €480 | not quoted | 400 GB | no redundancy; not production |
| Host Europe, 2 nodes | €63.85 | 3 h / €180 | €243.85 | 12 h / €720 | not quoted | 400 GB | replicated, but poor failure/quorum shape |
| Host Europe, 3 nodes | €95.77 | 4 h / €240 | €335.77 | 16 h / €960 | not quoted | 400 GB | production candidate; single provider/site risk |
| Hetzner, 1 node | €30.09 | 2 h / €120 | €150.09 | 8 h / €480 | not quoted | 320 GB | no redundancy; not production |
| Hetzner, 2 nodes | €60.18 | 3 h / €180 | €240.18 | 12 h / €720 | not quoted | 320 GB | replicated, but poor failure/quorum shape |
| Hetzner, 3 nodes | €90.27 | 4 h / €240 | €330.27 | 16 h / €960 | not quoted | 320 GB | production candidate; single location risk |
These sizes cover the base scenario's first month (180 GB), but not its month
12 estimate (458 GB). The calculator therefore returns `null` once the fixed
capacity is exceeded. A larger Host Europe 800 GB node tier or Hetzner Volumes
would be required; obtain account quotes before treating that expansion as a
decision price. Hetzner also documents that its Volumes are already replicated
across three physical servers, which means combining three Garage replicas with
three replicated Volumes would buy nested redundancy at additional cost.
## Managed object-storage price points
Azure Blob and Google Cloud Storage are Barman-supported object stores but are
not S3-compatible APIs. AWS and STACKIT are direct S3 API comparisons. The
following table fixes stored volume at **320 GB**, uses the base request pattern
(2,500 writes and 1,000 reads/month), and includes one 5 GB restore drill. This
puts elastic per-GB products, Hetzner's bundled minimum, and Garage's fixed
capacity on the same running-cost basis.
| Service | Infrastructure at 320 GB | Internal labor/month | Running total at 320 GB | Internal setup | External setup |
| --- | ---: | ---: | ---: | ---: | ---: |
| Scaleway Standard Multi-AZ | €5.14 | 1 h / €60 | **€65.14** | none | €0 assumed |
| Hetzner Object Storage | €6.49 | 1.5 h / €90 | **€96.49** | none | €0 assumed |
| AWS S3 Standard, Frankfurt | €6.80 | 1.5 h / €90 | **€96.80** | 4 h / €240 | €0 assumed |
| STACKIT Object Storage Premium-EU01 | €8.52 | 1.5 h / €90 | **€98.52** | 4 h / €240 | €0 assumed |
| Google Cloud Storage Standard, Frankfurt | €6.05 | 2 h / €120 | **€126.05** | 6 h / €360 | €0 assumed |
| Azure Blob Hot ZRS, Germany West Central | €6.72 | 2 h / €120 | **€126.72** | 6 h / €360 | €0 assumed |
Cloud request costs are negligible here; operator effort and egress assumptions
matter more. Azure/GCP egress figures are explicit planning estimates rather
than captured retail meters, so they must be refreshed in an account calculator
before decision approval.
"Internal setup" values the federation's own implementation time at €60/hour.
"External setup" means paid consulting, vendor professional services, or a
contractor. No such service is assumed for managed self-service onboarding. It
is **not quoted**, rather than zero, for Garage because an external security or
operations review may be prudent and no scope or rate has been obtained.
The apparent difference between the earlier €62.89 Scaleway total and the
normalized €5.14 infrastructure figure is reconciled in
`docs/forecast-actual-control.md`: €62.89 is 180 GB infrastructure (€2.89) plus
€60 labor, while €5.14 is infrastructure alone at 320 GB. The comparable 320 GB
total is €65.14.
## Interpretation
Self-management does not win at this workload once even two hours/month of
patching, monitoring, certificate handling, upgrades, disk replacement,
capacity management, and restore support are valued. Three-node Garage costs
roughly €330€336/month plus €960 setup labor and still shares a provider/site
failure domain. It may become attractive if the platform wants the capability
for broader workloads, can amortize operations across them, or deliberately
values open-source control above the cost difference.
For this backup alone, Scaleway remains the lowest modeled managed option.
STACKIT is especially interesting as a sovereign three-AZ S3-compatible
alternative: its documentation now states automatic replication across all
three availability zones, versioning, lifecycle rules, server-side encryption,
bucket policies, and Object Lock.
## Primary sources
- Host Europe VM pricing: https://www.hosteurope.de/Server/Virtual-Server/
- Hetzner June 2026 pricing: https://docs.hetzner.com/general/infrastructure-and-availability/price-adjustment/
- Hetzner Volume replication: https://docs.hetzner.com/cloud/volumes/overview/
- Garage single-node warning: https://garagehq.deuxfleurs.fr/documentation/
- AWS S3 price list: https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonS3/current/eu-central-1/index.json
- AWS egress/free allowance: https://aws.amazon.com/ec2/pricing/on-demand/
- Azure retail pricing API: https://learn.microsoft.com/en-us/rest/api/cost-management/retail-prices/azure-retail-prices
- Google Cloud Storage pricing: https://cloud.google.com/storage/pricing
- STACKIT storage pricing: https://www.stackit.de/de/preise__trashed/cloud-services/iaas/stackit-storage/
- STACKIT object-storage capabilities: https://docs.stackit.cloud/de/products/storage/object-storage/basics/introduction/
- STACKIT network pricing: https://www.stackit.de/de/preise__trashed/cloud-services/iaas/stackit-network/
- ECB daily FX rate: https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml