En el post anterior se han descrito los aspectos a considerar para diseñar una estrategia de backup que se adapte a nuestras necesidades

Una de las tareas a realizar es automatizar la realización de las copias de seguridad. En el caso que estemos utilizando un servidor de AWS Amazon, una de las opciones que podemos utilizar para hacer backup es hacer Snapshots de discos EBS a S3. Aunque EC2 dispone de las herramientas para hacer el snapshot, éste no proporciona ninguna herramienta para automaitzar y programar estos.

El script siguiente lee todos los volúmenes de un servidor y hace un snapshot.


#!/bin/bash

if [ ! $# == 2 ]; then
/bin/echo "USAGE: EBS-snapshot.sh "
exit
fi

# Quantity of snapshot on S3
QUANTITY=1

export JAVA_HOME=/usr/java/jre1.6.0_27
export EC2_HOME='/usr/local/ec2' # Make sure you use the API tools, not the AMI tools
export EC2_BIN=$EC2_HOME/bin
export PATH=$PATH:$EC2_BIN
export PATH=$PATH:$EC2_BIN
export EC2_URL=https://ec2.eu-west-1.amazonaws.com

# I know all of the above is good to have solution, but not re-usable
# I have captured all of the above in a particular file and lemme execute it
source /etc/environment

EC2_BIN=$EC2_HOME/bin

# store the certificates and private key to your amazon account
MY_KEY='/usr/local/ec2/pk-4BDXGQGWBNNTKC7LSTDN7J77YYK257GZ.pem'
MY_CERT='/usr/local/ec2/cert-4BDXGQGWBNNTKC7LSTDN7J77YYK257GZ.pem'
# fetching the instance-id from the metadata repository
MY_INSTANCE_ID=$1
INSTANCE_NAME=$2

# temporary file
TMP_FILE='/tmp/rock-ebs-info.txt'
# get list of locally attached volumes via EC2 API:
$EC2_BIN/ec2-describe-volumes -C $MY_CERT -K $MY_KEY > $TMP_FILE
VOLUME_LIST=$(/bin/cat $TMP_FILE | /bin/grep ${MY_INSTANCE_ID} | /bin/awk '{ print $2 }')

sync

#create the snapshots
/bin/logger -t EBS-SNAP-$MY_INSTANCE_ID "Create EBS Volume Snapshot $MY_INSTANCE_ID $INSTANCE_NAME - Process started."
/bin/logger -t EBS-SNAP-$MY_INSTANCE_ID $VOLUME_LIST

for volume in $(echo $VOLUME_LIST); do
DESC="Backup $INSTANCE_NAME ($MY_INSTANCE_ID) $volume"
/bin/logger -t EBS-SNAP-$MY_INSTANCE_ID "Creating Snapshot for the volume: $volume with description: $DESC"
/bin/logger -t EBS-SNAP-$MY_INSTANCE_ID "Snapshot info below:"
$EC2_BIN/ec2-create-snapshot -C $MY_CERT -K $MY_KEY -d "$DESC" $volume
done

/bin/logger -t EBS-SNAP-$MY_INSTANCE_ID "Process ended at $(date +%m-%d-%Y-%T)"

rm -f $TMP_FILE

Para automatizarlo, hay que ejecutar el script desde el cron tal y como se muestra a continuación.


0 4 * * * /usr/local/backup/bin/EBS-snapshot.sh i-006d6969 servidor

Antes de ejecutar el script, hay que instalar la API de EC2 y descargar las claves de nuestra cuenta y así poder interactuar con AWS Amazon desde la API EC2.