सभी AWS S3 बाल्टियाँ देखें और उपयोग की जाने वाली प्रत्येक बाल्टी भंडारण को सूचीबद्ध करें


11

मेरे पास कई AWS खाते हैं और मुझे प्रत्येक S3 बाल्टी प्रति खाते की सूची बनाने की आवश्यकता है और फिर प्रत्येक बाल्टी को कुल आकार देखें।

वर्तमान में, मैं केवल एक S3 बाल्टी के भंडारण का आकार देख सकता हूं :

aws s3 ls s3://mybucket --recursive --human-readable --summarize

S3 Select को कुछ दिन पहले
रिजेक्ट

आप इस कोड को आजमाना चाहते हैं जो मैंने स्वयं ही प्राप्त करने के लिए लिखा था: github.com/insperitas/s3-data
jimmy978654321

जवाबों:


11

संकल्प १

इसलिए मैंने निम्नलिखित स्क्रिप्ट के साथ इसे हल किया। मैंने मूल रूप से प्रश्न पोस्ट किया था बस एक आसान तरीका था जिसके बारे में मुझे जानकारी नहीं थी।

#!/bin/bash
aws_profile=('profile1' 'profile2' 'profile3');

#loop AWS profiles
for i in "${aws_profile[@]}"; do
  echo "${i}"
  buckets=($(aws --profile "${i}" --region your_region s3 ls s3:// --recursive | awk '{print $3}'))

  #loop S3 buckets
  for j in "${buckets[@]}"; do
  echo "${j}"
  aws --profile "${i}" --region your_region s3 ls s3://"${j}" --recursive --human-readable --summarize | awk END'{print}'
  done

done

संकल्प २

एडब्ल्यूएस कंसोल में क्लाउडवॉच में डैशबोर्ड का उपयोग करना ।

फिर आप सभी S3 बाल्टियाँ निर्दिष्ट कर सकते हैं और स्टोरेज साइज़ मेट्रिक्स दिखाने के लिए संख्या आँकड़े जोड़ सकते हैं।

यह आपको बहुत सारे API कॉल की लागत नहीं देगा और s3 बाल्टियों के आकार के आधार पर काफी तेज हो सकता है (बहुत बड़ी बाल्टियों पर आकार पाने के लिए काफी समय लगता है)।

निर्णय

प्रत्येक एडब्ल्यूएस खाते पर डैशबोर्ड ( रिज़ॉल्यूशन 2 ) बनाना मेरे लिए सबसे कुशल विकल्प था क्योंकि यह मेरे लिए लॉग इन करने के लिए त्वरित तरीके से और प्रत्येक एडब्ल्यूएस खाते से मीट्रिक को हड़पने के लिए स्क्रिप्ट एपीआई कॉल समाप्त होने की प्रतीक्षा करने की तुलना में है। :(


क्यों | awk END'{print}'?
तेंसिबाई

1
पुनरावर्ती विकल्प का उपयोग करना प्रत्येक फ़ोल्डर और फ़ाइल का आकार दिखाता है और मुझे केवल बाल्टी के कुल आकार के आउटपुट की आवश्यकता है।
काइल स्टेंकम्प 15

डैशबोर्ड के लिए आपको कुछ भी प्रदर्शित करने के लिए '1 दिन' या अधिक से अधिक अवधि का चयन करने की आवश्यकता है
जेरेमी लीपज़िग

2
खबरदार कि समाधान 2 में प्रस्तावित समाधान आपकी क्लाउडवॉच की लागत को बढ़ाता है क्योंकि डैशबोर्ड की फिलहाल $ 3 लागत है। aws.amazon.com/cloudwatch/pricing/?nc1=h_ls
Drubio

क्या करता है [@]में "${buckets[@]}"मतलब?
जो

3

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

  1. अपने मूल में सभी खातों की सूची बनाएं और पार्स करें।

    aws organizations list-accounts
    
  2. प्रत्येक खाते के लिए, सभी बकेट की सूची और पार्स करें।

    aws s3api list-buckets --query "Buckets[].Name"
    
  3. अंत में, प्रत्येक खाते के भीतर प्रत्येक बाल्टी का आकार प्राप्त करें। आप उसी क्ली कमांड का उपयोग कर सकते हैं जो आप पहले थे, लेकिन चेतावनी दी जाती है कि आप बाल्टी के भीतर प्रत्येक आइटम के व्यक्तिगत आकार को सूचीबद्ध करने जा रहे हैं। आप बाल्टी आकार प्राप्त करने के लिए इस cli कमांड का उपयोग कर सकते हैं।

    aws s3api list-objects --bucket BUCKETNAME --output json --query "
    [sum(Contents[].Size), length(Contents[])]"
    

1
1. AWS खाते की प्रोफ़ाइल जानकारी को सूचीबद्ध नहीं करता है। मेरे पास यह समय नहीं है कि मैं इस से कॉन्फ़िगर करूँ aws config फाइल जहाँ यह जानकारी संग्रहीत है, इसलिए मैंने अभी लिपि में दिए गए मानों को हार्डकोड किया है
Kyle Steenkamp

2

आप ऐसा करने के लिए एक स्क्रिप्ट लिखने जा रहे हैं जब तक कि ऐसा करने के लिए कोई उपकरण न हो जो मुझे नहीं मिल सकता है।

यदि आप कई aws खाते के साथ काम कर रहे हैं तो आपको बाल्टी के आकार प्राप्त करने के लिए खातों के बीच स्विच करना होगा।

सभी बाल्टी और उनके कुल आकार को पाने के लिए आप ' aws s3api ' का उपयोग कर सकते हैं । उपयोग करने से list-bucketsआप सभी बाल्टियाँ एक खाते में प्राप्त कर सकते हैं और फिर आप उनके आकारों को सूचीबद्ध कर सकेंगे और अगले खाते को आज़मा सकेंगे।


1
मैं boto3 के साथ एक अजगर पटकथा लिखी यह करने के लिए: gist.github.com/rwiggins/b945b5ec1693c1d473a814915adcee8c (ध्यान दें: CloudWatch के GetMetricStatistics का उपयोग करता है एक बाल्टी में सभी वस्तु आकार संक्षेप बिना खींचने के लिए बाल्टी कुशलतापूर्वक आकार /)
रीड

1

यदि संस्करण को चालू किया जाता है तो इनमें से कोई भी बाल्टी का आकार नहीं दिखाता है और भारी मात्रा में डेटा "हटा दिया गया" है। S3 GUI कंसोल में, मेट्रिक्स टैब दिखाता है कि आपके लिए क्या बिल किया जा रहा है।

Https://serverfault.com/questions/84815/how-can-i-get-the-size-of-an-amazon-s3-bucket पर मिली स्क्रिप्ट में से निम्न कमांड को स्क्रैप किया गया । यह विंडोज पर अच्छा काम करता है। स्थानापन्न yourregionऔर yourbucketname:

aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time 2019-05-09T00:01:00Z --end-time 2019-05-11T23:59:00Z --period 86400 --statistics Average --region yourregion --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=yourbucketname Name=StorageType,Value=StandardStorage

यह आरंभ और अंत समय से बंधे दिनों में बाइट्स में औसत आकार देता है। यदि आपकी बाल्टी में संस्करण सक्षम (सक्रिय) है, तो परिणाम आपको झटका दे सकता है और आपको लगता है कि आपने भारी मात्रा में डेटा "डिलीट" कर दिया है।

वर्जन-सक्षम बाल्टियों को साफ करने के लिए, आपको एक जीवन चक्र नियम सेट करना होगा। आप पिछले संस्करणों को स्थायी रूप से हटाने का विकल्प चुन सकते हैं। आप संक्रमण चरणों में चेकबॉक्स को छोड़ सकते हैं।

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