amazon-web-services - certification - aws console




ग्लेशियर से अमेज़ॅन एस 3 में फ़ोल्डर(या पूरी बाल्टी) को कैसे पुनर्स्थापित करें? (6)

मैंने अमेज़ॅन एस 3 पर अपनी बाल्टी के गुच्छा के लिए जीवन चक्र बदल दिया ताकि उनकी स्टोरेज क्लास ग्लेशियर पर सेट हो। मैंने ऑनलाइन एडब्ल्यूएस कंसोल का उपयोग करके ऐसा किया। अब मुझे उन फ़ाइलों की फिर से आवश्यकता है।

मुझे पता है कि उन्हें प्रति फ़ाइल S3 पर वापस कैसे पुनर्स्थापित करना है। लेकिन मेरी बाल्टी में हजारों फाइलें हैं। मैं देखना चाहता था कि पूरी बाल्टी को एस 3 पर वापस बहाल करने का कोई तरीका था, जैसे कि पूरी बाल्टी ग्लेशियर को भेजने का कोई तरीका था?

मुझे लगता है कि एक समाधान प्रोग्राम करने का एक तरीका है। लेकिन मैं देखना चाहता था कि कंसोल में ऐसा करने का कोई तरीका है या नहीं। या एक और कार्यक्रम के साथ? या कुछ और मुझे याद आ रही है?


इसके लिए एक अंतर्निहित उपकरण नहीं है। एस 3 में "फ़ोल्डर्स" ऑब्जेक्ट कुंजी (पथ / फ़ाइल नाम) में आगे-स्लैश के आधार पर मानव सुविधा के लिए एक भ्रम है और प्रत्येक ऑब्जेक्ट जो ग्लेशियर में माइग्रेट करता है उसे अलग-अलग पुनर्स्थापित किया जाना चाहिए, हालांकि ...

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

सुनिश्चित करें कि आप आगे बढ़ने से पहले, ग्लेशियर से S3 कार्यों में पुनर्स्थापित कैसे करते हैं, यह सुनिश्चित करें। यह हमेशा केवल एक अस्थायी बहाली होती है, और आप दिनों की संख्या चुनते हैं कि प्रत्येक ऑब्जेक्ट केवल हिमनद में संग्रहीत होने के लिए वापस लौटने से पहले S3 में जारी रहेगा।

साथ ही, आप यह सुनिश्चित करना चाहते हैं कि आप थोड़े समय में बहुत अधिक ग्लेशियर डेटा बहाल करने के लिए जुर्माना शुल्क समझें, या आप कुछ अप्रत्याशित व्यय के लिए हो सकते हैं। तात्कालिकता के आधार पर, आप दिन या हफ्तों में पुनर्स्थापन ऑपरेशन को फैलाना चाहते हैं।


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

  1. बाल्टी में सभी ग्लासियर फ़ाइलों (कुंजी) की एक सूची प्राप्त करें

    aws s3api list-objects-v2 --bucket <bucketName> --query "Contents[?StorageClass=='GLACIER']" --output text | awk '{print $2}' > glacier-restore.txt

  2. एक शेल स्क्रिप्ट बनाएं और इसे चलाएं, अपना "बाल्टीनाम" बदल दें।

    #!/bin/sh
    
    for x in `cat glacier-restore.txt`
      do
        echo "Begin restoring $x"
        aws s3api restore-object --restore-request Days=7 --bucket <bucketName> <bucketName> --key "$x"
        echo "Done restoring $x"
      done
    

जोश को http://hnnjosh.com/blog/a-client-error-invalidobjectstate-occurred-when-calling-the-copyobject-operation-is-not-valid-for-the-ource-objects पर जोश जाता है http://capnjosh.com/blog/a-client-error-invalidobjectstate-occurred-when-calling-the-copyobject-operation-operation-is-not-valid-for-the-source-objects-storage-class/ , उपर्युक्त समाधानों में से कुछ को आजमाने के बाद मैंने पाया।


एडब्लूएस सीएलआई का उपयोग करने के लिए डस्टिन के उत्तर पर एक भिन्नता, लेकिन त्रुटियों को छोड़ने के लिए sh को रिकर्सन और पाइप का उपयोग करने के लिए (जैसे कि कुछ ऑब्जेक्ट्स पहले से ही पुनर्स्थापित करने का अनुरोध कर चुके हैं ...)

BUCKET=my-bucket
BPATH=/path/in/bucket
DAYS=1
aws s3 ls s3://$BUCKET$BPATH --recursive | awk '{print $4}' | xargs -L 1 \
 echo aws s3api restore-object --restore-request Days=$DAYS \
 --bucket $BUCKET --key | sh

Xargs गूंज बिट "aws s3api पुनर्स्थापना-ऑब्जेक्ट" कमांड की सूची उत्पन्न करता है और उसे पीआईपी करके, आप त्रुटि पर जारी रख सकते हैं।

नोट: उबंटू 14.04 aws-cli पैकेज पुराना है। उपयोग करने के लिए --recursive आपको github के माध्यम से स्थापित करने की आवश्यकता होगी

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


ऐसा लगता है कि एस 3 ब्राउज़र फ़ोल्डर स्तर पर "ग्लेशियर से बहाल" कर सकता है, लेकिन बाल्टी स्तर नहीं। केवल एक चीज है कि आपको प्रो संस्करण खरीदना है। तो सबसे अच्छा समाधान नहीं है।


यदि आप एडब्ल्यूएस सीएलआई उपकरण का उपयोग कर रहे हैं (यह अच्छा है, आपको चाहिए), तो आप इसे इस तरह से कर सकते हैं:

aws s3 ls s3://<bucket_name> | awk '{print $4}' | xargs -L 1 aws s3api restore-object --restore-request Days=<days> --bucket <bucket_name> --key

अपने <bucket_name> बाल्टी नाम के साथ <bucket_name> को बदलें।

<days> को उस <days> की संख्या के साथ बदलें जिसे आप ऑब्जेक्ट को पुनर्स्थापित करना चाहते हैं।


aws cli इंटरफ़ेस का मेरा संस्करण और ग्लेशियर से डेटा को पुनर्स्थापित कैसे करें। मैंने उपर्युक्त उदाहरणों में से कुछ को काम करने के लिए संशोधित किया जब फ़ाइलों को पुनर्स्थापित करने की कुंजी रिक्त स्थान होती है।

# Parameters
BUCKET="my-bucket" # the bucket you want to restore, no s3:// no slashes
BPATH="path/in/bucket/" # the objects prefix you wish to restore (mind the `/`) 
DAYS=1 # For how many days you wish to restore the data.

# Restore the objects
aws s3 ls s3://{BUCKET}/${BPATH} --recursive | \
awk '{out=""; for(i=4;i<=NF;i++){out=out" "$i}; print out}'| \
xargs -I {} aws s3api restore-object --restore-request Days={DAYS} \
--bucket {BUCKET} --key "{}"






amazon-glacier