Created
December 15, 2014 03:06
-
-
Save yuta-imai/9cc3538f5b775c06cde9 to your computer and use it in GitHub Desktop.
A code snippet for file upload for Amazon S3. The script uses DynamoDB to manage a list of uploaded files.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
import re | |
import sys | |
import time | |
import boto.dynamodb2 | |
import boto.s3 | |
import boto.s3.bucket | |
import boto.s3.key | |
filename = sys.argv[1] | |
region = sys.argv[2] | |
bucketName = sys.argv[3] | |
prefix = sys.argv[4] | |
table = sys.argv[5] | |
p = re.compile(r'(logs.+\.log$)') | |
key = p.search(filename).group() | |
# ファイルをロックする(既にアップロード済みだったらロックできない) | |
if lock_key(key): | |
# ロックできたらあとはアップロード | |
s3 = boto.s3.connect_to_region(region) | |
s3bucket = boto.s3.bucket.Bucket(connection=s3,name=bucketName) | |
s3key = boto.s3.key.Key(bucket=s3bucket,name=prefix + key) | |
s3key.set_contents_from_filename(filename) | |
# このへんの出力をCloudWatch Logsにアップロードしておけばログ管理ともさようなら | |
print 'Uploaded %s.' % (s3key.name) | |
else: | |
# このへんの出力をCloudWatch Logsにアップロードしておけばログ管理ともさようなら | |
print '%s seems to be uploaded already.' % (s3key.name) | |
def lock_key(key): | |
ddb = boto.dynamodb2.connect_to_region(region) | |
try: | |
ddb.put_item( | |
table, | |
{'key' : { 'S' : key}, 'status': {'S': 'uploaded'}}, | |
expected = { | |
'key' : { "Exists" : False } | |
} | |
) | |
return True | |
except: | |
return False |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment