Terminamos con una buena cantidad de instantáneas de AWS EC2 donde el AMI ha sido eliminado, pero la instantánea se ha dejado pudrir. Me gustaría una forma no manual de identificar y eliminar a estos huérfanos para ahorrarnos dinero y espacio.
Idealmente, estoy pensando en un script bash que aproveche la CLI , pero mi AWS-fu es débil. Supongo que alguien ha hecho esto antes, pero no puedo encontrar un script que realmente funcione.
En el mejor de los casos, esto también verificará los volúmenes y los limpiará, pero eso puede ser más adecuado para una segunda pregunta.
Respuestas:
En gran parte inspirado por las publicaciones del blog y la esencia ya vinculadas en las otras respuestas, aquí está mi opinión sobre el problema.
Utilicé algunas funciones complicadas de JMESpath para obtener una lista de instantáneas y no es necesario
tr
.Descargo de responsabilidad : use bajo su propio riesgo , hice todo lo posible para evitar cualquier problema y mantener los valores predeterminados, pero no me responsabilizaré si le causa problemas.
Espero que el script en sí sea lo suficientemente comentado.
El uso predeterminado (sin parámetros) enumerará los comandos de eliminación de instantáneas huérfanas para la cuenta corriente y la región eu-west-1, extraiga:
Puede redirigir este resultado a un archivo para su revisión antes de buscarlo para ejecutar todos los comandos.
Si desea que el script ejecute el comando en lugar de imprimirlo, reemplácelo
print(cmd)
porsystem(cmd)
.El uso es el siguiente con un script llamado
snap_cleaner
:para comandos de ejecución en seco en la región us-west-1
para comandos utilizables en eu-central-1
Se puede usar un tercer parámetro para acceder a otra cuenta (prefiero cambiar el rol a otra cuenta antes).
Versión simplificada de la secuencia de comandos con la secuencia de comandos awk como línea:
fuente
Utilicé el siguiente script en GitHub de Rodrigue Koffi (bonclay7) y funciona bastante bien.
https://github.com/bonclay7/aws-amicleaner
Mando:
Desde la publicación del blog de documentación , hace algunas cosas más:
fuente
Aquí hay un script que puede ayudarlo a encontrar instantáneas huérfanas
(desde aquí )
También puedes consultar este artículo desde serverfault
PD: Por supuesto, puedes cambiar la región para reflejar tu
PPS Aquí está el código actualizado:
Las explicaciones de muestra de lo que hace el código es:
enviar a STDOUT la lista de instantáneas. esta construcción:
cree un
comm
controlador de archivo temporal virtual para que el comando se lea desde dos "archivos" y compárelosfuente
Aquí hay un fragmento de código GitHub Gist de exactamente lo que está pidiendo Daniil Yaroslavtsev.
Utiliza la lista de todas las imágenes y sus instantáneas y compara las ID con la lista de todas las ID de instantáneas. Lo que queda son los huérfanos. El código funciona con el mismo principio que la respuesta anterior, pero está mejor formateado y es un poco más legible.
El código aprovecha la
--query Snapshots[*].SnapshotId
opción JMESPath con (también puede usar la utilidad de línea de comandos jp para eso, si ya está en su distribución. Formatea la salida como texto--output text
. Aquí hay un enlace a la referencia de la API y algunos ejemplos. Es un poco más elegante que una larga cadena de tuberías grep / awk / sort / uniq / tr.Advertencia de Todd Walton : no se confunda con la utilidad 'jq' que utiliza un lenguaje de consulta diferente para analizar documentos json.
fuente
He escrito el script snapshots.py que itera sobre todas las instantáneas (en la lista definida de regiones) y genera
report.csv
. Este archivo contiene información sobre la instancia, AMI y el volumen al que hacen referencia todas las instantáneas.También hay un comando para eliminar interactivamente las instantáneas colgantes.
fuente