58 votes

Comment supprimer EC2 AMI

Je sais que la commande ec2-create-image instance-id va créer une image de l'instance ec2, créer des fichiers de snapshots et la mettre enregistrée en tant qu'AMI. Mais quelle est la commande équivalente pour supprimer l'image qui va supprimer les fichiers de snapshot associés et désenregistrer l'AMI?

0 votes

81voto

Réponse mise à jour des docs d'aws :

  1. Ouvrez la console Amazon EC2 à https://console.aws.amazon.com/ec2/.
  2. Dans la barre de navigation, vérifiez votre région.
  3. Dans le panneau de navigation, cliquez sur AMIs.
  4. Sélectionnez l'AMI, cliquez sur Actions, puis sur Désenregistrer. Lorsqu'on vous demande confirmation, cliquez sur Continuer.
  5. Dans le volet de navigation, cliquez sur Instantanés.
  6. Sélectionnez l'instantané, cliquez sur Actions, puis sur Supprimer. Lorsqu'on vous demande confirmation, cliquez sur Oui, Supprimer.

J'espère que cela aidera quelqu'un comme moi! :D

4 votes

Pour ajouter quelques centimes à la réponse de Benjamin Smith Max sur la suppression des instantanés. Vous devez d'abord annuler l'inscription de l'AMI dans la console avant que l'instantané puisse être supprimé.

3 votes

Si votre enregistrement AMI est toujours en attente, il suffit de recharger en contournant le cache : sous Windows : Ctrl + Shft +R ou sur macOS : + + R.

0 votes

NOTE: Il se peut que quelques minutes s'écoulent avant que la console ne supprime l'AMI de la liste. Choisissez Actualiser pour rafraîchir le statut.

10voto

kristi Points 185

Le awscli peut également le faire.

Tout d'abord, obtenez l'identifiant de l'image en utilisant describe-images:

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

Ensuite, désinscrivez l'image et supprimez le snapshot :

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

0 votes

N'oubliez pas de décrire les images et d'obtenir les IDs des instantanés. Vous ne pouvez pas l'obtenir après avoir désenregistré l'image.

8voto

cyberx86 Points 20450

Il y a généralement 4 étapes pour ce que vous cherchez:

  1. Terminer les instances en utilisant l'AMI (pratique recommandée surtout pour les AMI sauvegardées dans S3) [Non requis avant de supprimer une AMI de n'importe quel type]
  2. Désenregistrer les AMIs en utilisant ec2-deregister
  3. Supprimer les bundles/snapshots soutenant l'AMI en utilisant ec2-delete-bundle (pour S3) ou ec2-delete-snapshot (pour EBS).
  4. Supprimer les volumes EBS (sauf s'ils sont configurés pour être supprimés lors de la terminaison, auquel cas, ils seraient supprimés à l'étape n°1). Ceci n'est pas nécessaire pour les instances sauvegardées dans S3. [Encore une fois, il n'est pas nécessaire de terminer les instances ou de supprimer les volumes si vous voulez simplement supprimer une AMI.]

Gardez à l'esprit que les snapshots et images sont indépendants. Vous pouvez créer un volume EBS à partir d'un snapshot et l'utiliser comme disque secondaire au lieu de disque de démarrage. De plus (dans le cas d'instances Linux) il est possible de créer une nouvelle image à partir d'un snapshot existant - ce qui explique pourquoi tout le monde ne souhaite pas supprimer une image veut également supprimer les snapshots associés. (Bien qu'il soit possible d'enregistrer un snapshot pour créer une AMI Windows, l'AMI n'est pas lancée.)

Il convient de noter que AWS ne vous permettra pas de supprimer un snapshot associé à une AMI avant de désenregistrer l'AMI.

En se concentrant sur les étapes 2 et 3 ci-dessus, vous devez d'abord trouver l'ID du snapshot(s) associé(s) à une AMI. Cela devrait être répertorié dans le cadre des mappings des périphériques de blocs. Généralement, le volume EBS racine a le point de montage /dev/sda1. Vous pouvez désenregistrer l'AMI en ligne de commande (ou utiliser la console AWS) puis supprimer le snapshot (encore une fois, soit en ligne de commande soit dans la console AWS).

Si vous deviez effectuer cette tâche plus souvent, vous voudriez scripter le processus. Certaines bibliothèques comme Python Boto incluent une fonction pour faire exactement cela:

deregister_image(image_id, delete_snapshot=False)
    Désenregistrer une AMI.

    Paramètres: 
        image_id (chaîne) – l'ID de l'image à désenregistrer
        delete_snapshot (booleen) – Définir sur True si nous devons supprimer le snapshot associé à un volume EBS monté sur /dev/sda1

Par exemple, un script type (complètement non testé, et simplement bricolé ensemble - à utiliser à vos propres risques!) basé sur ce qui précède pourrait ressembler à :

#!/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("Suppression de %s et des snapshots\n" %  str(args))
    ec2delete(args)

1 votes

Il n'est pas nécessaire de terminer les instances d'une AMI avant de supprimer l'AMI. L'AMI sert uniquement à démarrer les instances et elles peuvent continuer à fonctionner correctement sans elle. Cependant, si vous supprimez l'AMI et que les instances échouent, il peut être difficile de démarrer de nouvelles instances de remplacement sans l'AMI, alors soyez prudent.

1 votes

AWS utilisait auparavant recommandé de terminer les instances pour un 'nettoyage complet', cependant, en principe, cela ne devrait pas être nécessaire pour supprimer une AMI. Je me demande cependant si cela pourrait être important dans certains cas particuliers, car les volumes EBS se chargent 'paresseusement', si un instantané est supprimé peu de temps après le lancement d'une instance, mais avant que le volume EBS ne soit complètement chargé, cela pourrait poser problème.

0 votes

@cyberx86 : Si la suppression d'un instantané affectait la création d'un nouveau volume, ce serait un problème plus important que simplement la suppression des AMI. Étant donné le temps nécessaire pour peupler complètement un volume à partir d'un instantané, il devrait être facile de tester avec un instantané plein de données.

0voto

arun kumar Points 1
#!/bin/bash

#mettez vos AMI dans ami.txt

for i in `cat ami.txt`;
do

#mettez les régions dans regions.txt

for r in `cat regions.txt`;do echo $r >>/dev/null;
for e in `cat regions.txt`;do aws ec2 describe-images --image-ids $i --region $r | grep "ImageId\|SnapshotId" | awk -F':' '{print $2}' | tr -d '"',',' | grep "snap" > snapshot.txt;
for s in `cat snapshot.txt`;do aws ec2 deregister-image --image-id $i --region $r;
aws ec2 delete-snapshot --snapshot-id $s --region $r;echo $i $s >> amidel.txt;done;done;
done;
done

#vous pouvez vérifier les AMI/snapshots qui ont été désenregistrés/supprimés

0voto

Jay Reddy Points 101

Il y a quelques jours, j'ai reçu la même demande, j'ai donc écrit un petit script shell. Remarque : le fichier ami_list.txt doit contenir la liste des images

#!/bin/bash
while read -r ami_id
do
    if [[ -n "$ami_id" ]]; then
        echo "description de l'image : $ami_id"
        describe_image=$(aws ec2 describe-images --image-ids "$ami_id") 
        response=$(echo "$describe_image"| jq  .Images[].BlockDeviceMappings[].Ebs.SnapshotId | jq . -r)
        aws ec2 deregister-image --image-id "$ami_id"
        for snapshot in $response; do 
            echo "$snapshot"
            aws ec2 delete-snapshot --snapshot-id "$snapshot"
        done
        unset describe_image
    fi
done  < ami_list.txt 

fichier ami_list.txt d'exemple :

$cat ami_list.txt
ami-12345220520df4893
ami-123455b848e35cf5a

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X