Il y a généralement 4 étapes à ce que vous recherchez:
Mettez fin aux instances à l'aide de l'AMI (recommandation recommandée, en particulier pour les AMI sauvegardées S3) [Non requis avant de supprimer un AMI de tout type]
- Annuler l'enregistrement des AMI en utilisant
ec2-deregister
- Supprimez les ensembles / instantanés sauvegardant l’AMI en utilisant
ec2-delete-bundle
(pour S3) ou ec2-delete-snapshot
(pour EBS).
Supprimez les volumes EBS (sauf s’ils sont configurés pour être supprimés à la fin, auquel cas ils seraient supprimés à l’étape 1). Ce n'est pas nécessaire pour les instances S3. [Encore une fois, il n'est pas nécessaire de mettre fin aux instances ou de supprimer des volumes si vous souhaitez simplement supprimer une image AMI.]
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 en tant que lecteur secondaire au lieu d’un lecteur de démarrage. En outre (dans le cas d'instances Linux), il est possible de créer une nouvelle image à partir d'un instantané existant - ce qui donne à penser que tous ceux qui souhaitent supprimer une image ne souhaitent 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 vous désenregistrer de l'AMI.
En vous concentrant sur les étapes 2 et 3 ci-dessus, vous devez d'abord rechercher le ou les ID d'instantané associés à une AMI. Cela devrait être répertorié comme faisant partie des mappages de périphériques de bloc. Généralement, 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, à partir de la ligne de commande ou de la console AWS).
Si vous avez besoin d'effectuer cette tâche plus souvent, vous voudrez scripter le processus. Certaines bibliothèques telles que Python Boto incluent une fonction permettant de 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 à ceci:
#!/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)