Manage AWS EC2 Snapshots
| November 23rd, 2017Create and delete snapshots
Create and delete snapshots according to retention plan.
- IAM account:
-  In the AWS Management Console, go to IAM service.  On the right side click on Users then Add User:
 - AWS IAM User
 
 
- Type In user name and select Programmatic access. Then Next:Permissions
- On the next page select “Attach existing policy directly” then click on Create Policy
-  Click on the JSON tab then copy/paste the code below(we will use one policy for creating and deleting snapshots):
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1426256275000", "Effect": "Allow", "Action": [ "ec2:CreateSnapshot", "ec2:CreateTags", "ec2:DeleteSnapshot", "ec2:DescribeSnapshots", "ec2:DescribeVolumes", "ec2:DescribeInstances" ], "Resource": [ "*" ] },{ "Sid": "Stmt1422916495000", "Effect": "Allow", "Action": [ "ec2:DeleteSnapshot", "ec2:DescribeSnapshots" ], "Resource": [ "*" ] } ] }
- Click on Review policy
- Give it a Name and Description, such as CMD-SNAPSHOTS-POLICY. Then Click on Create policy
-  Back to the Permissions Page. Click on the Refresh button and type in the filter the name of the policy you’ve just created.  Should see the new policy. Select it, then click on Next: Preview and on the next page Create User
 
 
- From the next page, make a copy of the Access key ID & Secret access key
- On the server, create a new file, and save it to $HOME/.awssecret, with the following format:
Access key id Secret access key 
 
-  In the AWS Management Console, go to IAM service.  On the right side click on Users then Add User:
- Using ec2-consistent-snapshot from https://github.com/alestic/ec2-consistent-snapshot to take snapshots.On a Centos 7 system, Enable epel:
wget dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm rpm -ivh epel-release-7-10.noarch.rpm Then install the required Modules: yum install \ perl-DBI \ perl-DBD-M ySQL \ perl-Getopt-Long \ perl-Pod-Usage \ perl-File-Slurp \ perl-IO-Socket-SSL \ perl-Net-Amazon-EC2 \ perl-Time-HiRes \ perl-Net-SSLeay \ perl-Params-Validate \ ca-certificates \ perl-DateTime If you are using cPanel, install the required Perl Modules by login to WHM, then Software -> Install Perl Modules. Then install the following: DBD::mysql 
 Getopt::Long
 Pod::Usage
 File::Basename
 File::Slurp
 IO::Dir
 IO::Socket::SSL
 LWP::UserAgent
 Time::HiRes
 Net::Amazon::EC2
 DateTime::Locale
 DateTime::TimeZoneNot 100% sure if this is all the needed module, you can see what’s missing when you run the script. Just make a note of the error and install the missing module. After that download the script from : https://github.com/alestic/ec2-consistent-snapshot Save it to a folder on your system, I choose /aws 
 Make it executable: chmod +x /aws/ec2-consistent-snapshot
- To delete old  snapshots, I’ve used: ec2-expire-snapshots from https://github.com/alestic/ec2-expire-snapshots
 Needed Perl Modulesyum install perl-Date-Manip \ perl-DateTime \ perl-DateTime-TimeZone \ perl-DateTime-Format-ISO8601 \ perl-File-Slurp \ perl-Time-HiRes \ perl-Params-Validate \ ca-certificates \ perl-DBD-MySQL \ perl-Net-Amazon-EC2 If there is a problem with the package perl-Net-Amazon-EC2. Then use cpan (https://goo.gl/fdEPvU): yum install -y expat-devel cpan App::cpanminus # a better package manager for CPAN /usr/local/bin/cpanm Net::Amazon::EC2 Cpanel (Bold = installed in previous step): Date::Manip 
 DateTime
 DateTime::TimeZone
 DateTime::Format::ISO8601
 File::Slurp
 Time::HiRes
 Params::Validate
 Net::Amazon::EC2
 Moose::Exception::ValidationFailedForInlineTypeConstraintAfter that download the script from: https://github.com/alestic/ec2-expire-snapshots 
 Save it to the same folder on your system:
 Make it executable: chmod +x /aws/ec2-expire-snapshots
- Create a script and cron job to run the previous scripts:
 create a file called: aws_snapshotsvolume='vol-ID' echo "AWS Snaphot backup started" echo "Date: `date`" echo "" /aws/ec2-consistent-snapshot --mysql --debug --region eu-west-1 $volume echo "AWS Snaphot backup Ended" echo "" echo "Removing old snapshots" /aws/ec2-expire-snapshots \ --region eu-west-1 \ --keep-most-recent 1 \ --keep-first-daily 7 \ --keep-first-weekly 4 \ --keep-first-monthly 6 \ $volume echo "done" (Better explore the options offered by ec2-consistent-snapshot & ec2-expire-snapshots, and change the script accordingly) Make the script runnable: chmod +x /aws/aws_snapshots add it to your cron job to run daily 

