न्यूनतम लागत के साथ दो S3 बाल्टी के बीच फ़ाइलों को कैसे स्थानांतरित करें?


44

मेरे पास अमेज़न S3 बाल्टी में लाखों फाइलें हैं और मैं इन फाइलों को न्यूनतम लागत या संभव लागत वाले अन्य बाल्टी और फ़ोल्डरों में स्थानांतरित करना चाहता हूं। सभी बाल्टी एक ही ज़ोन में हैं।

मैं यह कैसे कर सकता था?

जवाबों:


53

लाखों एक बड़ी संख्या है - मैं बाद में वापस आ जाऊंगा।

आपके दृष्टिकोण के बावजूद, अंतर्निहित तंत्र को एक बाल्टी से दूसरे में सीधे कॉपी करने की आवश्यकता है - इस तरह से (चूंकि आपकी बाल्टी उसी क्षेत्र में हैं) आप बैंडविड्थ के लिए कोई शुल्क नहीं लेते हैं। कोई अन्य दृष्टिकोण बस अक्षम है (उदाहरण के लिए फ़ाइलों को डाउनलोड करना और पुनः लोड करना)।

बाल्टियों के बीच नकल करना 'PUT कॉपी' का उपयोग करके पूरा किया जाता है - यह एक PUT अनुरोध है जिसमें 'x-amz-copy-source' हेडर शामिल है - मेरा मानना ​​है कि इसे COPY अनुरोध के रूप में वर्गीकृत किया गया है। यह फ़ाइल की प्रतिलिपि बनाएगा और संबद्ध मेटा-डेटा को डिफ़ॉल्ट रूप से लेगा। यदि आप एसीएल को एक ही समय में सेट करना चाहते हैं, तो आपको सही मान के साथ एक 'x-amz-acl' शामिल करना होगा (अन्यथा, यह निजी रूप से डिफ़ॉल्ट होगा)। आपसे आपके COPY अनुरोधों ($ 0.01 / 1,000 अनुरोधों) के लिए शुल्क लिया जाएगा। आप कॉपी किए जाने के बाद अनावश्यक फ़ाइलों को हटा सकते हैं (DELETE अनुरोधों का शुल्क नहीं लिया जाता है)। (एक बिंदु पर मैं बिल्कुल स्पष्ट नहीं हूं कि क्या सीओपीवाई अनुरोध जीईटी अनुरोध के प्रभार को भी लागू करता है या नहीं, क्योंकि वस्तु को पहले स्रोत बाल्टी से प्राप्त किया जाना चाहिए - यदि ऐसा होता है, तो चार्ज अतिरिक्त $ 0.01 / 10,000 होगा अनुरोध)।

उपर्युक्त शुल्क अनुपलब्ध हैं - एक लाख वस्तुओं के लिए जो आप लगभग $ 10 (या $ 11) में देख रहे हैं। चूंकि अंत में आपको गंतव्य बाल्टी पर फ़ाइलों को बनाना होगा, अन्य दृष्टिकोण (उदाहरण के लिए, फ़ाइलों को टार-गज़िपिंग, अमेज़ॅन आयात / निर्यात, आदि) इस लागत के आसपास नहीं मिलेंगे। यदि आपके पास स्थानांतरित करने के लिए कुछ मिलियन से अधिक ऑब्जेक्ट हैं, तो अमेज़ॅन से संपर्क करते समय कोई भी कम नहीं, यह आपके लायक हो सकता है।

उपरोक्त (अपरिहार्य मूल्य) को देखते हुए, अगली बात पर ध्यान देना चाहिए, जो 'लाखों फाइलों' की नकल करते समय एक बड़ा कारक होगा। सभी उपकरण जो बाल्टियों के बीच की सीधी नकल कर सकते हैं, वही शुल्क वसूलेंगे। दुर्भाग्य से, आपको प्रति फ़ाइल एक अनुरोध (कॉपी करने के लिए), एक अनुरोध को हटाने के लिए, और संभवतः एक अनुरोध ACL डेटा को पढ़ने के लिए (यदि आपकी फ़ाइलों में विविध ACL हैं)। सबसे अच्छी गति जो सबसे समानांतर संचालन चला सकती है, से आएगी।

कुछ कमांड लाइन दृष्टिकोण हैं जो काफी व्यवहार्य हो सकते हैं:

  • s3cmd-modification (वह विशिष्ट पुल अनुरोध) में समानांतर cp और mv कमांड शामिल हैं और यह आपके लिए एक अच्छा विकल्प होना चाहिए।
  • AWS कंसोल कॉपी को सीधे प्रदर्शन कर सकता है - हालांकि यह कितना समानांतर है, इसके लिए मैं नहीं बोल सकता।
  • टिम काय की अवर्स स्क्रिप्ट कॉपी कर सकते हैं - लेकिन यह समानांतर नहीं है - आपको इसकी पूरी स्क्रिप्ट चलाने के लिए स्क्रिप्ट की आवश्यकता होगी (शायद इस मामले में सबसे अच्छा विकल्प नहीं है - हालांकि, यह एक महान स्क्रिप्ट है)।
  • क्लाउडब्रीयर S3 एक्सप्लोरर , बकेट एक्सप्लोरर और क्लाउडबडी सभी को कार्य करने में सक्षम होना चाहिए, हालांकि मुझे नहीं पता कि प्रत्येक स्टैक की दक्षता कैसे होती है। मेरा मानना ​​है कि हालांकि इनमें से अधिकांश की बहु-थ्रेडेड सुविधाओं को सॉफ़्टवेयर की खरीद की आवश्यकता होती है।
  • उपलब्ध SDK में से किसी एक का उपयोग करके अपनी स्क्रिप्ट बनाएं।

कुछ संभावना है कि s3fs काम कर सकता है - यह काफी समानांतर है, एक ही बाल्टी के बीच प्रतियां का समर्थन करता है - विभिन्न बाल्टी के बीच प्रतियां का समर्थन नहीं करता है, लेकिन विभिन्न बाल्टी के बीच चाल का समर्थन कर सकता है

मैं s3cmd-modification के साथ शुरू करता हूं और देखता हूं कि क्या आपके पास इसके साथ कोई सफलता है या बेहतर समाधान के लिए Amazon से संपर्क करें।


बकेट एक्सप्लोरर मेरे लिए अच्छी तरह से काम कर रहा है (इस समय दो बाल्टी के बीच फाइलें चलती है)
नूडल्स

3
कहाँ aws s3 sync s3://source s3://destinationफिट होता है?
ओलिवियर लालोंडे

7

पुराना विषय है, लेकिन यह उसी परिदृश्य की जांच करने वाले किसी भी व्यक्ति के लिए है। 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

जीवन रक्षक। मैं 300 + GB कॉपी कर रहा हूं। एक टिप: यदि आप उसी क्षेत्र में बाल्टियों से नकल करते हैं, तो वह दूसरे क्षेत्र की तुलना में अधिक तेज़ है (और मैं इसकी कम लागत पढ़ता हूं)।
Marcelo Agimóvel

मुझे आपकी विधि में समस्या थी: फ़ाइलें गोपनीयता सभी के लिए निर्धारित थीं, यहां तक ​​कि अधिकांश वस्तुएं सार्वजनिक हो रही थीं, क्या खुशी है?
मार्सेलो अगिमोवेल

5

मुझे यकीन नहीं है कि यह सबसे अच्छा तरीका है, लेकिन AWS प्रबंधन कंसोल में कट / कॉपी / पेस्ट सुविधा है। उपयोग करने में आसान और कुशल।


6
यह एक लाख फ़ाइलों के साथ अच्छी तरह से काम करने की संभावना नहीं है।
जेम्स

@James दर्दनाक है कि इस बात की पुष्टि कर सकते हैं;)
लूटने

3

मुझे लगता है कि आप शायद अब तक एक अच्छा समाधान पा चुके हैं, लेकिन दूसरों के लिए जो इस समस्या का सामना कर रहे हैं (जैसा कि मैं अभी हाल ही में था), मैंने विशेष रूप से एक एस 3 बाल्टी को दूसरे में मिरर करने के उद्देश्य से एक साधारण उपयोगिता तैयार की है। एक उच्च समवर्ती, फिर भी सीपीयू और मेमोरी कुशल तरीके से।

यह यहाँ एक अपाचे लाइसेंस के तहत github पर है: https://github.com/cobbzilla/s3s3mirror

यदि आप इसे एक कोशिश देने का फैसला करते हैं तो कृपया मुझे बताएं कि क्या आपके पास कोई प्रतिक्रिया है।


मुझे s3s3mirror के साथ एक अच्छा अनुभव था। मैं इसे m1.small EC2 नोड पर सेट करने और लगभग 2 घंटे में 1.5 मिलियन ऑब्जेक्ट कॉपी करने में सक्षम था। मावेन और जावा के साथ मेरी अपरिचितता के कारण सेटअप थोड़ा कठिन था, लेकिन यह सब कुछ स्थापित करने के लिए केवल उबंटू पर कुछ उपयुक्त आदेश मिला। एक अंतिम नोट: यदि (मेरी तरह) आप एक बड़ी, महत्वपूर्ण s3 बाल्टी पर एक अज्ञात स्क्रिप्ट चलाने के बारे में चिंतित हैं, तो कॉपी से बाल्टी पर केवल पढ़ने के लिए एक विशेष उपयोगकर्ता बनाएं और उन क्रेडेंशियल्स का उपयोग करें। आकस्मिक विलोपन का शून्य मौका।
मीका

क्या इसे विभिन्न खातों के बीच बाल्टियों पर लागू किया जा सकता है?
ओलिवर बर्डेकिन

@OliverBurdekin ऐसा करने के लिए एक --cross-account-copyविकल्प है ( -Cसंक्षेप में)। ध्यान दें कि जब खातों में प्रतिलिपि बनाई जाती है, तो ACL की प्रतिलिपि नहीं बनाई जाती है; गंतव्य बाल्टी के स्वामी को कॉपी किए गए डेटा की पूर्ण अनुमति होगी।
कोबजिला

धन्यवाद @rfcreader मैं इसकी लागत का अनुमान कैसे लगा सकता हूं? मुझे AWS लागत कैलकुलेटर के बारे में पता है, लेकिन यह पता नहीं है कि इस प्रक्रिया में कितनी संख्या में शामिल होने के लिए ls के अनुरोध आदि शामिल होंगे। मुझे लगता है कि CLI का उपयोग करके इन मैट्रिक्स को गिनना बहुत आसान है, लेकिन यदि आप जानते हैं कि कृपया संपर्क करें। AWS समर्थन ने सुझाव दिया "अनुरोधकर्ता भुगतान करता है"। हा!
ओलिवर बर्डेकिन

@OliverBurdekin s3s3mirror प्रकार (GET, COPY, DELETE, आदि) द्वारा AWS अनुरोधों की संख्या का ट्रैक रखता है। इन आँकड़ों को समय-समय पर छापा जाता है, और अंत में एक अंतिम बार। आप वस्तुओं के एक छोटे से उप-भाग को कॉपी करने के लिए एक सीमित / परीक्षण रन कर सकते हैं, इससे आपको एक सामान्य अहसास होना चाहिए कि संपूर्ण डेटा सेट को कॉपी करने के लिए कितने अनुरोधों की आवश्यकता होगी।
cobbzilla

2

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।


0

हारने वाली बाल्टी में, वह फ़ाइल चुनें जिसे आप दूसरी बाल्टी में कॉपी करना चाहते हैं।

  • कार्रवाई के तहत, 'कॉपी' चुनें।
  • बाल्टी पाने के लिए जाओ।
  • कार्रवाई के तहत, 'पेस्ट' चुनें

1
एक समाधान क्यों दोहराएं जो दूसरों ने एक साल पहले उल्लेख किया है?
बेंजामिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.