Categories
General Guide In detail

Automatizando copias de seguridad de volumenes EBS con boto y Python


Recientemente hemos visto como AWS ha acogido boto como API de facto para interactuar con muchos de sus servicios (Amazon S3, Amazon EC2, Amazon DynamoDB y muchos más). Boto nos facilita las tareas que realizamos habitualmente a través de CLI, entre ellas la de llevar a cabo una copia de seguridad de nuestros volúmenes EBS. En este artículo vamos describir los pasos para automatizar de forma fácil y sencilla este proceso.
Para empezar tendremos instalar boto a través pip. Pip es una utilidad de phyton para instalar paquetes.

pip install boto

A continuación debemos introducir nuestras credenciales en el archivo de configuración de boto.

export AWS_ACCESS_KEY_ID="..."
export AWS_SECRET_ACCESS_KEY="..."

Debemos utilizar una IAM que tenga como mínimo los siguientes privilegios

"Action": [
        "ec2:CreateSnapshot",
        "ec2:CreateTags",
        "ec2:DeleteSnapshot",
        "ec2:DescribeAvailabilityZones",
        "ec2:DescribeSnapshots",
        "ec2:DescribeTags",
        "ec2:DescribeVolumeAttribute",
        "ec2:DescribeVolumeStatus",
        "ec2:DescribeVolumes"
      ],

Seguidamente añadimos una notificación automática a través de SNS de AWS y añadimos la dirección de correo de la IAM que vayamos a utilizar para esta labor.
Una vez tengamos acceso a nuestros servicios en AWS y disponemos de un ARN válido, llevaremos a cabo las copias de seguridad utilizando esta simple herramienta llamada aws-snapshot-tool. La configuración es muy fácil, solo tenemos que editar el archivo config.py.

config = {
    'ec2_region_name': 'us-east-1',
    'ec2_region_endpoint': 'ec2.us-east-1.amazonaws.com',
    'tag_name': 'tag:MakeSnapshot',
    'tag_value':    'True',
    'keep_day': 5,
    'keep_week': 5,
    'keep_month': 11,
    'log_file': '/tmp/makesnapshots.log',
}

Finalmente solo nos falta etiquetar cada volumen EBS del que queramos obtener un respaldo y establecer la retención de estos.

# chmod +x makesnapshots.py
# crontab -e
30 1 * * 1-5 /opt/aws-snapshot-tool/makesnapshots.py day
30 2 * * 6 /opt/aws-snapshot-tool/makesnapshots.py week
30 3 1 * * /opt/aws-snapshot-tool/makesnapshots.py month

Le podemos encontrar algunas pegas, por ejemplo si disponemos de recursos en distintas regiones de AWS o si queremos aplicar políticas de retención diferentes a nuestros volúmenes EBS. Aún así hemos visto como con boto y Python tenemos una interfaz robusta, muy cómoda de utilizar que nos permite mantener y administrar varios aspectos de nuestros entornos alojados en AWS.
Otra opción es delegar en terceros como autosnappy 😉
Ivan Farré
Cloudadmins.org

By ivanbird

System Administrator at GNUINE. Since 2007 he has worked in IT business with Network Technologies, Operational Intelligence Software, Virtualization Architectures, Cloud Environments... Rooted in his technical side, I always work in the direction of safety, pro-activity, improved quality of services with high problem solving skills. Also working on providing complete solution architecture to address the customers requirements and road map to implement these solutions.

3 replies on “Automatizando copias de seguridad de volumenes EBS con boto y Python”

Hola,
Muy interesante, normalmente empleamos mucho tiempo con scripts “made home” cuando existen herramientas muy robustas que nos facilitan el trabajo.
Gracias por compartirlo!

Leave a Reply

Your email address will not be published. Required fields are marked *