सवाल मैं एक अमेज़ॅन एस 3 बाल्टी का आकार कैसे प्राप्त कर सकता हूं?


मैं एक अमेज़ॅन एस 3 बाल्टी के आकार (बाइट्स और # आइटमों में) ग्राफ करना चाहता हूं और डेटा प्राप्त करने के लिए एक कुशल तरीका ढूंढ रहा हूं।

s3cmd उपकरण का उपयोग कर कुल फ़ाइल आकार प्राप्त करने का एक तरीका प्रदान करते हैं s3cmd du s3://bucket_name, लेकिन मैं स्केल करने की अपनी क्षमता के बारे में चिंतित हूं क्योंकि ऐसा लगता है कि यह प्रत्येक फ़ाइल के बारे में डेटा प्राप्त करता है और इसकी अपनी राशि की गणना करता है। चूंकि अमेज़ॅन जीबी-महीनों में उपयोगकर्ताओं को चार्ज करता है, ऐसा लगता है कि वे इस मूल्य का खुलासा नहीं करते हैं।

हालांकि अमेज़ॅन की आरईएसटी एपीआई एक बाल्टी में वस्तुओं की संख्या देता है, s3cmd ऐसा प्रतीत नहीं होता है। मैं कर सकता था s3cmd ls -r s3://bucket_name | wc -l लेकिन यह एक हैक की तरह लगता है।

रुबी एडब्ल्यूएस :: S3 पुस्तकालय आशाजनक लग रहा था, लेकिन केवल बाल्टी वस्तुओं की # प्रदान करता है, कुल बाल्टी आकार नहीं।

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


248
2017-11-15 00:40


मूल


मैंने बाल्टी आकार का विश्लेषण करने के लिए एक उपकरण लिखा: github.com/EverythingMe/ncdu-s3 - omribahumi
मुझे आश्चर्य है कि अमेज़ॅन अंतरिक्ष के लिए चार्ज करता है, लेकिन एस 3 पैनल के माध्यम से बस एस 3 बाल्टी द्वारा उठाए गए कुल आकार को प्रदान नहीं करता है। - Luke
मेरे लिए नीचे दिए गए अधिकांश उत्तरों में बाल्टी आकार को पुनः प्राप्त करने में काफी समय लगा, हालांकि इस पायथन लिपि अधिकांश उत्तरों की तुलना में तेज़ी से तेज थी - slsmk.com/getting-the-size-of-an-s3-bucket-using-boto3-for-aws - Vaulstein


जवाब:


एडब्ल्यूएस सीएलआई अब समर्थन करता है --query पैरामीटर जो एक लेता है JMESPath भाव।

इसका मतलब है कि आप दिए गए आकार मानों को जोड़ सकते हैं list-objects का उपयोग करते हुए sum(Contents[].Size) और गिनती है length(Contents[])

इसे नीचे आधिकारिक एडब्ल्यूएस सीएलआई का उपयोग करके चलाया जा सकता है और इसमें पेश किया गया था फरवरी 2014

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

146
2017-11-16 23:00



बड़ी बाल्टी (बड़ी # फाइलें) के लिए, यह बेहद धीमी है। पाइथन उपयोगिता s4cmd "du" बिजली तेज है: s4cmd du s3://bucket-name - Brent Faust
वह अजीब है। आपकी बाल्टी (उथले और वसा / गहरे और पतले) की समग्र प्रोफ़ाइल क्या है? ऐसा लग रहा है s3cmd के रूप में एक ही ओवरहेड होना चाहिए AWS CLI। में कोड यह दिखाता है  s3cmd एक बाल्टी में प्रत्येक निर्देशिका के लिए एक अनुरोध करें। - Christopher Hackett
इसे मानव पठनीय प्रारूप में प्राप्त करने के लिए: aws s3api --profile PROFILE_NAME list-objects --bucket BUCKET_NAME --output json --query "[sum(Contents[].Size), length(Contents[])]" | awk 'NR!=2 {print $0;next} NR==2 {print $0/1024/1024/1024" GB"}' - Sandeep
अब एडब्लूएस क्लाउडवॉच प्रति बैकेट मीट्रिक "बकेटसाइजबाइट्स" प्रदान करता है, यह अब सही समाधान नहीं है। नीचे Toukakoukan का जवाब देखें। - cce
s4cmd du अद्भुत है, धन्यवाद @ ब्रेंट फॉस्ट! छोटा नोट (उन संबंधित लोगों के लिए) जिन्हें आपको जोड़ने की आवश्यकता है -r उप-निर्देशिकाओं के आकार भी प्राप्त करने के लिए। - Greg Sadetsky


यह अब आधिकारिक एडब्ल्यूएस कमांड लाइन क्लाइंट के साथ तुच्छ रूप से किया जा सकता है:

aws s3 ls --summarize --human-readable --recursive s3://bucket-name/

आधिकारिक दस्तावेज

यदि आप पूरी बाल्टी गिनना नहीं चाहते हैं तो यह पथ उपसर्ग भी स्वीकार करता है:

aws s3 ls --summarize --human-readable --recursive s3://bucket-name/directory

254
2017-09-09 14:04



यह सबसे अच्छा और अद्यतित उत्तर है - Tim
सहमत हैं, यह सबसे अच्छा जवाब है। - Luis Artola
यह कई फाइलों के साथ बाल्टी के लिए बहुत धीमी है क्योंकि यह मूल रूप से सारांश दिखाने से पहले बाल्टी में सभी वस्तुओं को सूचीबद्ध करता है, और इसमें यह @ क्रिस्टोफर हैकेट के उत्तर से काफी तेज़ नहीं है - सिवाय इसके कि यह बहुत अधिक शोर है। - Guss
विलंबता को बेहतर बनाने के लिए एक ही बाल्टी के क्षेत्र के साथ एक ईसी 2 उदाहरण पर चलाएं - juanmirocks
यदि आप केवल सारांश आकार में रूचि रखते हैं, तो यह सबसे तेज़ और अद्यतित समाधान है और आप उस मूल्य को खोजने के लिए पूंछ के माध्यम से बस पाइप कर सकते हैं। - Charlie Hileman


एडब्ल्यूएस कंसोल:

के रूप में 28 जुलाई 2015 आप यह जानकारी प्राप्त कर सकते हैं क्लाउडवॉच के माध्यम से। यदि आप एक जीयूआई चाहते हैं, तो जाओ क्लाउडवॉच कंसोल: (क्षेत्र चुनें>) मेट्रिक्स> एस 3

एडब्ल्यूएस सीएलआई कमांड:

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

 aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time 2015-07-15T10:00:00 --end-time 2015-07-31T01:00:00 --period 86400 --statistics Average --region eu-west-1 --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=toukakoukan.com Name=StorageType,Value=StandardStorage

जरूरी: आपको आयाम तर्क में स्टोरेज टाइप और बकेट नाम दोनों निर्दिष्ट करना होगा अन्यथा आपको कोई परिणाम नहीं मिलेगा। आपको बस बदलने की जरूरत है --start-date, --end-time, तथा Value=toukakoukan.com


यहां एक बैश स्क्रिप्ट है जिसका उपयोग आप निर्दिष्ट करने से बचने के लिए कर सकते हैं --start-date तथा --end-time मैन्युअल रूप से।

#!/bin/bash
bucket=$1
region=$2
now=$(date +%s)
aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time "$(echo "$now - 86400" | bc)" --end-time "$now" --period 86400 --statistics Average --region $region --metric-name BucketSizeBytes --dimensions Name=BucketName,Value="$bucket" Name=StorageType,Value=StandardStorage

104
2017-07-31 21:58



या अंदर क्लाउडवॉच कंसोल: (क्षेत्र चुनें>) मेट्रिक्स> एस 3 - Halil Özgür
यह अब तक का सबसे आसान और तेज़ समाधान है। दुर्भाग्यवश उत्तर अभी भी चौथे स्थान पर है। - luk2302
यह मेरी बाल्टी के लिए 10 मिलियन + वस्तुओं के साथ काम किया। लेकिन बैश लिपि ने कुछ भी वापस नहीं किया, जीयूआई में जाना पड़ा)। - Petah
यह भी ध्यान दिया जाना चाहिए कि आपको क्षेत्र को भी बदलना होगा - majikman
2018 हो सकता है: स्क्रिप्ट त्रुटियों के साथ Invalid value ('1525354418') for param timestamp:StartTime of type timestamp - anneb


s3cmd यह कर सकता है :

s3cmd du s3://bucket-name


103
2017-07-08 13:40



धन्यवाद। यहां कुछ समय है। एक बाल्टी पर जिसमें लगभग 33 जीबी अनपेक्षित डेटा का उपयोग करके लगभग दस लाख फाइलों के साथ एक sqq deduplicated फाइल सिस्टम है, और लगभग 93000 एस 3 ऑब्जेक्ट्स, s3cmd du ने उत्तर की गणना करने में लगभग 4 मिनट लगते हैं। मुझे यह जानकर उत्सुकता है कि यह अन्य दृष्टिकोणों की तुलना में कैसे तुलना करता है जैसे कि यहां किसी अन्य जगह का वर्णन किया गया है। - nealmcb
यह धीमा है क्योंकि एस 3 ListObjects एपीआई कॉल 1000 वस्तुओं के पृष्ठों में वस्तुएं देता है। चूंकि I / O अब तक सीमित कारक है, मुझे लगता है कि कोई समाधान 93000 वस्तुओं से अपेक्षाकृत धीमा होगा। - David Snabel-Caunt
s4cmd परिणाम को तेजी से गणना करने के लिए एस 3 के एपीआई के अनुरोधों को बहु-थ्रेडिंग के अतिरिक्त लाभ के साथ भी वही काम कर सकते हैं। उपकरण हाल ही में अपडेट नहीं किया गया है, लेकिन इंटरनेट पासर द्वारा इसे उपयोगी पाया जा सकता है। - Nick Chammas
s4cmd सिर्फ मेरे लिए 0 देता है, और रिटर्न BotoClientError: Bucket names cannot contain upper-case characters when using either the sub-domain or virtual hosting calling format. अपरकेस वर्णों के साथ बाल्टी के लिए। - Lakitu


यदि आप एक डाउनलोड करते हैं उपयोग रिपोर्ट, आप दैनिक मूल्यों को ग्राफ कर सकते हैं TimedStorage-ByteHrs खेत।

यदि आप जीआईबी में उस नंबर को चाहते हैं, तो बस विभाजित करें 1024 * 1024 * 1024 * 24 (यह 24 घंटे के चक्र के लिए जीआईबी-घंटे है)। यदि आप बाइट्स में संख्या चाहते हैं, तो बस 24 से विभाजित करें और दूर ग्राफ करें।


22
2017-12-05 17:22





आधिकारिक एडब्ल्यूएस एस 3 कमांड लाइन टूल्स का उपयोग करना:

aws s3 ls s3://bucket/folder --recursive | awk 'BEGIN {total=0}{total+=$3}END{print total/1024/1024" MB"}'

16
2018-04-23 11:22



जहां अमेज़ॅन वास्तव में यह कहता है, उस लिंक को प्रदान करें। मुझे यह नहीं मिल रहा है। - lobi
docs.aws.amazon.com/cli/latest/index.html - dyltini
docs.aws.amazon.com/cli/latest/reference/s3/ls.html एक बेहतर लिंक है - Ian Bamforth
इस जवाब ने मेरे लिए सबसे अच्छा और सबसे तेज़ काम किया। - Miro
सबसे अच्छा और सबसे तेज़ जवाब! - PlagTag


s4cmd मुझे सबसे तेज़ तरीका मिला है (पाइथन में लिखी गई एक कमांड लाइन उपयोगिता):

pip install s4cmd

अब एकाधिक थ्रेड का उपयोग कर पूरे बाल्टी आकार की गणना करने के लिए:

s4cmd du -r s3://bucket-name

10
2018-03-31 22:12



नहीं, s4cmd du s3://123123drink बाल्टी के आकार को वापस नहीं करेगा। बाल्टी का आकार प्राप्त करने के लिए आप रिकर्सिव जोड़ते हैं -r, इस तरह: s4cmd du -r s3: // 123123drink - George Chalhoub
हाँ, अच्छा बिंदु @ बुकलाउ (जोड़ा गया -r जब लोग एस 3 पर नकली फ़ोल्डर्स का उपयोग कर रहे हों तो भ्रम से बचने के लिए ऊपर उदाहरण के लिए)। - Brent Faust


मैंने इस्तेमाल किया एस 3 आरईएसटी / कर्ल एपीआई इस धागे में पहले सूचीबद्ध और यह किया था:

<?php
if (!class_exists('S3')) require_once 'S3.php';

// Instantiate the class
$s3 = new S3('accessKeyId', 'secretAccessKey');
S3::$useSSL = false;

// List your buckets:
echo "S3::listBuckets(): ";
echo '<pre>' . print_r($s3->listBuckets(), 1). '</pre>';

$totalSize = 0;
$objects = $s3->getBucket('name-of-your-bucket');
foreach ($objects as $name => $val) {
    // If you want to get the size of a particular directory, you can do
    // only that.
    // if (strpos($name, 'directory/sub-directory') !== false)
    $totalSize += $val['size'];
}

echo ($totalSize / 1024 / 1024 / 1024) . ' GB';
?>

6
2017-12-12 19:05





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


4
2017-11-15 04:00



यह सबसे अच्छा विकल्प प्रतीत होता है। भविष्य में इस पोस्ट को अपडेट करेगा यदि यह खराब तरीके से स्केल करता है और मुझे कुछ और करने की ज़रूरत है। कच्ची एपीआई परिणामों तक आसान पहुंच प्रदान करने वाली लाइब्रेरी यह PHP थी: undesigned.org.za/2007/10/22/amazon-s3-php-class - Garret Heaton
क्या यह केवल पहले 1000 वस्तुओं तक ही सीमित नहीं है? - Charlie Schliesser


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

इसे जांचें और मददगार होने पर मुझे बताएं

AmazonTools


4
2017-12-20 22:56



यह एक दिलचस्प समाधान है, हालांकि थोड़ा हैकिश। अगर अमेज़ॅन अपनी साइट बदलता है तो इसे तोड़ने के बारे में चिंतित है, लेकिन मेरे पास पर्याप्त ऑब्जेक्ट होने के बाद इसे आजमा सकते हैं कि दूसरा तरीका बहुत धीमा हो जाता है। इस दृष्टिकोण का एक अन्य लाभ यह है कि आप किसी भी एपीआई कॉल के लिए शुल्क नहीं लेते हैं। - Garret Heaton
। । । इसकी धारणा है, लेकिन अगर अमेज़ॅन अपनी साइट के स्वरूप को बदलता है, तो मुझे संदेह है कि वे पीछे की ओर बहुत अधिक बदलाव करेंगे, जिसका अर्थ है कि वर्तमान जीईटी और पोस्ट प्रश्नों को काम करना चाहिए। जब भी मैं इसे अक्सर इस्तेमाल करता हूं, वैसे भी मैं इस वर्ग को कक्षा में बनाए रखूंगा।