Automatizando copias de seguridad de volumenes EBS con boto y Python

posted in: General, Guide, In detail | 3

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

VN:F [1.9.22_1171]
Rating: 4.5/5 (4 votes cast)
Automatizando copias de seguridad de volumenes EBS con boto y Python, 4.5 out of 5 based on 4 ratings

3 Responses

  1. Otra utilidad muy practica tambien con integración con Amazon S3 es el gem backup
    se puede instalar mediante el comando gem install backup y permite realizar todo tipo de backups. soporta bases de datos tanto sql como nosql diferentes tipos de storage i notificaciones por ejemplo de nagios

    http://meskyanichi.github.io/backup/v4/

    • Hola,

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

      Gracias por compartirlo!

  2. Una información muy interesante y útil. Es fundamental la realización de copias de seguridad de la información para garantizar la integridad de la misma en todo momento. Saludos.

Leave a Reply