I’ve been running my snapshots manually from the AWS console and it’s time to automate this. Here’s how to get it set up.
Install the AWS CLI
This is needed in order to use the create-snapshot command.
# Download the package to the home directory. cd ~ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" # unzip. Creates a directory aws under the current directory. unzip awscliv2.zip # Run the install program. By default, the files are all installed to /usr/local/aws-cli, and a symbolic link is created in /usr/local/bin. sudo ./aws/install # Verify installation /usr/local/bin/aws --version
Configure the Credentials
This configures and saves your credentials for using the CLI.
You will need your AWS Access Key ID and AWS Secret Access Key. If you haven’t created these yet, go to your AWS Account menu (username in the upper right corner), and choose Security Credentials. Note that once your Secret Access Key is generated, you must note it and you cannot ever retrieve it again.
# Run the configuration program aws configure # Respond to the prompts. Your entries will differ here. AWS Access Key ID [None]: (your 20 digit access key) AWS Secret Access Key [None]: (your 40 digit secret key) Default region name [None]: us-west-1 Default output format [None]: json
Create the Snapshot Script
I keep all my programs and scripts in /dockerdata/programs, for convenience.
sudo nano /dockerdata/programs/aws_snapshot.sh
My script:
# ================================================================================= #!/bin/bash # /dockerdata/programs/aws_snapshot.sh # AWS snapshot of this volume. # To Run: /bin/bash /dockerdata/programs/aws_snapshot.sh # Returns: 0 Ok, 1 if error # ================================================================================= CMD="aws ec2 create-snapshot" VOLUME_ID="vol-11111111111111111" # date params: %Y-%m-%d %H:%M:%S Note that this is local tz. # Note that --description parameter chokes on whitespace. SNAPSHOT_DESCRIPTION="MyVolume_Snapshot_$(date +'%Y-%m-%d_%H:%M')" $CMD --volume-id $VOLUME_ID --description \"$SNAPSHOT_DESCRIPTION\" --output=text exit $?
Test It
/bin/bash /dockerdata/programs/aws_snapshot.sh
Go the the AWS Console, choose Snapshots, and confirm your snapshot is created.
Set it up on a cron
sudo crontab -e
Enter your schedule, in my case, I run it monthly.
# AWS Snapshot - 1st of Month. 0 18 1 * * /dockerdata/programs/aws_snapshot.sh