Ich hätte nicht gedacht, dass ich über dieses Thema einen Blog-Post schreiben würde. Aber nachdem mich die simple Aufgabe „Glacier-Vaults löschen“ doch einiges an Zeit gekostet hat, will ich das Leid an dieser Stelle teilen.
Für Außenstehende, die trotzdem gern Beiträge lesen, eins vorab:
Was ist Amazon S3 Glacier?
Amazon Glacier bietet die Möglichkeit kostengünstig Daten zu archivieren. Ein Gigabyte Speicherplatz kostet hier aktuell 0,004 USD im Monat. Würde ich Amazon S3 nutzen, würde ich aktuell 0,023 pro Gigabyte zahlen. Der Nachteil ist, dass das Laden der dort abgelegten Daten teilweise bis zu 24 Stunden dauern kann. Dafür ist es billig. Perfekt also für große Backups, auf die man nur im Falle eines Zusammenbruchs eines Systems zurückgreifen möchte.
Ich persönlich habe Glacier zusammen mit meinem NAS verwendet. Da ich mir vor Jahren eine Synology mit nur einer Festplatte besorgt habe, wollte ich auf Nummer sicher gehen und habe die Daten auf Amazon-Glacier „eingefroren“. Irgendwann bin ich auf eine neue Version umgestiegen. Habe mich aber nicht mehr um die Eisblöcke im Amazon-Datenzentrum gesorgt.
Über 42.000 Archive, bzw 290 GB lagen so Jahre lang bei Amazon rum und haben mich etwa 6 € im Monat gekostet.
Dieser Umstand ging mir jetzt endgültig auf den Geist und ich wollte kurzerhand die Archive löschen. Dann fiel mir wieder ein, warum ich das nicht schon vor Jahren gemacht habe:
You cannot delete an archive using the Amazon S3 Glacier (S3 Glacier) management console. To delete an archive you must use the AWS Command Line Interface (CLI) or write code to make a delete request using either the REST API directly or the AWS SDK for Java and .NET wrapper libraries. The following topics explain how to use the AWS SDK for Java and .NET wrapper libraries, the REST API, and the AWS CLI.
AWS Dokumentation (Quelle)
Den Aufwand hab ich damals gescheut und die Kosten einfach ausgeblendet?.
Kann ja nicht so schwer sein! Die AWS CLI habe ich ja installiert. Kurz `nen Befehl reinhacken und gut!
DENKSTE:
Das Löschen bei AWS besteht aus drei Schritten.
- Inventory retrieval job-Starten
- Status Abfragen und warten (bei mir etwa 4 Stunden)
- Archive einzeln löschen (>42.000 Befehle über die CLI)
Alles klar! Das wird gescriptet! Wird ja was Fertiges geben.
Bin auch recht schnell fündig geworden: https://superuser.com/questions/687785/how-to-delete-all-glacier-data
Als erstes habe ich „glacier-vault-remove“ ausprobiert. Das Ding hat mir zwar brav alle Archive „gelöscht“ – was sau cool aussah, aber am Ende waren die Dinge noch in meiner Console zu sehen.
Der im Forum gepostete PHP-Script lieferte dann die richtigen Resultate, erforderte aber noch etwas Handarbeit, da er nur den letzten Schritt (Archive einzeln löschen) abnimmt.
Daher habe ich ihn noch etwas vereinfacht und teile ihn an dieser Stelle.
Voraussetzung für die Ausführung ist, dass die CLI mit einem Nutzer eingeloggt ist, der Vollzugriff auf AWS Glacier hat. (Anleitung hier)
Das Script findet ihr auf GitLab: https://gitlab.com/TobiSell/php-remove-glacier
Glacier reagiert sehr langsam, daher kann es sein, dass das Script den Vault nicht direkt löschen kann. Entweder Stunden später (wirklich Stunden!) einfach nochmal ausführen, oder das Vault nach ein paar Tagen dann in der Console löschen. Die Anzahl der Archive sollte dann 0 sein.
Cover Photo by Adam Jang on Unsplash