Wir haben am Ende eine ganze Reihe von AWS EC2-Snapshots, bei denen der AMI gelöscht wurde, der Snapshot jedoch verrottet. Ich möchte diese Waisenkinder auf nicht manuelle Weise identifizieren und löschen , um Geld und Platz zu sparen.
Idealerweise denke ich an ein Bash-Skript, das die CLI nutzt , aber mein AWS-fu ist schwach. Ich gehe davon aus, dass jemand dies bereits getan hat, aber ich kann kein Skript finden, das tatsächlich funktioniert.
Im besten Fall werden hierdurch auch Volumes überprüft und bereinigt. Dies ist jedoch möglicherweise besser für eine zweite Frage geeignet.
Antworten:
Weitgehend inspiriert von den Blog-Beiträgen und dem Inhalt der anderen Antworten, hier ist meine Sicht auf das Problem.
Ich habe einige verschachtelte JMESpath- Funktionen verwendet, um eine Liste von Schnappschüssen zu erhalten, die nicht erforderlich sind
tr
.Haftungsausschluss : Die Verwendung erfolgt auf eigenes Risiko . Ich habe mein Bestes getan, um Probleme zu vermeiden und vernünftige Standardeinstellungen beizubehalten. Ich übernehme jedoch keine Schuld, wenn es Ihnen Probleme bereitet.
Ich hoffe, das Skript selbst ist genug kommentiert.
Die Standardverwendung (ohne Parameter) listet Löschbefehle für verwaiste Snapshots für das aktuelle Konto und die Region eu-west-1 auf.
Sie können diese Ausgabe zur Überprüfung in eine Datei umleiten, bevor Sie alle Befehle ausführen.
Wenn Sie möchten, dass das Skript den Befehl ausführt, anstatt ihn zu drucken, ersetzen Sie ihn
print(cmd)
durchsystem(cmd)
.Die Verwendung ist wie folgt mit einem Skript namens
snap_cleaner
:für trockenlaufbefehle in der region us-west-1
für verwendbare Befehle in eu-central-1
Ein dritter Parameter kann verwendet werden, um auf ein anderes Konto zuzugreifen (ich bevorzuge es, die Rolle zu einem anderen Konto zu wechseln).
Reduzierte Version des Skripts mit awk-Skript als Oneliner:
quelle
Ich habe das folgende Skript auf GitHub von Rodrigue Koffi (bonclay7) verwendet und es funktioniert ziemlich gut.
https://github.com/bonclay7/aws-amicleaner
Befehl:
Aus der Dokumentation Blog - Post es hat einige weitere Dinge:
quelle
Hier ist ein Skript, mit dem Sie verwaiste Schnappschüsse finden können
(von hier )
Sie können diesen Artikel auch von serverfault aus überprüfen
PS Natürlich können Sie die Region ändern, um Ihre
PPS Hier ist der aktualisierte Code:
Die Beispielerklärungen, was der Code macht, sind:
Senden Sie die Liste der Schnappschüsse an STDOUT. diese Konstruktion:
Erstellen Sie einen virtuellen temporären Filehandler, damit der
comm
Befehl aus zwei "Dateien" gelesen und diese verglichen werdenquelle
Hier ist ein GitHub Gist-Code-Snippet von genau dem, was Sie von Daniil Yaroslavtsev verlangen.
Es verwendet die Liste aller Bilder und ihrer Schnappschüsse und vergleicht die IDs mit der Liste aller Schnappschuss-IDs. Was übrig bleibt, sind die Waisen. Der Code funktioniert nach dem gleichen Prinzip wie die obige Antwort, ist jedoch besser formatiert und etwas besser lesbar.
Der Code nutzt die
--query Snapshots[*].SnapshotId
Option JMESPath with (Sie können dafür auch das Befehlszeilendienstprogramm jp verwenden, sofern es bereits in Ihrer Distribution enthalten ist. Die Ausgabe wird als Text formatiert--output text
. Hier ein Link zur API-Referenz und einige Beispiele. Es ist geringfügig eleganter als eine lange Kette von grep / awk / sort / uniq / tr-Rohren.Warnung von Todd Walton : Verwechseln Sie nicht das Dienstprogramm 'jq', das zum Parsen von json-Dokumenten eine andere Abfragesprache verwendet.
quelle
Ich habe das Skript snapshots.py geschrieben, das alle Snapshots (in einer definierten Liste von Regionen) durchläuft und generiert
report.csv
. Diese Datei enthält Informationen zu Instanz, AMI und Volume, auf die von allen Snapshots verwiesen wird.Es gibt auch einen Befehl zum interaktiven Entfernen baumelnder Schnappschüsse.
quelle