So löschen Sie EC2 AMI

43

Ich weiß, dass der Befehl ec2-create-image instance-idein Image der ec2-Instanz erstellt, eine Snapshot-Datei erstellt und sich als AMI registriert. Aber wie lautet der entsprechende Befehl zum Löschen des Image, wodurch die zugehörigen Snapshot-Dateien gelöscht und AMI abgemeldet werden?

James W.
quelle
Check out So löschen Sie private EC2 AMI aus AWS
Aniket Thakur

Antworten:

55

Aktualisierte Antwort aus den aws-Dokumenten:

  1. Öffnen Sie die Amazon EC2-Konsole unter https://console.aws.amazon.com/ec2/ .
  2. Überprüfen Sie in der Navigationsleiste Ihre Region.
  3. Klicken Sie im Navigationsbereich auf AMIs.
  4. Wählen Sie das AMI aus, klicken Sie auf Aktionen und dann auf Abmelden. Wenn Sie zur Bestätigung aufgefordert werden, klicken Sie auf Weiter.
  5. Klicken Sie im Navigationsbereich auf Snapshots.
  6. Wählen Sie den Schnappschuss aus, klicken Sie auf Aktionen und dann auf Löschen. Wenn Sie zur Bestätigung aufgefordert werden, klicken Sie auf Ja, Löschen.

Hoffe das hilft jemandem wie mir! : D

Benjamin Smith max
quelle
2
Nur um der Antwort von Benjamin Smith Max, Schnappschüsse zu löschen, ein paar Cent hinzuzufügen. Sie müssen zuerst die Registrierung des AMI in der Konsole aufheben, bevor der Snapshot gelöscht werden kann.
Tarvinder91
3
Wenn Ihr AMI-Datensatz immer noch hängt, laden Sie ihn einfach mit umgangenem Cache neu: Windows: Strg + Umsch + R oder auf macOS: ⌘ + ⌥ + R.
André Hauptfleisch
HINWEIS: Es kann einige Minuten dauern, bis die Konsole den AMI aus der Liste entfernt. Wählen Sie Aktualisieren, um den Status zu aktualisieren.
Aniket Thakur
7

In der Regel sind es 4 Schritte, nach denen Sie suchen:

  1. Instanzen mit dem AMI beenden (empfohlene Vorgehensweise speziell für S3-unterstützte AMIs) [Nicht erforderlich, bevor ein AMI eines beliebigen Typs gelöscht wird]
  2. Deregistrieren Sie AMIs mit ec2-deregister
  3. Löschen Sie die Bundles / Snapshots, die das AMI sichern, mit ec2-delete-bundle(für S3) oder ec2-delete-snapshot(für EBS).
  4. Löschen Sie EBS-Volumes (es sei denn, sie werden beim Beenden gelöscht. In diesem Fall werden sie in Schritt 1 entfernt). Dies ist für von S3 unterstützte Instanzen nicht erforderlich. [Auch hier ist es nicht erforderlich, Instanzen zu beenden oder Volumes zu löschen, wenn Sie nur eine AMI löschen möchten.]

Denken Sie daran, dass Schnappschüsse und Bilder unabhängig voneinander sind. Sie können ein EBS-Volume aus einem Snapshot erstellen und es als sekundäres Laufwerk anstatt als Startlaufwerk verwenden. Darüber hinaus ist es (bei Linux-Instanzen) möglich, ein neues Image aus einem vorhandenen Snapshot zu erstellen. Dies gibt Anlass zu der Annahme, dass nicht jeder, der ein Image löschen möchte, auch die zugehörigen Snapshots löschen möchte. (Obwohl Sie einen Snapshot registrieren können, um ein Windows-AMI zu erstellen, kann das AMI nicht gestartet werden.)

Beachten Sie, dass Sie in AWS einen mit einem AMI verknüpften Snapshot nicht löschen können, bevor Sie das AMI abmelden.

Wenn Sie sich auf die obigen Schritte 2 und 3 konzentrieren, müssen Sie zunächst die Schnappschuss-IDs ermitteln, die einem AMI zugeordnet sind. Dies sollte als Teil der Blockgerätezuordnungen aufgeführt werden. Normalerweise hat das Root-EBS-Volume den Mount-Punkt / dev / sda1. Sie können die AMI über die Befehlszeile abmelden (oder die AWS-Konsole verwenden) und anschließend den Snapshot löschen (erneut über die Befehlszeile oder die AWS-Konsole).

Wenn Sie diese Aufgabe häufiger ausführen müssen, möchten Sie den Prozess skripten. Einige Bibliotheken wie Python Boto enthalten eine Funktion, um genau dies zu tun:

deregister_image(image_id, delete_snapshot=False)
    Unregister an AMI.

    Parameters: 
        image_id (string) – the ID of the Image to unregister
        delete_snapshot (bool) – Set to True if we should delete the snapshot associated with an EBS volume mounted at /dev/sda1

Zum Beispiel könnte ein Beispielskript (völlig ungetestet und nur zusammengeschustert - Verwendung auf eigenes Risiko!) Auf der Grundlage des oben Gesagten folgendermaßen aussehen:

#!/usr/bin/env python

import os
import sys

def ec2delete(imageid=None):
    conn = boto.ec2.connect_to_region('your_region', aws_access_key_id='your_key', aws_secret_access_key='your_secret') 
    conn.deregister_image(imageid, delete_snapshot=True)

if __name__ == '__main__':
    from optparse import OptionParser
    parser = OptionParser()

    options, args = parser.parse_args()
    sys.stderr.write("Deleting %s and snapshots\n" %  str(args))
    ec2delete(args)
cyberx86
quelle
1
Es ist nicht erforderlich, Instanzen eines AMI vor dem Löschen des AMI zu beenden. Das AMI wird nur zum Starten der Instanzen verwendet, und sie können ohne es problemlos weiterarbeiten. Wenn Sie jedoch die AMI löschen und die Instanzen fehlschlagen, kann es schwierig sein, Ersatzinstanzen ohne die AMI zu starten. Seien Sie also vorsichtig.
Eric Hammond
1
AWS hat früher empfohlen, Instanzen für eine 'vollständige Bereinigung' zu beenden. Grundsätzlich sollte dies jedoch nicht zum Löschen eines AMI erforderlich sein. Ich frage mich jedoch, ob es in einigen Randfällen wichtig sein könnte, da EBS-Volumes "träge" geladen werden. Wenn ein Snapshot kurz nach dem Start einer Instanz gelöscht wird, aber bevor das EBS-Volume vollständig geladen ist, kann dies problematisch sein.
cyberx86
@ cyberx86: Wenn sich das Löschen eines Snapshots auf die Erstellung eines neuen Volumes auswirkt, ist dies ein größeres Problem als nur das Löschen von AMIs. Angesichts der Zeit, die zum vollständigen Auffüllen eines Volumes mit einem Snapshot benötigt wird, sollte es einfach sein, einen Snapshot mit Daten zu testen.
Eric Hammond
2
@EricHammond: Eine Schnellsuche zeigt, dass AWS den Snapshot anscheinend erst löscht, wenn die Daten geladen wurden. Sie können den Löschvorgang jedoch trotzdem durchführen (vermutlich einfach den Snapshot behalten, bis er nicht mehr benötigt wird).
cyberx86
@ cyberx86: Wie ich vermutet habe, aber sicher schön zu wissen. Danke, dass Sie nachgeschlagen haben.
Eric Hammond
1

Das kann auch die awscli .

Holen Sie sich zuerst die Shapshot-ID mit describe-images:

aws ec2 describe-images --image-ids ami-0123456789

Dann das Bild abmelden und den Schnappschuss löschen:

aws ec2 deregister-image --image-id ami-0123456789
aws ec2 delete-snapshot --snapshot-id snap-9876543210
kristi
quelle