En el post anterior he descrit els aspectes a considerar per dissenyar una estratègia de backup que s'adapti a les nostres necessitats

Una de les tasques a realitzar es automatitzar la realització de les copies de seguretat. En el cas que estiguem utilitzant un servidor de AWS Amazon, una de les opcions que podem utilitzar per fer backup es fer Snapshots de discos EBS a S3. Tot i que EC2 disposa de les eines per fer el snapshot, aquest no proporciona cap eina per automaitzar i programar aquests.

L'script següent llegeix tots els volums d'un servidor i en fa 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

Per automatitzar-ho, cal executar l'script des del cron tal i com es mostra a continuació.


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

Abans d'executar l'script, cal instal·lar la API de EC2 i descarregar les claus de la nostra compte i així poder interactuar amb AWS Amazon des de la API EC2.