Dmytro Oliinyk

Dmytro Oliinyk · 7. September 2026 · 5 Min. Lesezeit

Auf Mastodon teilen

Anleitung · AWS

2 TB aus S3 Glacier Deep Archive für 15 Dollar im Monat

2 TB Backups zu lagern hat mich $20 im Jahr gekostet. Sie zurückzuholen hätte so viel gekostet wie eine neue Festplatte. Hat es nicht.

Ich war schon immer ein Backup-Aktivist, oder ein data hoarder, wie man das heute nennen würde. Ich habe Ordner, die bis 2005 zurückgehen. Ich lösche einfach nicht gern etwas, und das hat mich schon mehr als einmal gerettet. Ich weiss, was 3-2-1-Backup ist, und habe es immer bei jedem vertreten, der zugehört hat. Eine Kopie lokal, eine auf einem zweiten Medium, eine in der Cloud.

Aber ein Teil von diesem 3-2-1 ist die Cloud. Als ich angefangen habe, richtig zu sichern, war ich schnell über 2 TB. Und 2 TB einfach als toten Ballast zu halten, dafür $100 bis $150 im Jahr zu zahlen, für Daten, die man nur im Katastrophenfall braucht, kam mir dumm vor.

Der Handel, den ich eingegangen bin#

Also habe ich mich durch die Hälfte des Internets und jeden Ratschlag gelesen, den es gibt, und bin bei S3 Glacier Deep Archive gelandet. Damit kam ich auf etwa $20 im Jahr, schon deutlich billiger. Das einzige Problem war, dass ich für die Daten zurückholen mindestens zwei Tage Retrieval brauchen würde, dazu etwa $200 bis $250 Egress-Kosten. Für 2 TB ist das ungefähr der Preis einer neuen Festplatte.

Aber ich habe mich damit abgefunden und gedacht, es ist es wert.

Die Daten zurückholen#

Vor kurzem habe ich endlich Platten für mein NAS gefunden und wollte die Daten aus S3 zu mir holen, denn sonst bleiben sie für immer nur dort. Und da zeigt sich das Problem. Sie rauszuholen würde so viel kosten wie eine Festplatte. Was also tun?

Zum Glück habe ich die Antwort gefunden, CloudFronts Flat-Rate-Plan, $15 für bis zu 50 TB ohne Extra-Rechnung. Das war die Rettung. Es stellte sich raus, dass es wirklich einfach war, fast ohne Zusatzaufwand.

CloudFront als Egress-Pfad#

Seit November 2025 gibt es für CloudFront Flat-Rate-Pläne. Free, Pro für $15 im Monat mit 50 TB Traffic und 10 Millionen Requests, dazu Business und Premium. Kein Überschreiten der Grenze wird nachberechnet, laut Doku höchstens die Zustellung gedrosselt, wenn man monatelang massiv drüber liegt. Kein Jahresvertrag.

AWS-Konsole, Auswahl des CloudFront-Flat-Rate-Plans, Pro-Plan für 15 Dollar im Monat mit 50 TB Egress markiert

Der zweite Teil ist älter und weniger bekannt. Datenübertragung von S3 zu CloudFront kostet nichts, im Unterschied zur direkten Auslieferung aus S3 ins Internet, die mit rund $0.09 pro GB zu Buche schlägt. Kombiniert man beides, hängt man CloudFront vor den Bucket, zahlt $15 im Monat, und der gesamte Egress bis 50 TB ist darin bereits drin. Für 2 TB ist das nicht mal in der Nähe vom Limit.

Restore aus Deep Archive#

CloudFront nimmt einem eines nicht ab. Deep Archive ist kalter Speicher, die Objekte sind schlicht nicht lesbar, bis man sie zurückholt, egal über welchen Weg man sie am Ende ausliefert. Restore ist Pflicht, Bulk-Tier bis zu 48 Stunden, Standard-Tier bis zu 12 Stunden, teurer dafür. Bei mir waren es 194 Objekte, gute 2 TB. Bulk-Retrieval kostet $0.0025 pro GB, für meine rund 2 TB macht das $5.12. Standard wäre mit $0.02 pro GB und $40.96 achtmal teurer gewesen, nur um zwölf statt achtundvierzig Stunden zu sparen. Oben drauf kommen die $15, das ist aber nichts im Vergleich zu dem, was der direkte Egress gekostet hätte.

Den Bulk-Restore für alle 194 Objekte habe ich mit einer Liste aus list-objects-v2 und einer Schleife über restore-object angestossen.

aws s3api list-objects-v2 \
  --bucket dein-bucket \
  --query 'Contents[].Key' \
  --output text | tr '\t' '\n' > keys.txt

while read -r key; do
  aws s3api restore-object \
    --bucket dein-bucket \
    --key "$key" \
    --restore-request '{"Days":7,"GlacierJobParameters":{"Tier":"Bulk"}}'
done < keys.txt

Days legt fest, wie lange die zurückgeholte Kopie verfügbar bleibt, bevor sie wieder einfriert, sieben Tage waren mir genug Puffer.

OAC und WAF waren schon da#

Ich hatte mit IAM- und Bucket-Policy-Arbeit von Hand gerechnet. Nichts davon musste ich anfassen. Origin Access Control und die AWS WAF-Regeln waren schon da.

CloudFront-Distribution im Pro-Plan, Übersicht der enthaltenen Leistungen inklusive AWS WAF und Nutzungskontingent bei 0 Prozent

Cyberduck kann das nicht#

Ich dachte, ich könnte den Bucket über die CloudFront-Domain wie gewohnt mit Cyberduck durchblättern. Ging nicht, CloudFront kennt kein Listing, es liefert nur genau den Pfad aus, den man anfragt, keine Ordnerstruktur. War kein wirkliches Problem, die Liste der Keys hatte ich ja schon aus dem Restore-Schritt. Ein kleines Skript baut daraus pro Zeile eine URL und holt sie mit curl parallel ab, inklusive Ordnerstruktur.

domain="dXXXXXXXXXXXXX.cloudfront.net"

cat keys.txt | xargs -P 8 -I{} bash -c '
  key="{}"
  mkdir -p "$(dirname "$key")"
  encoded=$(python3 -c "import urllib.parse,sys; print(urllib.parse.quote(sys.argv[1]))" "$key")
  curl -fsSL -C - -o "$key" "https://'"$domain"'/$encoded"
'

-C - lässt curl einen abgebrochenen Download genau dort fortsetzen, wo er aufgehört hat, bei 2 TB über eine Nacht kein Luxus. Und urllib.parse.quote sorgt dafür, dass Leerzeichen und Sonderzeichen im Pfad die URL nicht zerschiessen.

Dreissig Stunden warten#

Angesetzt war Bulk-Tier mit bis zu 48 Stunden, bei mir waren es am Ende etwa dreissig. Dazwischen gab es nichts zu tun ausser ab und zu ein kleines Skript gegen die Liste laufen zu lassen und zu schauen, wie viele schon fertig sind.

#!/usr/bin/env bash
total=$(wc -l < keys.txt)
fertig=0
while read -r key; do
  status=$(aws s3api head-object --bucket dein-bucket --key "$key" --query Restore --output text)
  [[ "$status" == *'ongoing-request="false"'* ]] && fertig=$((fertig + 1))
done < keys.txt
echo "Done: $fertig / $total"

Am Ende stand da Done: 194 / 194.

CloudShell-Terminal mit der Ausgabe des Restore-Check-Skripts, Done 194 von 194

Was es gekostet hat#

PostenKosten
CloudFront Pro, ein Monat$15
Bulk-Retrieval, 2048 GB$5.12
Standard-Retrieval, zum Vergleich$40.96
Direkter S3-Egress, zum Vergleichca. $170 bis $180

Die genaue Abrechnung von AWS steht noch aus, aber die Grössenordnung stimmt. Um die $20 für den ganzen Rückholvorgang, nicht der Preis einer Festplatte. Wer die Distribution nur für diesen einen Rückholvorgang braucht, sollte danach auf pay-as-you-go zurückstellen, der Wechsel greift erst zur nächsten Abrechnungsperiode, also nicht zu lange warten damit.

Ein Punkt noch, unabhängig vom Geld. Ohne zusätzliche Konfiguration liefert CloudFront diese Objekte an jeden aus, der die genaue URL kennt. Für einen einmaligen, kurzen Rückholvorgang reicht mir das, eine WAF-Regel mit IP-Allowlist habe ich mir gespart, weil ich die Distribution nur für diesen einen Abruf brauchte.

Mastodon