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