Requirements:
- Access to a Linux machine where shell script will be created
- Access keys to an Amazon Web Services (AWS) Account where the EC2 Instance is hosted
Script name: ami-bash.sh
Input: Name of the instance
How to run: ami-backup.sh <instance_name>
What it does:
1. Asks for INSTANCE_NAME
2. Sets the LOG directory and LOGFILE to record execution
3. Runs the AWS CLI describe-instances to extract the INSTANCE_ID
4. Sets the name of the AMI IMAGE_NAME
5. Runs the AWS CLI create-image to create the AMI
6. Runs a loop to check if the image has been created and available
Finished result: An AMI backup of the instance
Script:
=================================================================================
# name: ami-backup.sh
# usage: ami-backup.sh <instance_name>
# ami-backup.sh my-db-instance
INSTANCE_NAME=$1
LOGDIR=/tmp/log
LOGFILE=${LOGDIR}/ami-backup-$INSTANCE_NAME-$(date +"%Y-%m-%d-%H-%M-%S").log
INSTANCE_ID=`aws ec2 -describe-instances --filters \
"Name=tag:Name,Values=$INSTANCE_NAME" \
| grep "InstanceId" \
| grep -Po ': "\K[^"]*'`
IMAGE_NAME=ami-backup-$INSTANCE_NAME-$(date +"%Y-%m-%d-%H-%M")
echo "$(date +"%Y-%m-%d-%H:%M:%S") ami-backup.sh started." >> $LOGFILE
echo "$IMAGE_NAME AMI will be created." >> $LOGFILE
IMAGE_ID=`aws ec2 create-image --instance-id $INSTANCE_ID \
--name "$IMAGE_NAME" \
--description "$INSTANCE_NAME AMI - $(date +"%Y-%m-%d-%H-%M")" \
| grep -Po ': "\K[^"]*'`
while [ true ]
do
echo "AMI creation in progress..." >> $LOGFILE
IMAGE_CREATION_STATUS=`aws ec2 describe-images --filters \
"Name=name,Values=$IMAGE_NAME" | grep "State" | grep -Po ': "\K[^"]*'`
echo "AMI $IMAGE_NAME created." >> $LOGFILE
break
fi
sleep 300
done
echo "$(date +"%Y-%m-%d-%H:%M:%S") ami-backup.sh completed." >> $LOGFILE
=================================================================================
=================================================================================