It is always a good idea to reduce hardware dependencies by moving your data to the cloud. Cloud is much more flexible than traditional hardware infrastructure including VMWare. But you still have to consider the ability of recovering data as and when required. This always helps you to keep your business running with minimal interruption. In AWS, there are several possibilities for implementing an effective backup strategy. EBS snapshots are so simple & cost effective. You can take snapshot easily from AWS Web console, but there is no option to configure scheduled backup to automate.
Being as a Windows Administrator, Initially I used AWS Tools for Windows PowerShell (AWS SDK for .NET) to manage snapshot using PowerShell cmdlets. There are some script available to automate the snapshot process, but most of them are available for Linux environment or way too complex for me to understand. Then I decided to write one script for myself, which should fulfil following requirement.
- Take snapshot for all volumes.
- Can be scheduled as per defined backup strategy.
- All snapshots must follow proper naming convention with time stamp in its description.
- Keep the logs after finishing backup.
- Remove old snapshots as per defined retention period.
- Trigger one email after every successful execution of the script for taking & removing snapshot.
Finally I managed to write two separate script, one for taking snapshots and another for removing old snapshots. Also able to rotate this script to take backup as Daily, Weekly by duplicating the script and creating multiple scheduled tasks.
NOTE : I am not a pro on PowerShell, but I tried my best to write this script, and it works without any issue. As always, you can use this script at your own risk.
In future, I will improve it further. Now this solution has the following requirements:
- EC2 instance running Windows 2008 / R2, or Windows 2012.
- PowerShell 3+
- AWS SDK for .NET
- IAM account to authenticate.
- Little knowledge on PowerShell.
Following policy should applied to this IAM account:
How to configure the script:
First download SnapShot.zip and extract it.
SnapShot_Update_05.rar (6.4 KiB, 194 hits)
- Added option to select only root volumes for snapshot.
- Now script will tag the snapshots with Instance Name & Volume Device.
- Free volumes will be tagged as well.
- Changed the configuration.
- Added functions to update TAGs.
- Added function to retry on failure.
- Now you can extract script anywhere you like.
- PowerShell version checking.
Configurable settings (SnapShotConfigAWSConfig.ps1)
First you have to update AWSConfig.ps1 with your Access Key, Secret Key and your Region. Do not change the file location, as this file will be used by the snapshot creation & removal script.
Configurable settings (SnapShotAutoSnapCreation.ps1)
Setting for max retry count for validating successful connection between AWS and EC2 Instance.
AWSRetry RetryCount TimeOut
Eg. AWSRetry 30 30
Once connected successfully, it will start taking backups.
You can also configure volume type to take backup. Available options are single volume, free volumes, active volumes & root volumes.
Here you have to specify the log file location and snapshot backup type. By duplicating the script on separate folder you can take DAILY / WEEKLY / MONTHLY backup etc.
Here you have to specify the email server, sender & recipient details.
Configurable settings (SnapShotDailyAutoSnapRemoval.ps1)
Here you have to set the retention period for old snapshot backup and the type of backups.
Once you finish with the script configuration, you have to create task scheduler for taking backup. To do it easily, I have already created two scheduler, you just have to import them and modify the execution time, path (if your %SystemDrive% is other than C:) & Authentication.
Once done, it will be ready for production use.
Thanks for reading 🙂
Disclaimer: All posts and opinions on this site are provided AS IS with no warranties. These are my own personal opinions and do not represent my employer’s view in any way.
This work is licensed under a Creative Commons Attribution-NoDerivatives 4.0 International License.