S3 में ऑब्जेक्ट्स को संस्करणित करना

नमस्ते! छवि

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

मेरे शोध से पता चला कि यह सुविधा विशेष रूप से मांग में नहीं है, और संस्करण तैयार करने के लिए कोई तैयार उपयोगिताओं नहीं हैं। लेकिन ऐसे पुस्तकालय हैं जिनकी यह कार्यक्षमता है। आवश्यकता - विकास, वे कहते हैं।

तो, संस्करण के लिए, बाल्टी में, हमें पहले इसे सक्षम करने की आवश्यकता है। ऐसा करने के लिए 2 उपलब्ध तरीके हैं, और दोनों एक एपीआई से बंधे हैं।

मैं रूबी aws-sdk लाइब्रेरी का उपयोग करूंगा और इसे स्थापित करूंगा:
$ gem install aws-sdk 

उसके बाद, रूबी कंसोल पर जाएं:
 $ irb 

अगला, लॉग इन करें और बाल्टी के लिए वर्जनिंग सक्षम करें:
 require 'aws-sdk' s3 = AWS::S3.new( :access_key_id => ENV['AMAZON_ACCESS_KEY_ID'], :secret_access_key => ENV['AMAZON_SECRET_ACCESS_KEY'] ) my_bucket=s3.buckets['epamcccctesting'] my_bucket.enable_versioning 

मुझे लगता है कि आप पर्यावरण चर AMAZON_ACCESS_KEY_ID और AMAZON_SECRET_ACCESS_KEY के अर्थ से अवगत हैं - हम उन पर ध्यान केंद्रित नहीं करेंगे।

इसलिए, कंसोल में हम देखेंगे कि वर्जनिंग सक्षम है:
छवि

तो संस्करण कैसे काम करता है? हाँ, सरल। फ़ाइल को बदलने का प्रयास करते समय, AWS इसे प्रतिस्थापित नहीं करता है, लेकिन एक नया संस्करण प्रदान करता है, जिसे यह POST अनुरोध शीर्षलेखों में देता है। ठीक है, या पुस्तकालय में मापदंडों में।

संस्करण इस तरह दिखेंगे:
 x-amz-version-id: mHYT.SyFXgHoG6xCy5yQVk6n6riJct4u x-amz-version-id: .KSpevNIkZSgBoCz4vU3iTBttGWXWqIc 


उसके बाद, एक GET अनुरोध प्राप्त मापदंडों में versionId डालकर ब्याज की फ़ाइल के संस्करण के लिए किया जा सकता है। इस पैरामीटर को निर्दिष्ट किए बिना, हमें इस फ़ाइल का नवीनतम संस्करण मिलेगा।

उदाहरण: मैंने एक फ़ाइल के 3 संस्करणों को बाल्टी में डाउनलोड किया और हेडर में विभिन्न संस्करण प्राप्त किए। निम्नलिखित लिंक ये संस्करण प्रदान करते हैं:

यह बहुत आसान है। किसी फ़ाइल को हटाना भी संस्करण पैरामीटर के साथ है।

सामान्य तौर पर, यह स्पष्ट है कि कार्यक्षमता है, लेकिन यह स्पष्ट नहीं है कि इसका अभी भी व्यापक रूप से उपयोग क्यों नहीं किया गया है और सीएलआई के लिए कोई सामान्य और सुविधाजनक कार्यान्वयन नहीं है। उदाहरण के लिए, बैकअप संग्रहीत करना सुविधाजनक होगा। आप एक दर्जन उदाहरण भी देख सकते हैं जहां फाइलों का संस्करण एक बहुत ही सुविधाजनक और सरल समाधान होगा।

हो सकता है कि आप कहीं संस्करण का उपयोग करें? कुछ दिलचस्प बताओ?

UPD : उदाहरण के लिए, दिनांक और आकारों के साथ किसी ऑब्जेक्ट के आउटपुट संस्करण:
 my_bucket=s3.buckets['epamcccctesting'] file = my_bucket.objects["file"] file.versions.each do |version| puts version.head[:last_modified].to_s + ' ' + version.version_id + ' ' + version.head[:content_length].to_s + ' bytes' end 2012-12-20 16:15:11 +0200 NQc0gba0nv6znIfSHRaxR0fT3I.ZaUQ5 4 bytes 2012-12-20 16:14:52 +0200 s73raBjbDF2pZpQT9o4qPu4Yn0piy1wL 3 bytes 2012-12-20 16:13:59 +0200 6Txnrqbcb4LaXo2MGYP9gn61Em0UIrUq 2 bytes 


UPD: हाल ही में, सांत्वना के माध्यम से वर्जनिंग को सक्षम किया जा सकता है:
छवि

Source: https://habr.com/ru/post/In163361/


All Articles