it-swarm.com.de

Wie kann ich die Größe eines Amazon S3-Buckets ermitteln?

Ich möchte die Größe (in Bytes und Anzahl der Elemente) eines Amazon S3-Buckets grafisch darstellen und suche nach einem effizienten Weg, um die Daten abzurufen.

Die Tools s3cmd bieten eine Möglichkeit, die Gesamtdateigröße mit s3cmd du s3://bucket_name Zu ermitteln. Ich mache mir jedoch Sorgen über die Skalierbarkeit, da es so aussieht, als würde es Daten zu jeder Datei abrufen und deren berechnen eigene Summe. Da Amazon Benutzer in GB-Monaten belastet, erscheint es seltsam, dass sie diesen Wert nicht direkt verfügbar machen.

Obwohl Amazon REST API die Anzahl der Elemente in einem Bucket zurückgibt, scheint s3cmd dies nicht offen zu legen. Ich könnte s3cmd ls -r s3://bucket_name | wc -l Aber das scheint ein Hack zu sein.

Die Bibliothek Ruby AWS :: S sah vielversprechend aus, enthält jedoch nur die Anzahl der Bucket-Elemente, nicht die Gesamtgröße des Buckets.

Kennt jemand andere Befehlszeilentools oder Bibliotheken (bevorzugt Perl, PHP, Python oder Ruby), die Möglichkeiten zum Abrufen dieser Daten bieten?

316
Garret Heaton

Die AWS-CLI unterstützt jetzt den Parameter --query, Der einen JMESPath -Ausdruck akzeptiert.

Dies bedeutet, dass Sie die durch list-objects Angegebenen Größenwerte mit sum(Contents[].Size) summieren und wie length(Contents[]) zählen können.

Dies kann mit der offiziellen AWS-CLI wie folgt ausgeführt werden und wurde in Feb 2014 eingeführt

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

Dies kann jetzt trivial nur mit dem offiziellen AWS-Befehlszeilenclient durchgeführt werden:

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

Offizielle Dokumentation

Dies akzeptiert auch Pfadpräfixe, wenn Sie nicht den gesamten Bucket zählen möchten:

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

AWS-Konsole:

Ab 28. Juli 2015 können Sie diese Informationen erhalten über CloudWatch . Wenn Sie eine grafische Benutzeroberfläche wünschen, gehen Sie zu CloudWatch-Konsole : (Wählen Sie Region>) Metriken> S3

AWS CLI-Befehl:

Dies ist viel schneller als einige der anderen hier veröffentlichten Befehle, da nicht die Größe jeder Datei einzeln abgefragt wird, um die Summe zu berechnen.

 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

Wichtig : Sie müssen sowohl StorageType als auch BucketName im Dimensionsargument angeben, sonst erhalten Sie keine Ergebnisse. Alles was Sie ändern müssen, ist das --start-date, --end-time, und Value=toukakoukan.com.


Hier ist ein Bash-Skript, mit dem Sie vermeiden können, --start-date und --end-time manuell.

#!/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
144
Sam Martin

s3cmd kann dies:

s3cmd du s3://bucket-name

108
Stefan Ticu

Wenn Sie ein Nutzungsbericht herunterladen, können Sie die Tageswerte für das Feld TimedStorage-ByteHrs Grafisch darstellen.

Wenn Sie diese Zahl in GiB möchten, teilen Sie sie einfach durch 1024 * 1024 * 1024 * 24 (Das sind GiB-Stunden für einen 24-Stunden-Zyklus). Wenn Sie die Zahl in Bytes möchten, teilen Sie sie einfach durch 24 und zeichnen Sie sie grafisch auf.

22

Verwenden der offiziellen AWS s3-Befehlszeilentools:

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

Dies ist ein besserer Befehl. Fügen Sie einfach die folgenden 3 Parameter hinzu: --summarize --human-readable --recursive nach aws s3 ls. --summarize ist nicht erforderlich, gibt aber einen netten Touch auf die Gesamtgröße.

aws s3 ls s3://bucket/folder --summarize --human-readable --recursive
20
dyltini

s4cmd ist der schnellste Weg, den ich gefunden habe (ein in Python geschriebenes Befehlszeilenprogramm):

pip install s4cmd

So berechnen Sie nun die gesamte Schaufelgröße mit mehreren Gewinden:

s4cmd du -r s3://bucket-name
13
Brent Faust

Sie können das Dienstprogramm s3cmd verwenden, z.

s3cmd du -H s3://Mybucket
97G      s3://Mybucket/
6
user319660

Ich habe die zuvor in diesem Thread aufgeführte S3 REST/Curl API verwendet und dies getan:

<?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
Vic

Wenn Sie also durch die API trollen und dieselben Abfragen abspielen, erzeugt S3 den gesamten Inhalt eines Buckets in einer Anfrage und muss nicht in Verzeichnisse absteigen. Die Ergebnisse erfordern dann nur eine Summierung durch die verschiedenen XML-Elemente und keine wiederholten Aufrufe. Ich habe keinen Beispieleimer mit Tausenden von Elementen, daher weiß ich nicht, wie gut er skaliert werden kann, aber er scheint ziemlich einfach zu sein.

6
Jim Zajkowski

Wenn Sie die Größe von AWS Console erhalten möchten:

  1. Gehen Sie zu S3 und klicken Sie auf den Bucket-Namen
  2. Wählen Sie die Registerkarte "Management"

(enter image description here

  1. Wählen Sie die Registerkarte Metriken

Standardmäßig sollte Speichermetrik des Buckets angezeigt werden

5
Hooman Bahreini

... Ein bisschen spät, aber der beste Weg, den ich gefunden habe, ist die Verwendung der Berichte im AWS-Portal. Ich habe eine PHP -Klasse zum Herunterladen und Parsen der Berichte erstellt. Damit können Sie die Gesamtzahl der Objekte für jeden Bucket, die Gesamtgröße in GB oder Byte-Stunden und mehr abrufen.

Probieren Sie es aus und lassen Sie mich wissen, ob es hilfreich war

AmazonTools

4
Corey Sewell

Ich empfehle die Verwendung des S3-Nutzungsberichts für große Buckets . Siehe mein How To , wie man es erhält. Grundsätzlich müssen Sie Usage herunterladen Melden Sie sich für den S3-Dienst für den letzten Tag mit Timed Storage - Byte Hrs und analysieren Sie ihn, um die Festplattennutzung zu ermitteln.

cat report.csv | awk -F, '{printf "%.2f GB %s %s \n", $7/(1024**3 )/24, $4, $2}' | sort -n
3
Jakub Głazik

In der AWS-Dokumentation erfahren Sie, wie es geht:

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

Dies ist die Ausgabe, die Sie erhalten:

2016-05-17 00:28:14    0 Bytes folder/
2016-05-17 00:30:57    4.7 KiB folder/file.jpg
2016-05-17 00:31:00  108.9 KiB folder/file.png
2016-05-17 00:31:03   43.2 KiB folder/file.jpg
2016-05-17 00:31:08  158.6 KiB folder/file.jpg
2016-05-17 00:31:12   70.6 KiB folder/file.png
2016-05-17 00:43:50   64.1 KiB folder/folder/folder/folder/file.jpg

Total Objects: 7

   Total Size: 450.1 KiB
3
奉太郎折木

Für einen wirklich Low-Tech-Ansatz: Verwenden Sie einen S3-Client, der die Größe für Sie berechnen kann. Ich verwende Panic's Transmit, klicke auf einen Bucket, mache "Get Info" und klicke auf die Schaltfläche "Calculate". Ich bin mir nicht sicher, wie schnell oder genau es im Verhältnis zu anderen Methoden ist, aber es scheint die Größe zurückzugeben, die ich erwartet hatte.

2
zmippie

Da es so viele Antworten gibt, dachte ich, ich würde mit meinen eigenen mithalten. Ich habe meine Implementierung in C # mit LINQPad geschrieben. Kopieren Sie den Zugriffsschlüssel, den geheimen Schlüssel, den Regionsendpunkt und den Bucket-Namen, den Sie abfragen möchten, und fügen Sie ihn ein. Stellen Sie außerdem sicher, dass Sie das AWSSDK-Nuget-Paket hinzufügen.

Beim Testen mit einem meiner Eimer gab es eine Zählung von 128075 und eine Größe von 70,6 GB. Ich weiß, dass das zu 99,9999% genau ist, also bin ich gut mit dem Ergebnis.

void Main() {
    var s3Client = new AmazonS3Client("accessKey", "secretKey", RegionEndpoint.???);
    var stop = false;
    var objectsCount = 0;
    var objectsSize = 0L;
    var nextMarker = string.Empty;

    while (!stop) {
        var response = s3Client.ListObjects(new ListObjectsRequest {
            BucketName = "",
            Marker = nextMarker
        });

        objectsCount += response.S3Objects.Count;
        objectsSize += response.S3Objects.Sum(
            o =>
                o.Size);
        nextMarker = response.NextMarker;
        stop = response.S3Objects.Count < 1000;
    }

    new {
        Count = objectsCount,
        Size = objectsSize.BytesToString()
    }.Dump();
}

static class Int64Extensions {
    public static string BytesToString(
        this long byteCount) {
        if (byteCount == 0) {
            return "0B";
        }

        var suffix = new string[] { "B", "KB", "MB", "GB", "TB", "PB", "EB" };
        var longBytes = Math.Abs(byteCount);
        var place = Convert.ToInt32(Math.Floor(Math.Log(longBytes, 1024)));
        var number = Math.Round(longBytes / Math.Pow(1024, place), 1);

        return string.Format("{0}{1}", Math.Sign(byteCount) * number, suffix[place]);
    }
}
2
Gup3rSuR4c

Sie können s3cmd Verwenden:

s3cmd du s3://Mybucket -H

oder

s3cmd du s3://Mybucket --human-readable

Es gibt die Gesamtzahl der Objekte und die Größe des Eimers in einer sehr lesbaren Form an.

1
bpathak

Versuchen Sie dieses Bash-Skript, um die Größe aller Buckets zu überprüfen

s3list=`aws s3 ls | awk  '{print $3}'`
for s3dir in $s3list
do
    echo $s3dir
    aws s3 ls "s3://$s3dir"  --recursive --human-readable --summarize | grep "Total Size"
done
1
Giulio Roggero

Ich weiß, dass dies eine ältere Frage ist, aber hier ist ein PowerShell-Beispiel:

Get-S3Object -BucketName <buckename> | select key, size | foreach {$A += $_.size}

$A enthält die Größe des Buckets, und es gibt einen Keyname-Parameter, wenn Sie nur die Größe eines bestimmten Ordners in einem Bucket möchten.

1
DCJeff

Ich habe ein Bash-Skript geschrieben, s3-du.sh, das Dateien im Bucket mit s3ls auflistet und die Anzahl der Dateien und Größen wie druckt

s3-du.sh testbucket.jonzobrist.com
149 files in bucket testbucket.jonzobrist.com
11760850920 B
11485205 KB
11216 MB
10 GB

Vollständiges Skript:

#!/bin/bash

if [ “${1}” ]
then
NUM=0
COUNT=0
for N in `s3ls ${1} | awk ‘{print $11}’ | grep [0-9]`
do
NUM=`expr $NUM + $N`
((COUNT++))
done
KB=`expr ${NUM} / 1024`
MB=`expr ${NUM} / 1048576`
GB=`expr ${NUM} / 1073741824`
echo “${COUNT} files in bucket ${1}”
echo “${NUM} B”
echo “${KB} KB”
echo “${MB} MB”
echo “${GB} GB”
else
echo “Usage : ${0} s3-bucket”
exit 1
fi    

Die Größe des Unterverzeichnisses wird festgelegt, da Amazon den Verzeichnisnamen und die Größe des gesamten Inhalts zurückgibt.

0
Jon Zobrist

Mit dem Programm Cloudberry können Sie auch die Größe des Buckets, die Anzahl der Ordner und die Gesamtzahl der Dateien auflisten, indem Sie direkt über dem Bucket auf "Eigenschaften" klicken.

0
KiKo

Auch Hanzo S3 Tools macht das. Nach der Installation können Sie Folgendes tun:

s3ls -s -H bucketname

Ich glaube jedoch, dass dies auch auf der Clientseite summiert und nicht über die AWS-API abgerufen wird.

0
Ville

CloudWatch verfügt jetzt über ein Standard-S3-Service-Dashboard, das es in einem Diagramm mit dem Namen "Bucket Size Bytes Average" auflistet. Ich denke dieser Link wird funktionieren für alle, die bereits bei AWS Console angemeldet sind:

0
flickerfly

Wenn Sie die Befehlszeile unter Windows und OSX nicht verwenden möchten, gibt es eine universelle Remote-Dateiverwaltungs-App namens Cyberduck . Melden Sie sich mit Ihrem Zugriffs-/geheimen Schlüsselpaar bei S3 an, klicken Sie mit der rechten Maustaste auf das Verzeichnis und klicken Sie auf Calculate.

0
jpillora

Hey, es gibt ein Metdatensuchwerkzeug für AWS S3 unter https://s3search.p3-labs.com/ . Dieses Werkzeug gibt Statistiken über Objekte in einem Bucket mit Suche nach Metadaten.

0
pyth