Skip to content

Instantly share code, notes, and snippets.

@njadhav1
Created March 5, 2014 18:38
Show Gist options
  • Save njadhav1/9373690 to your computer and use it in GitHub Desktop.
Save njadhav1/9373690 to your computer and use it in GitHub Desktop.
Delete a snapshot of AWS EBS volume
#!/bin/bash
########
# Purpose :- To delete Automatic snapshot of AWS EBS volume
# Requirement :- Make Sure snapshot.config file is present in /data/backup/
# format for Collection.config is VOLMEID000
# For example
# vol-a994fff3
# vol-a994fTT4
# Provide your Access and Secret Key also check your Region
# Bug Report to :- jadhav.nitin941@gmail.com
########
export JAVA_HOME=/usr/java/jdk1.7.0_04/
export EC2_HOME=/usr/bin/ec2/
export AWS_ACCESS_KEY=*************************
export AWS_SECRET_KEY=******************************
export EC2_URL=https://ec2.us-east-1.amazonaws.com
export PATH=/usr/bin/ec2/bin/:$EC2_HOME:$JAVA_HOME:$PATH
DATE=$(date +%F)
CONFIG_FILE="/data/backup/snapshot.config"
DAYS_COUNT=2
BACKUP_DIR="/data/backup"
SNAPSHOT_DEL_DATE=$(date --date " ${DATE} ${DAYS_COUNT} days ago " +%F)
PROGNAME=$(basename $0)
BOX=$(uname -n)
LOGDIR="${BACKUP_DIR}/log/"
LOGFILE="DELETE_SNAPSHOT_${DATE}.log"
LOCKFILE="/tmp/${PROGNAME}.lock"
DELETE_DATE=$(date --date "${DAYS_COUNT} days ago" +%F)
MAILTO="jadhav.nitin941@gmail.com"
# Define custom variables
LOCK_FILE ()
{
if [ "$1" = "create" ]; then
if [ -f $LOCKFILE ]; then
SEND_EXIT_MAIL "ERROR ::" "Unable to create lock may lock file not removed"
else
touch $LOCKFILE
fi
fi
if [ "$1" = "remove" ]; then
rm -fr $LOCKFILE
exit 0
fi
}
DEFINE_VARIABLE ()
{
VOLUME=$(echo $SNAPSHOT | cut -d"|" -f1)
SNAPSHOT_CREATION_DATE=$(date +%Y_%m_%d_%H)
}
# validation of custom variables
CHECK_VARIABLE ()
{
if [ -z "${VOLUME}" ];then
SEND_EXIT_MAIL "ERROR ::" "check your configration in snapshot.config Vaiables is blank"
exit
fi
if [ -z "${DISCRIPTION}" ];then
DISCRIPTION=$(echo "snap-${VOLUME}")
fi
}
SEND_EXIT_MAIL ()
{
mail -s "${BOX} :: ${PROGNAME} : $1 $2" -t $MAILTO < $LOGDIR/$LOGFILE
LOCK_FILE "remove"
exit 1
}
SEND_MAIL ()
{
mail -s "${BOX} :: ${PROGNAME} : $1 $2" -t $MAILTO < $LOGDIR/$LOGFILE
}
LOCK_FILE "create"
touch $LOGDIR/$LOGFILE
echo "Script started at :- $(date)" 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
for dir in "${BACKUP_DIR}" "${LOGDIR}"
do
if [ ! -d "${dir}" ]; then
mkdir -p ${dir} 1>/dev/null 2>/dev/null
if [ $? -ne 0 ]; then
SEND_EXIT_MAIL "ERROR::" "Unable to Create ${dir} Directory :"
fi
fi
done
if [ ! -f "${CONFIG_FILE}" ]; then
SEND_EXIT_MAIL "ERROR::" " SNAPSHOT Config file is not Present :"
else
if [ ! -s "${CONFIG_FILE}" ]; then
SEND_EXIT_MAIL "ERROR ::" " SNAPSHOT Config file is ZERO byte"
fi
## Snapshot Retention Logic starts
echo "|" "SNAPSHOT-NAME" "|""DELELTE-DATE""|""STATUS" "|" 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
echo "======================================" 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
for VOL_SNAP_DELTE in $(cat ${CONFIG_FILE})
do
SNAPSHOT_DEL_LIST=$(ec2-describe-snapshots | grep snap-${VOL_SNAP_DELTE}_${DELETE_DATE} | awk '/^SNAPSHOT/ {print $2}')
for DELETE_SNAP in ${SNAPSHOT_DEL_LIST}
do
ec2-describe-snapshots $DELETE_SNAP 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
done
done
echo "Script ended at :- $(date)" 1>> $LOGDIR/$LOGFILE 2>> $LOGDIR/$LOGFILE
SEND_MAIL "" "Snapshot script details "
LOCK_FILE "remove"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment