I need a simple way to backup files to Amazon glacier from the command line

amazon-glacierbackupcommand lineruby

I have a CentOS server online with a directory of cPmove files I need to back up to Amazon Glacier. I only have command line access, no GUI.

I need a command line client that is relatively easy to use to upload the files. For example I have used dropbox_uploader.sh before ( https://github.com/andreafabrizi/Dropbox-Uploader ) with this simple bash script:

#!/bin/bash
find /backup_folder -maxdepth 1 -name "cpmove-*.tar.gz" | while read CPMOVE
do
   ./dropbox_uploader.sh upload ${CPMOVE}
done

I saw this one:
https://github.com/carlossg/glacier-cli
but I don't have java installed on the server and am a bit hesistant to install it, due to all the security issues lately.

I do have python and ruby:

me@server [/home]# python -V
Python 2.4.3
root@server [/home]# ruby --version
ruby 1.8.7 (2012-06-29 patchlevel 370) [i686-linux]
me@server [/home]#

Is there a ruby (preferable) or python or other language (less preferable) amazon glacier command line client?)

Best Answer

The canonical library for interfacing with AWS via Python is Boto. Though it is intended to be used as a library in a Python script, it is simple enough to use independently. You can skim the fine documentation, and this page has an overview of how to use Boto, but here are the important parts:

Put your AWS credentials in ~/.boto:

[Credentials]
aws_access_key_id = FOO
aws_secret_access_key = BAR

List your vaults:

$ glacier vaults

Upload a file:

$ glacier upload foo-vault foo.zip

List pending jobs on a particular vault:

$ glacier jobs foo-vault

Though it really isn't easier to use than Boto itself, Amazon Glacier CLI Interface is based on Boto and is in fact designed for end users. Here is a tutorial for it.

Lastly the official AWS-CLI is rather easy to use. Put the credentials in ~/.aws/credentials and then simply use these commands:

Create a vault:

$ aws glacier create-vault --account-id - --vault-name foo-vault

Upload a file:

$ aws glacier upload-archive --account-id - --vault-name foo-vault --body foo.zip
Related Question