मूल रूप से मेरे ब्लॉग पर पोस्ट किया गया: http://eladnava.com/backing-up-your-amazon-s3-buckets-to-ec2/
समय-समय पर अपने S3 बाल्टी को EC2 सर्वर पर सिंक करें
यह कई कमांड लाइन उपयोगिताओं का उपयोग करके आसानी से प्राप्त किया जा सकता है जो स्थानीय फाइल सिस्टम में एक दूरस्थ S3 बाल्टी को सिंक करना संभव बनाता है।
s3cmd
पहले, s3cmd
बेहद आशाजनक लग रहा था। हालांकि, मेरे विशाल S3 बाल्टी पर इसे आज़माने के बाद - यह पैमाने पर विफल रहा, ए के साथ आउटिंग करना Segmentation fault
। यह छोटी बाल्टियों पर ठीक काम करता था, हालाँकि। चूंकि यह बड़ी बाल्टियों के लिए काम नहीं करता था, इसलिए मैं इसका विकल्प खोजने के लिए निकल पड़ा।
s4cmd
नया, बहु थ्रेडेड विकल्प s3cmd
। हालांकि, यह और भी आशाजनक लग रहा था, मैंने देखा कि यह उन फाइलों को फिर से डाउनलोड करता रहा, जो पहले से ही स्थानीय फाइल सिस्टम पर मौजूद थीं। यह उस तरह का व्यवहार नहीं है जिसकी मुझे सिंक कमांड से उम्मीद थी। यह जाँचना चाहिए कि क्या दूरस्थ फ़ाइल पहले से ही स्थानीय रूप से मौजूद है (हैश / फाइलिंग जाँच साफ-सुथरी होगी) और इसे उसी लक्ष्य निर्देशिका पर अगले सिंक रन में छोड़ दें। मैंने इस अजीब व्यवहार की रिपोर्ट करने के लिए एक मुद्दा ( ब्लूमरच / s4cmd / # 46 ) खोला । इस बीच, मैं एक और विकल्प खोजने के लिए निकल पड़ा।
awscli
और फिर मैंने पाया awscli
। यह अमेज़ॅन की आधिकारिक कमांड लाइन इंटरफ़ेस है, जो कि उनकी अलग-अलग क्लाउड सेवाओं के साथ बातचीत करने के लिए है, जिसमें S3 शामिल है।
यह एक उपयोगी सिंक कमांड प्रदान करता है जो आपके स्थानीय फाइल सिस्टम में दूरस्थ बाल्टी फ़ाइलों को जल्दी और आसानी से डाउनलोड करता है ।
$ aws s3 सिंक s3: // आपका-बकेट-नाम / घर / ubuntu / s3 / आपका-बकी-नाम /
लाभ:
- स्केलेबल - विशाल S3 बाल्टी का समर्थन करता है
- मल्टी-थ्रेडेड - कई थ्रेड्स का उपयोग करके फ़ाइलों को तेजी से सिंक करता है
- स्मार्ट - केवल नई या अपडेट की गई फ़ाइलों को सिंक करता है
- फास्ट - इसकी बहु-थ्रेडेड प्रकृति और स्मार्ट सिंक एल्गोरिदम के लिए धन्यवाद
एक्सीडेंटल डिलेयन
sync
यदि वे स्रोत (S3 बाल्टी), और इसके विपरीत से गायब हैं , तो आसानी से, कमांड गंतव्य फ़ोल्डर (स्थानीय फ़ाइल सिस्टम) में फ़ाइलों को नहीं हटाएगा। यह S3 का बैकअप लेने के लिए एकदम सही है - अगर फ़ाइलों को बाल्टी से हटा दिया जाता है, तो इसे फिर से सिंक करना स्थानीय रूप से नहीं हटेगा। और यदि आप किसी स्थानीय फ़ाइल को हटाते हैं, तो उसे स्रोत बकेट से भी नहीं हटाया जाएगा।
Ubuntu 14.04 LTS पर अर्सकली की स्थापना
चलो स्थापित करके शुरू करते हैं awscli
। ऐसा करने के कई तरीके हैं , हालांकि, मैंने इसे स्थापित करना सबसे आसान पाया apt-get
।
$ sudo apt-get install awscli
विन्यास
इसके बाद, हमें awscli
अपनी एक्सेस कुंजी आईडी और गुप्त कुंजी के साथ कॉन्फ़िगर करना होगा, जिसे आपको IAM से प्राप्त करना होगा , एक उपयोगकर्ता बनाकर और AmazonS3ReadOnlyAccess नीति संलग्न करके । यह आपको या किसी को भी, जो आपकी S3 फ़ाइलों को हटाने से इन क्रेडेंशियल्स तक पहुँच प्राप्त करने से रोकेगा। अपने S3 क्षेत्र में प्रवेश करना सुनिश्चित करें, जैसे कि us-east-1
।
$ aws कॉन्फ़िगर
तैयारी
चलो स्थानीय S3 बैकअप निर्देशिका तैयार करते हैं, अधिमानतः /home/ubuntu/s3/{BUCKET_NAME}
। {BUCKET_NAME}
अपने वास्तविक बकेट नाम के साथ प्रतिस्थापित करना सुनिश्चित करें ।
$ mkdir -p / home / ubuntu / s3 / {BUCKET_NAME}
प्रारंभिक सिंक
चलो आगे बढ़ते हैं और निम्नलिखित कमांड के साथ पहली बार बाल्टी सिंक करते हैं:
$ aws s3 सिंक s3: // {BUCKET_NAME} / होम / ubuntu / s3 / {BUCKET_NAME} /
मान लें कि बकेट मौजूद है, तो AWS क्रेडेंशियल्स और रीजन सही हैं, और डेस्टिनेशन फोल्डर वैध है, awscli
पूरे बकेट को स्थानीय फाइलसिस्टम पर डाउनलोड करना शुरू कर देगा।
बाल्टी के आकार और आपके इंटरनेट कनेक्शन के आधार पर, यह कुछ सेकंड से लेकर घंटों तक कहीं भी ले जा सकता है। जब यह पूरा हो जाएगा, तो हम आगे बढ़ेंगे और बाल्टी की स्थानीय प्रतिलिपि को अद्यतित रखने के लिए एक स्वचालित क्रोन नौकरी स्थापित करेंगे।
क्रोन जॉब सेट करना
आगे बढ़ो और में एक sync.sh
फ़ाइल बनाएँ /home/ubuntu/s3
:
$ nano /home/ubuntu/s3/sync.sh
निम्नलिखित कोड को कॉपी और पेस्ट करें sync.sh
:
#! / Bin / श
# वर्तमान दिनांक और समय को प्रतिध्वनित करें
गूंज '-----------------------------'
दिनांक
गूंज '-----------------------------'
गूंज ''
# इको लिपि आरंभीकरण
गूंज 'सिंकिंग रिमोट S3 बाल्टी ...'
# वास्तव में सिंक कमांड (अपने S3 बाल्टी नाम के साथ {BUCKET_NAME} को बदलें)
/ usr / bin / aws s3 सिंक s3: // {BUCKET_NAME} / home / ubuntu / s3 / {BUCKET_NAME} /
# इको स्क्रिप्ट पूरी होना
गूंज 'सिंक पूरा'
स्क्रिप्ट के दौरान दो बार, अपने S3 बाल्टी नाम के साथ {BUCKET_NAME} को बदलना सुनिश्चित करें ।
प्रो टिप: आपको बाइनरी /usr/bin/aws
से लिंक करने के लिए उपयोग करना चाहिए aws
, क्योंकि crontab
एक सीमित शेल वातावरण में कमांड निष्पादित करता है और निष्पादन योग्य को अपने दम पर खोजने में सक्षम नहीं होगा।
इसके बाद, chmod
स्क्रिप्ट को सुनिश्चित करें ताकि इसे निष्पादित किया जा सके crontab
।
$ सुडो चामोद + x /home/ubuntu/s3/sync.sh
आइए यह सुनिश्चित करने के लिए स्क्रिप्ट चलाने की कोशिश करें कि यह वास्तव में काम करता है:
$ /home/ubuntu/s3/sync.sh
आउटपुट इस के समान होना चाहिए:
अगला, चलो वर्तमान उपयोगकर्ता crontab
को निम्नलिखित कमांड निष्पादित करके संपादित करते हैं :
$ crontab -e
यदि यह आपकी पहली बार निष्पादित है crontab -e
, तो आपको एक पसंदीदा संपादक का चयन करना होगा। मैं चयन करने की सलाह दूंगा nano
क्योंकि शुरुआती लोगों के साथ काम करना सबसे आसान है।
सिंक फ्रिक्वेंसी
हमें यह बताने की आवश्यकता है कि crontab
हमारी स्क्रिप्ट को चलाने के लिए कितनी बार और कहाँ स्क्रिप्ट एक कमांड लिखकर स्थानीय फाइल सिस्टम पर रहती है। इस कमांड का प्रारूप इस प्रकार है:
mh डोम मोन डो कमांड
निम्न कमांड स्क्रिप्ट को हर घंटे crontab
चलाने के लिए कॉन्फ़िगर करती है sync.sh
(मिनट के माध्यम से निर्दिष्ट: 0 और घंटे: * पैरामीटर) और यह sync.log
हमारी s3
निर्देशिका में फ़ाइल के लिए स्क्रिप्ट के आउटपुट को पाइप करने के लिए है :
0 * * * * * /home/ubuntu/s3/sync.sh> /home/ubuntu/s3/sync.log
आपको इस पंक्ति को उस crontab
फ़ाइल के नीचे जोड़ना चाहिए जिसे आप संपादित कर रहे हैं। फिर, आगे बढ़ो और Ctrl + W दबाकर फ़ाइल को डिस्क पर सहेजें और फिर दर्ज करें । फिर आप Ctrl + Xnano
दबाकर बाहर निकल सकते हैं । अब हर घंटे सिंक कार्य चलाएगा।crontab
प्रो टिप: आप यह सत्यापित कर सकते हैं कि प्रति घंटा क्रॉन जॉब का निरीक्षण /home/ubuntu/s3/sync.log
, निष्पादन तिथि और समय के लिए इसकी सामग्री की जाँच करके और लॉग्स का निरीक्षण करके यह देखने के लिए सफलतापूर्वक क्रियान्वित किया जा रहा है कि कौन सी नई फ़ाइलों को सिंक किया गया है।
सब तैयार! आपकी S3 बाल्टी अब हर घंटे अपने आप आपके EC2 सर्वर पर सिंक हो जाएगी, और आपको जाने के लिए अच्छा होना चाहिए। ध्यान दें कि समय के साथ, जैसे ही आपकी S3 बाल्टी बड़ी होती जाती है, आपको अपनी EC2 सर्वर की EBS वॉल्यूम का आकार बढ़ाना पड़ सकता है ताकि आपकी फ़ाइलों को समायोजित किया जा सके। आप हमेशा इस गाइड का पालन करके अपने ईबीएस वॉल्यूम का आकार बढ़ा सकते हैं ।