#!/usr/bin/env python import boto.sqs, os, json, sys from boto.s3.connection import S3Connection from boto.s3.key import Key if len(sys.argv) != 4: print "Usage: python mirror_bucket.py [basedir] [queue_name] [bucket_name]" exit(1) basedir = sys.argv[1] queue_name = sys.argv[2] bucket_name = sys.argv[3] print "Mirroring files from %s to %s" % (bucket_name, basedir) sqs_connection = boto.sqs.connect_to_region( "us-east-1", aws_access_key_id=os.environ['AWS_ACCESS_KEY_ID'], aws_secret_access_key=os.environ['AWS_SECRET_ACCESS_KEY']) s3_connection = S3Connection(os.environ['AWS_ACCESS_KEY_ID'], os.environ['AWS_SECRET_ACCESS_KEY']) queue = sqs_connection.get_queue(queue_name) bucket = s3_connection.get_bucket(bucket_name) while True: m = queue.read(60,message_attributes=["s3"]) if m is None: continue body = m.get_body() for record in json.loads(json.loads(body)["Message"])["Records"]: name = record["s3"]["object"]["key"] key = Key(bucket=bucket, name=name) f = "%s/%s" % ( basedir, name ) d=os.path.dirname(f) if not os.path.exists(d): os.makedirs(d) print "Downloading %s" % f key.get_contents_to_filename(f) print "Done" queue.delete_message(m)