यह स्क्रिप्ट एक S3 बाल्टी बैकअप लेता है:
#!/usr/bin/env python
from boto.s3.connection import S3Connection
import re
import datetime
import sys
import time
def main():
s3_ID = sys.argv[1]
s3_key = sys.argv[2]
src_bucket_name = sys.argv[3]
num_backup_buckets = sys.argv[4]
connection = S3Connection(s3_ID, s3_key)
delete_oldest_backup_buckets(connection, num_backup_buckets)
backup(connection, src_bucket_name)
def delete_oldest_backup_buckets(connection, num_backup_buckets):
"""Deletes the oldest backup buckets such that only the newest NUM_BACKUP_BUCKETS - 1 buckets remain."""
buckets = connection.get_all_buckets() # returns a list of bucket objects
num_buckets = len(buckets)
backup_bucket_names = []
for bucket in buckets:
if (re.search('backup-' + r'\d{4}-\d{2}-\d{2}' , bucket.name)):
backup_bucket_names.append(bucket.name)
backup_bucket_names.sort(key=lambda x: datetime.datetime.strptime(x[len('backup-'):17], '%Y-%m-%d').date())
# The buckets are sorted latest to earliest, so we want to keep the last NUM_BACKUP_BUCKETS - 1
delete = len(backup_bucket_names) - (int(num_backup_buckets) - 1)
if delete <= 0:
return
for i in range(0, delete):
print 'Deleting the backup bucket, ' + backup_bucket_names[i]
connection.delete_bucket(backup_bucket_names[i])
def backup(connection, src_bucket_name):
now = datetime.datetime.now()
# the month and day must be zero-filled
new_backup_bucket_name = 'backup-' + str('%02d' % now.year) + '-' + str('%02d' % now.month) + '-' + str(now.day);
print "Creating new bucket " + new_backup_bucket_name
new_backup_bucket = connection.create_bucket(new_backup_bucket_name)
copy_bucket(src_bucket_name, new_backup_bucket_name, connection)
def copy_bucket(src_bucket_name, dst_bucket_name, connection, maximum_keys = 100):
src_bucket = connection.get_bucket(src_bucket_name);
dst_bucket = connection.get_bucket(dst_bucket_name);
result_marker = ''
while True:
keys = src_bucket.get_all_keys(max_keys = maximum_keys, marker = result_marker)
for k in keys:
print 'Copying ' + k.key + ' from ' + src_bucket_name + ' to ' + dst_bucket_name
t0 = time.clock()
dst_bucket.copy_key(k.key, src_bucket_name, k.key)
print time.clock() - t0, ' seconds'
if len(keys) < maximum_keys:
print 'Done backing up.'
break
result_marker = keys[maximum_keys - 1].key
if __name__ =='__main__':main()
मैं (एक रेल अनुप्रयोग के लिए) एक रेक कार्य में इस का उपयोग करें:
desc "Back up a file onto S3"
task :backup do
S3ID = "AKIAJM3FAKEFAKENRWVQ"
S3KEY = "0A5kuzV+F1pbaMjZxHQAZfakedeJd0dfakeNpry"
SRCBUCKET = "primary-mzgd"
NUM_BACKUP_BUCKETS = 2
Dir.chdir("#{Rails.root}/lib/tasks")
system "./do_backup.py #{S3ID} #{S3KEY} #{SRCBUCKET} #{NUM_BACKUP_BUCKETS}"
end
स्रोत
2012-09-14 18:20:47
s3cmd http://s3tools.org/s3cmd का उपयोग करें या s3 api द्वारा अपना स्वयं का बैकअप टूल लिखें। – qrtt1
क्या वाकई उपयोगी है? एस 3 में डेटा अनावश्यक है। Http://aws.amazon.com/s3/#protecting से: 'अमेज़ॅन एस 3 का मानक भंडारण दो सुविधाओं में डेटा के समवर्ती नुकसान को बनाए रखने के लिए डिज़ाइन किया गया है।' – ben
इस दृष्टिकोण की उपयोगिता के बारे में एक और अंतर्दृष्टि जोड़ने के लिए (से लिया गया [एस 3 एफएक्यू] (http://aws.amazon.com/s3/faqs/#How_durable_is_Amazon_S3)): अमेज़ॅन एस 3 को किसी दिए गए वर्ष में 99.9 99 99 99 99% ऑब्जेक्ट्स की स्थायित्व प्रदान करने के लिए डिज़ाइन किया गया है। यह स्थायित्व स्तर 0.000000001% वस्तुओं की औसत वार्षिक अनुमानित हानि से मेल खाता है। उदाहरण के लिए, यदि आप अमेज़ॅन एस 3 के साथ 10,000 वस्तुओं को स्टोर करते हैं, तो आप औसतन 10,000,000 वर्षों में एक ही वस्तु के नुकसान की उम्मीद कर सकते हैं। इसके अलावा, अमेज़ॅन एस 3 को दो सुविधाओं में डेटा के समवर्ती नुकसान को बनाए रखने के लिए डिज़ाइन किया गया है। – Viccari