Nous nous retrouvons avec une bonne quantité d'instantanés AWS EC2 où l'AMI a été supprimée, mais l'instantané est laissé pourrir. Je voudrais un moyen non manuel d' identifier et de supprimer ces orphelins pour nous faire économiser de l'argent et de l'espace.
Idéalement, je pense à un script bash exploitant la CLI , mais mon AWS-fu est faible. Je suppose que quelqu'un a déjà fait cela, mais je ne trouve pas de script qui fonctionne réellement.
Dans le meilleur des cas, cela vérifiera également les volumes et les nettoiera également, mais cela peut être mieux adapté à une deuxième question.
Réponses:
En grande partie inspiré par les articles de blog et l'essentiel déjà liés dans les autres réponses, voici mon point de vue sur le problème.
J'ai utilisé certaines fonctions JMESpath alambiquées pour obtenir une liste d'instantanés et pas besoin
tr
.Avis de non - responsabilité : utilisez à vos risques et périls , j'ai fait de mon mieux pour éviter tout problème et garder les valeurs par défaut saines, mais je ne prendrai aucun blâme s'il vous cause un problème.
J'espère que le script lui-même est suffisamment commenté.
L'utilisation par défaut (sans paramètres) répertorie les commandes de suppression des instantanés orphelins pour le compte actuel et la région eu-west-1, extrait:
Vous pouvez rediriger cette sortie vers un fichier pour révision avant de la sourcer pour exécuter toutes les commandes.
Si vous souhaitez que le script exécute la commande au lieu de les imprimer, remplacez
print(cmd)
parsystem(cmd)
.L'utilisation est la suivante avec un script nommé
snap_cleaner
:pour les commandes à sec dans la région us-west-1
pour les commandes utilisables dans eu-central-1
Un troisième paramètre peut être utilisé pour accéder à un autre compte (je préfère changer de rôle vers un autre compte auparavant).
Version dépouillée du script avec un script awk comme oneliner:
la source
J'ai utilisé le script suivant sur GitHub de Rodrigue Koffi (bonclay7) et cela fonctionne plutôt bien.
https://github.com/bonclay7/aws-amicleaner
Commander:
À partir du blog de documentation, il fait plus de choses:
la source
Voici un script qui peut vous aider à trouver des instantanés orphelins
(d' ici )
Vous pouvez également consulter cet article à partir de serverfault
PS Bien sûr, vous pouvez changer la région pour refléter votre
PPS Voici le code mis à jour:
Les exemples d'exaplanations du code sont les suivants:
envoyer à STDOUT la liste des instantanés. cette construction:
créer un gestionnaire de fichiers temporaire virtuel pour faire
comm
lire la commande à partir de deux "fichiers" et les comparerla source
Voici un extrait de code GitHub Gist d'exactement ce que vous demandez par Daniil Yaroslavtsev.
Il utilise la liste de toutes les images et leurs instantanés et compare les ID à la liste de tous les ID d'instantanés. Ce qui reste, ce sont les orphelins. Le code fonctionne selon le même principe que la réponse ci-dessus, mais il est mieux formaté et légèrement plus lisible.
Le code tire parti de l'
--query Snapshots[*].SnapshotId
option JMESPath with (vous pouvez également utiliser l'utilitaire de ligne de commande jp pour cela, s'il est déjà dans votre distribution. Il formate la sortie sous forme de texte avec--output text
. Voici un lien vers la référence de l'API et quelques exemples. Il est légèrement plus élégant qu'une longue chaîne de tuyaux grep / awk / sort / uniq / tr.Avertissement de Todd Walton : ne vous trompez pas avec l'utilitaire 'jq' qui utilise un langage de requête différent pour analyser les documents json.
la source
J'ai écrit un script snapshots.py qui itère sur tous les snapshots (dans une liste définie de régions) et génère
report.csv
. Ce fichier contient des informations sur l'instance, l'AMI et le volume référencés par tous les instantanés.Il existe également une commande pour supprimer interactivement les instantanés pendantes.
la source