स्वचालित रूप से पूरे S3 बाल्टी के लिए कैश-कंट्रोल सेट करें (बाल्टी नीतियों का उपयोग करते हुए?)


124

मुझे मौजूदा और भविष्य की दोनों फ़ाइलों के लिए पूरे s3 बाल्टी के लिए कैश-कंट्रोल हेडर सेट करने की आवश्यकता है, और यह एक हिरन पॉलिसी में करने की उम्मीद कर रहा था। मुझे पता है कि मैं मौजूदा लोगों को संपादित कर सकता हूं और मुझे पता है कि अगर मैं उन्हें खुद अपलोड करता हूं तो उन्हें कैसे निर्दिष्ट करना है, लेकिन दुर्भाग्य से जो एप्लिकेशन उन्हें अपलोड करता है वह हेडर सेट नहीं कर सकता क्योंकि यह फाइलों को कॉपी करने के लिए s3fs का उपयोग करता है।

जवाबों:


208

अब इसे पूरा करने के 3 तरीके हैं: AWS कंसोल के माध्यम से, कमांड लाइन के माध्यम से , या s3cmd कमांड लाइन टूल के माध्यम से


AWS कंसोल निर्देश

यह अब अनुशंसित समाधान है। यह सीधे आगे है, लेकिन इसमें कुछ समय लग सकता है।

  • AWS प्रबंधन कंसोल में लॉग इन करें
  • S3 बाल्टी में जाएं
  • मार्ग से सभी फ़ाइलों का चयन करें
  • मेनू से "अधिक" चुनें
  • "मेटाडेटा बदलें" चुनें
  • "की" फ़ील्ड में, ड्रॉप-डाउन मेनू से "कैश-कंट्रोल" चुनें अधिकतम आयु = 604800Enter (7 दिन) मान के लिए
  • "सहेजें" बटन दबाएं

( @biplob को धन्यवाद - कृपया उसे नीचे कुछ प्यार दें )


एडब्ल्यूएस कमांड लाइन समाधान

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

नोट: डिफ़ॉल्ट रूप से, aws-cli केवल एक फ़ाइल के वर्तमान मेटाडेटा की प्रतिलिपि बनाता है, EVEN IF आप विशेष रूप से नए मेटाडाटा।

कमांड लाइन पर निर्दिष्ट मेटाडेटा का उपयोग करने के लिए, आपको '--metadata-directive REPLACE' ध्वज जोड़ना होगा। यहाँ कुछ उदाहरण हैं।

एक फाइल के लिए

aws s3 cp s3://mybucket/file.txt s3://mybucket/file.txt --metadata-directive REPLACE \
--expires 2034-01-01T00:00:00Z --acl public-read --cache-control max-age=2592000,public

एक पूरी बाल्टी के लिए (नोट - व्यापक ध्वज):

aws s3 cp s3://mybucket/ s3://mybucket/ --recursive --metadata-directive REPLACE \
--expires 2034-01-01T00:00:00Z --acl public-read --cache-control max-age=2592000,public

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

केवल jpgs और pngs:

aws s3 cp s3://mybucket/ s3://mybucket/ --exclude "*" --include "*.jpg" --include "*.png" \
--recursive --metadata-directive REPLACE --expires 2034-01-01T00:00:00Z --acl public-read \
--cache-control max-age=2592000,public

यदि आपको अधिक जानकारी की आवश्यकता है, तो यहां मैनुअल के कुछ लिंक दिए गए हैं:

ज्ञात पहलु:

"Unknown options: --metadata-directive, REPLACE"

यह आउट ऑफ डेट awscli के कारण हो सकता है - नीचे @ eliotRosewater का उत्तर देखें


S3cmd टूल

S3cmd "Amazon S3 और CloudFront सेवाओं के प्रबंधन के लिए कमांड लाइन टूल" है। जबकि इस समाधान के लिए एक जिट पुल की आवश्यकता होती है यह एक सरल और अधिक व्यापक समाधान हो सकता है।

पूर्ण निर्देशों के लिए, @ ashishyadaveee11 का पोस्ट नीचे देखें


आशा करता हूँ की ये काम करेगा!


6
वास्तव में क्या करना है, इसके वास्तविक उदाहरणों के लिए धन्यवाद। मुझे यह पता लगाने में कठिनाई हो रही थी कि केवल डॉक्स पढ़ने से क्या संभव था।
दिनु

2
जब मैं उपरोक्त कमांड में से किसी को भी चला रहा हूं तो मुझे "अज्ञात विकल्प: --metadata-directive, REPLACE" मिल रहा है। कृपया मेरी मदद करें।
user3722785

1
ध्यान दें, अब एक आसान रास्ता है। अब आप AWS कंसोल के माध्यम से एक बाल्टी में सभी फ़ाइलों के लिए मेटा डेटा बदल सकते हैं। नीचे कोडरबॉय का उत्तर देखें: stackoverflow.com/a/47072736/2538952
मार्टिन Tschammer

1
नोट करें कि --meta-directive REPLACE का उपयोग करने से किसी भी पिछले मेटाडेटा को अधिलेखित कर दिया जाएगा जो कमांड में कॉपी नहीं किया गया है! उदाहरण के लिए "सामग्री-एन्कोडिंग gzip" को हटा दिया जाएगा जब स्पष्ट रूप से cp कमांड में नहीं जोड़ा जाएगा।
हरमेन जानसेन

1
क्या cpडाउनलोड और सब कुछ फिर से अपलोड करता है?
mlissner

37

अब, यह AWS कंसोल से आसानी से बदल सकता है।

  • AWS प्रबंधन कंसोल में लॉग इन करें
  • S3 बाल्टी में जाएं
  • मार्ग से सभी फ़ाइलों का चयन करें
  • मेनू से "अधिक" चुनें
  • "मेटाडेटा बदलें" चुनें
  • "कुंजी" फ़ील्ड में, ड्रॉप डाउन मेनू से "कैश-कंट्रोल" चुनें
  • मान के लिए अधिकतम आयु = 604800Enter (7 दिन)
  • "सहेजें" बटन दबाएं

इसे निष्पादित करने में समय लगता है यह आपकी बाल्टी फाइलों पर निर्भर करता है। यदि आप गलती से ब्राउज़र बंद कर देते हैं तो शुरुआत से ही Redo करें।


6
"मार्ग से सभी फ़ाइलों का चयन करें" क्या मतलब है?
तामज़िन ब्लेक

1
उस निर्देशिका से सभी / कुछ फ़ाइलों का चयन करें जिसे आप मेटा
बिप्लोब

देर से उत्तर के लिए क्षमा करें। नहीं, यह नहीं है। आपको इसे अपने एप्लिकेशन से सेट करना चाहिए।
बिप्लोब

क्या यह पिछले मेटाडेटा को प्रतिस्थापित करता है या इसे जोड़ता है? (मैं अपने सभी सामग्री प्रकारों को खोना नहीं चाहता!)
क्रिस

मैंने अभी पुष्टि की है कि यह मौजूदा मूल्यों को नहीं हटाता है। केवल आपके द्वारा निर्दिष्ट कीज़ को सेट करता है (यदि यह मौजूद है तो ओवरराइटिंग कुंजी)
रिनोप

21

कदम

  1. git clone https://github.com/s3tools/s3cmd
  2. भागो s3cmd --configure (आपको दो कुंजी के लिए कहा जाएगा - कॉपी करें और उन्हें अपने पुष्टिकरण ईमेल या अपने अमेज़ॅन खाता पृष्ठ से पेस्ट करें। उन्हें कॉपी करने से सावधान रहें! वे संवेदनशील हैं और सही दर्ज किए जाने चाहिए या आप अमान्य के बारे में त्रुटियां प्राप्त करते रहेंगे! हस्ताक्षर या समान। s3:ListAllMyBucketsकुंजियों के लिए अनुमतियाँ जोड़ना याद रखें या AccessDeniedपहुँच का परीक्षण करते समय आपको एक त्रुटि मिलेगी ।)
  3. ./s3cmd --recursive modify --add-header="Cache-Control:public ,max-age= 31536000" s3://your_bucket_name/

सुपर जवाब। धन्यवाद! वहाँ केवल उन लोगों को अद्यतन करने का एक तरीका है जिनके पास पहले से यह हेडर सेटिंग नहीं है?
PKHunter

किसी को भी खिड़की के S3Express के साथ उपयोग के लिए एक समान समाधान है?
जो

12

क्या यह था कि मेरा प्रतिष्ठा स्कोर> 50 था, मैं सिर्फ टिप्पणी करूंगा। लेकिन यह (अभी तक) नहीं है इसलिए यहां एक और पूर्ण उत्तर है।


मैं थोड़ी देर के लिए इस समस्या पर अपना सिर पीट रहा हूं। जब तक मैंने डॉक्स नहीं पाया और पढ़ा। इस मामले में यहां साझा करना किसी और की मदद करता है:

मेरे लिए मज़बूती से काम करना समाप्त हो गया। अपेक्षित परिणामों को सत्यापित करने के लिए मैंने परीक्षण के लिए 1 सेकंड का समय समाप्त किया:

aws s3 cp \
  --metadata-directive REPLACE \
  --cache-control max-age=1,s-maxage=1 \
  s3://bucket/path/file \
  s3://bucket/path/file
  • --metadata-directive REPLACEcpS3 में मौजूदा फाइल पर मेटाडेटा को संशोधित करते समय " " आवश्यक है
  • max-age ब्राउज़र कैशिंग उम्र, सेकंड में सेट करता है
  • s-maxage CloudFront कैशिंग सेट, सेकंड में

इसी तरह, यदि S3 में अपलोड करते समय किसी फ़ाइल पर इन कैश-कंट्रोल हैडर मान सेट करते हैं, तो कमांड इस तरह दिखाई देगी:

aws s3 cp \
  --cache-control max-age=1,s-maxage=1 \
  /local/path/file \
  s3://bucket/path/file

8

मुझे नहीं लगता कि आप इसे बकेट स्तर पर निर्दिष्ट कर सकते हैं लेकिन आपके लिए कुछ वर्कअराउंड हैं।

  1. कॉपीcache-control ऑपरेशन के लिए उपयुक्त हेडर सेट करके S3 पर ऑब्जेक्ट को स्वयं कॉपी करें।

  2. फ़ाइलों में url में प्रतिक्रिया शीर्ष लेख निर्दिष्ट करें । आपको काम करने के लिए पूर्व-हस्ताक्षरित url का उपयोग करने की आवश्यकता है, लेकिन आप सहित cache-controlऔर क्लेरिस्ट्रिंग में कुछ निश्चित प्रतिक्रिया हेडर निर्दिष्ट कर सकते हैं expires। उपलब्ध विकल्पों की पूरी सूची के लिए देखें: http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGET.html?r=5225


धन्यवाद ज्योफ, मैं (1) के बारे में जानता था, लेकिन (2) नहीं। वह नहीं जिसकी मुझे उम्मीद थी (हालाँकि मुझे डर है कि यह संभव नहीं है)
thattommyhall

क्या आपके पास # 1 करने के लिए AWS CLI कमांड का उदाहरण है? docs.aws.amazon.com/cli/latest/reference/s3/cp.html
dpegasusm

3

आप हमेशा S3 पर PUTOBJECT पर एक ट्रिगर के साथ एक लैम्ब्डा को कॉन्फ़िगर कर सकते हैं, लैम्ब्डा बस इस विशेष ऑब्जेक्ट के हेडर को बदल देगा जो अभी डाला गया था।

फिर आप पिछली बार ऊपर बताई गई कॉपी कमांड को चला सकते हैं, और सभी नई वस्तुओं को लंबोदर द्वारा तय किया जाएगा।

अपडेट करें:

यहाँ से शुरू करने के लिए एक अच्छी जगह है: https://www.aaronfagan.ca/blog/2017/how-to-configure-aws-lambda-to-automatically-set-cache-control-headers-on-n3-objects /


क्या आप इस लांबा को बनाने के बारे में कुछ और जानकारी दे सकते हैं? एक महान समाधान की तरह लगता है।
राउटर

1
@ राउटर यकीन है, मैंने आपको एक लिंक दिया है जो वास्तव में आपको आसानी से वहां पहुंचने में मदद कर सकता है, aaronfagan.ca/blog/2017/… यदि आपको किसी भी सहायता या समर्थन की आवश्यकता है तो मैं मदद करने के लिए खुश हूं।
इब्राहिम बू नेकौला

मुझे पता है कि यह पुराना है, लेकिन मुझे यह संसाधन मिला है कि मैं जो खोज रहा था उसके लिए उपयोगी है। इसके लिए शुक्रिया। आप के लिए upvotes मेरे दोस्त!
कास्टेवेद

1

दान के उत्तर का उपयोग करने और त्रुटि प्राप्त करने का प्रयास करने वालों के लिए:

"अज्ञात विकल्प: --मेटाडाटा-निर्देश, उत्तर"

मैं इस मुद्दे पर भाग गया, और समस्या यह थी कि मैंने प्रयोग करके अर्सकली को स्थापित किया

sudo apt-get install अर्सकली

यह अर्सकली का एक पुराना संस्करण स्थापित करता है जो कि --मेटाडाटा-निर्देश कमांड को याद कर रहा है। इसलिए मैंने इसे हटाने के लिए सुडोल एप्ट-गेट रिमूव अर्सकली का इस्तेमाल किया।

फिर अमेज़न से प्रक्रिया का पालन करके पुनः स्थापित किया गया: http://docs.aws.amazon.com/streams/latest/dev/kinesis-tutorial-cli-installation.html

अंतर केवल इतना है कि मुझे अनुमति मुद्दों के कारण sudo -H का उपयोग करना पड़ा, जो अन्य लोग भी चला सकते हैं।

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