मेरे पास अमेज़न S3 बाल्टी में लाखों फाइलें हैं और मैं इन फाइलों को न्यूनतम लागत या संभव लागत वाले अन्य बाल्टी और फ़ोल्डरों में स्थानांतरित करना चाहता हूं। सभी बाल्टी एक ही ज़ोन में हैं।
मैं यह कैसे कर सकता था?
मेरे पास अमेज़न S3 बाल्टी में लाखों फाइलें हैं और मैं इन फाइलों को न्यूनतम लागत या संभव लागत वाले अन्य बाल्टी और फ़ोल्डरों में स्थानांतरित करना चाहता हूं। सभी बाल्टी एक ही ज़ोन में हैं।
मैं यह कैसे कर सकता था?
जवाबों:
लाखों एक बड़ी संख्या है - मैं बाद में वापस आ जाऊंगा।
आपके दृष्टिकोण के बावजूद, अंतर्निहित तंत्र को एक बाल्टी से दूसरे में सीधे कॉपी करने की आवश्यकता है - इस तरह से (चूंकि आपकी बाल्टी उसी क्षेत्र में हैं) आप बैंडविड्थ के लिए कोई शुल्क नहीं लेते हैं। कोई अन्य दृष्टिकोण बस अक्षम है (उदाहरण के लिए फ़ाइलों को डाउनलोड करना और पुनः लोड करना)।
बाल्टियों के बीच नकल करना 'PUT कॉपी' का उपयोग करके पूरा किया जाता है - यह एक PUT अनुरोध है जिसमें 'x-amz-copy-source' हेडर शामिल है - मेरा मानना है कि इसे COPY अनुरोध के रूप में वर्गीकृत किया गया है। यह फ़ाइल की प्रतिलिपि बनाएगा और संबद्ध मेटा-डेटा को डिफ़ॉल्ट रूप से लेगा। यदि आप एसीएल को एक ही समय में सेट करना चाहते हैं, तो आपको सही मान के साथ एक 'x-amz-acl' शामिल करना होगा (अन्यथा, यह निजी रूप से डिफ़ॉल्ट होगा)। आपसे आपके COPY अनुरोधों ($ 0.01 / 1,000 अनुरोधों) के लिए शुल्क लिया जाएगा। आप कॉपी किए जाने के बाद अनावश्यक फ़ाइलों को हटा सकते हैं (DELETE अनुरोधों का शुल्क नहीं लिया जाता है)। (एक बिंदु पर मैं बिल्कुल स्पष्ट नहीं हूं कि क्या सीओपीवाई अनुरोध जीईटी अनुरोध के प्रभार को भी लागू करता है या नहीं, क्योंकि वस्तु को पहले स्रोत बाल्टी से प्राप्त किया जाना चाहिए - यदि ऐसा होता है, तो चार्ज अतिरिक्त $ 0.01 / 10,000 होगा अनुरोध)।
उपर्युक्त शुल्क अनुपलब्ध हैं - एक लाख वस्तुओं के लिए जो आप लगभग $ 10 (या $ 11) में देख रहे हैं। चूंकि अंत में आपको गंतव्य बाल्टी पर फ़ाइलों को बनाना होगा, अन्य दृष्टिकोण (उदाहरण के लिए, फ़ाइलों को टार-गज़िपिंग, अमेज़ॅन आयात / निर्यात, आदि) इस लागत के आसपास नहीं मिलेंगे। यदि आपके पास स्थानांतरित करने के लिए कुछ मिलियन से अधिक ऑब्जेक्ट हैं, तो अमेज़ॅन से संपर्क करते समय कोई भी कम नहीं, यह आपके लायक हो सकता है।
उपरोक्त (अपरिहार्य मूल्य) को देखते हुए, अगली बात पर ध्यान देना चाहिए, जो 'लाखों फाइलों' की नकल करते समय एक बड़ा कारक होगा। सभी उपकरण जो बाल्टियों के बीच की सीधी नकल कर सकते हैं, वही शुल्क वसूलेंगे। दुर्भाग्य से, आपको प्रति फ़ाइल एक अनुरोध (कॉपी करने के लिए), एक अनुरोध को हटाने के लिए, और संभवतः एक अनुरोध ACL डेटा को पढ़ने के लिए (यदि आपकी फ़ाइलों में विविध ACL हैं)। सबसे अच्छी गति जो सबसे समानांतर संचालन चला सकती है, से आएगी।
कुछ कमांड लाइन दृष्टिकोण हैं जो काफी व्यवहार्य हो सकते हैं:
कुछ संभावना है कि s3fs काम कर सकता है - यह काफी समानांतर है, एक ही बाल्टी के बीच प्रतियां का समर्थन करता है - विभिन्न बाल्टी के बीच प्रतियां का समर्थन नहीं करता है, लेकिन विभिन्न बाल्टी के बीच चाल का समर्थन कर सकता है ।
मैं s3cmd-modification के साथ शुरू करता हूं और देखता हूं कि क्या आपके पास इसके साथ कोई सफलता है या बेहतर समाधान के लिए Amazon से संपर्क करें।
aws s3 sync s3://source s3://destination
फिट होता है?
पुराना विषय है, लेकिन यह उसी परिदृश्य की जांच करने वाले किसी भी व्यक्ति के लिए है। 20,000+ वस्तुओं के लिए यह समय मुझे साथ ले गया। AWS Linux / Centos पर चल रहा है, प्रत्येक ऑब्जेक्ट कुछ वीडियो और विभिन्न मीडिया फ़ाइलों के साथ, अधिकांश भाग के लिए छवियां हैं।
बाल्टी ए से बाल्टी बी तक फाइलों को कॉपी करने के लिए एडब्ल्यूएस सीएलआई टूल्स का उपयोग करना।
A. नई बाल्टी बनाएँ
$ aws s3 mb s3://new-bucket-name
B. पुरानी बाल्टी को नई बाल्टी के साथ सिंक करें
$ aws s3 sync s3://old-bucket-name s3://new-bucket-name
20,000+ वस्तुओं की प्रतिलिपि बनाई जा रही है ...
शुरू हुआ 17:03
17:06 को समाप्त हुआ
20,000+ वस्तुओं के लिए कुल समय = लगभग 3 मिनट
एक बार नई बाल्टी को सही तरीके से कॉन्फ़िगर करने के बाद, Ie अनुमतियां, नीति आदि और आप पुरानी बाल्टी को हटाना चाहते हैं।
सी। पुरानी बाल्टी को हटा दें / हटा दें
$ aws s3 rb --force s3://old-bucket-name
मुझे लगता है कि आप शायद अब तक एक अच्छा समाधान पा चुके हैं, लेकिन दूसरों के लिए जो इस समस्या का सामना कर रहे हैं (जैसा कि मैं अभी हाल ही में था), मैंने विशेष रूप से एक एस 3 बाल्टी को दूसरे में मिरर करने के उद्देश्य से एक साधारण उपयोगिता तैयार की है। एक उच्च समवर्ती, फिर भी सीपीयू और मेमोरी कुशल तरीके से।
यह यहाँ एक अपाचे लाइसेंस के तहत github पर है: https://github.com/cobbzilla/s3s3mirror
यदि आप इसे एक कोशिश देने का फैसला करते हैं तो कृपया मुझे बताएं कि क्या आपके पास कोई प्रतिक्रिया है।
--cross-account-copy
विकल्प है ( -C
संक्षेप में)। ध्यान दें कि जब खातों में प्रतिलिपि बनाई जाती है, तो ACL की प्रतिलिपि नहीं बनाई जाती है; गंतव्य बाल्टी के स्वामी को कॉपी किए गए डेटा की पूर्ण अनुमति होगी।
AWS सीएलआई समानांतर प्रक्रियाओं में एक बाल्टी को दूसरे को कॉपी करने का एक तरीका प्रदान करता है। Https://stackoverflow.com/a/40270349/371699 से लिया गया :
निम्नलिखित कमांड एडब्ल्यूएस सीएलआई को नौकरियों को निष्पादित करने के लिए 1,000 थ्रेड्स (प्रत्येक छोटी फ़ाइल या मल्टीपार्ट कॉपी का एक हिस्सा) का उपयोग करने के लिए कहेंगे और आगे 100,000 नौकरियां देखें:
aws configure set default.s3.max_concurrent_requests 1000
aws configure set default.s3.max_queue_size 100000
इन्हें चलाने के बाद, आप सरल सिंक कमांड का उपयोग इस प्रकार कर सकते हैं:
aws s3 sync s3://source-bucket/source-path s3://destination-bucket/destination-path
मेरे मामले के लिए एक M4.xlarge मशीन (AWS - 4 कोर, 16GB RAM में) पर, सिंक / कॉपी स्पीड लगभग 9.5MiB / s से 700 + MiB / s तक चली गई, एक गति वृद्धि डिफ़ॉल्ट कॉन्फ़िगरेशन पर 70x।