Je sais que la commande ec2-create-image instance-id
créera une image de l'instance ec2, créera un fichier d'instantanés et s'enregistrera en tant qu'AMI. Mais quelle est la commande équivalente pour supprimer l'image qui supprimera les fichiers instantanés associés et désenregistrera l'AMI?
Réponse mise à jour à partir des documents aws:
J'espère que cela aidera quelqu'un comme moi! :RÉ
Il y a généralement 4 étapes pour ce que vous recherchez:
ec2-deregister
ec2-delete-bundle
(pour S3) ou ec2-delete-snapshot
(pour EBS).Gardez à l'esprit que les instantanés et les images sont indépendants. Vous pouvez créer un volume EBS à partir d'un instantané et l'utiliser comme lecteur secondaire plutôt que comme lecteur de démarrage. De plus (dans le cas des instances Linux), il est possible de créer une nouvelle image à partir d'un instantané existant - ce qui donne raison à l'idée que tous ceux qui souhaitent supprimer une image ne veulent pas également supprimer le ou les instantanés associés. (Bien que vous puissiez enregistrer un instantané pour créer une AMI Windows, l'AMI n'est pas lancable.)
Il convient de noter qu'AWS ne vous laissera pas supprimer un instantané associé à une AMI avant de désenregistrer l'AMI.
En vous concentrant sur les étapes 2 et 3 ci-dessus, vous devez d'abord trouver les ID de capture instantanée associés à une AMI. Cela doit être répertorié dans le cadre des mappages de périphérique de bloc. En règle générale, le volume EBS racine a le point de montage/dev/sda1. Vous pouvez annuler l'enregistrement de l'AMI à partir de la ligne de commande (ou utiliser la console AWS), puis supprimer l'instantané (à nouveau, soit à partir de la ligne de commande ou de la console AWS).
Si vous aviez besoin d'exécuter cette tâche plus souvent, vous voudriez créer un script pour le processus. Certaines bibliothèques telles que Python Boto incluent une fonction pour faire exactement cela:
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
Par exemple, un exemple de script (complètement non testé et simplement bricolé - à vos risques et périls!) 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("Deleting %s and snapshots\n" % str(args))
ec2delete(args)
Le aws cli peut également le faire.
Obtenez d'abord l'ID de l'instantané en utilisant describe-images
:
aws ec2 describe-images --image-ids AMI-0123456789
Désenregistrez ensuite l'image et supprimez l'instantané:
aws ec2 deregister-image --image-id AMI-0123456789
aws ec2 delete-snapshot --snapshot-id snap-9876543210
#!/bin/bash
#put your AMI's in AMI.txt
for i in `cat AMI.txt`;
do
#put the regions in 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
#you can check the AMI/snapshots which has been de-registered/deleted