401 votes

Comment puis-je obtenir la taille d'un seau Amazon S3 ?

J'aimerais représenter graphiquement la taille (en octets et en nombre d'éléments) d'un seau Amazon S3 et je cherche un moyen efficace d'obtenir ces données.

El s3cmd fournissent un moyen d'obtenir la taille totale du fichier en utilisant s3cmd du s3://bucket_name mais je m'inquiète de sa capacité à évoluer car il semble qu'il récupère les données de chaque fichier et calcule sa propre somme. Étant donné qu'Amazon facture les utilisateurs en Go-mois, il semble étrange qu'ils n'exposent pas cette valeur directement.

Bien que API REST d'Amazon renvoie le nombre d'éléments dans un seau, s3cmd ne semble pas l'exposer. Je pourrais faire s3cmd ls -r s3://bucket_name | wc -l mais ça ressemble à un piratage.

Le Rubis AWS::S3 semblait prometteuse, mais elle ne fournit que le nombre d'éléments du seau, et non la taille totale du seau.

Quelqu'un connaît-il d'autres outils ou bibliothèques en ligne de commande (de préférence Perl, PHP, Python ou Ruby) qui permettent d'obtenir ces données ?

0 votes

J'ai écrit un outil pour analyser la taille des seaux : github.com/EverythingMe/ncdu-s3

29 votes

Je m'étonne qu'Amazon facture l'espace, mais ne fournisse pas la taille totale occupée par un seau S3 simplement via le panneau S3.

0 votes

Pour moi, la plupart des réponses ci-dessous prenaient un temps assez long pour récupérer la taille du seau, mais ce script en Python était beaucoup plus rapide que la plupart des réponses -. slsmk.com/getting-the-size-of-an-s3-bucket-using-boto3-for-aws

6voto

Vic Points 284

J'ai utilisé le API S3 REST/Curl énuméré plus tôt dans ce fil et a fait ceci :

<?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';
?>

4voto

Jakub Głazik Points 131

Je recommande d'utiliser le rapport d'utilisation S3 pour grands seaux voir mon Comment faire sur la façon de l'obtenir En gros, vous devez télécharger le rapport d'utilisation du service S3 pour le dernier jour avec Timed Storage - Byte Hrs et l'analyser pour obtenir l'utilisation du disque.

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

4voto

奉太郎折木 Points 31

La documentation AWS vous indique comment procéder :

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

Voici le résultat que vous obtenez :

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

4voto

... Un peu tard mais, la meilleure façon que j'ai trouvé est d'utiliser les rapports dans le portail AWS. J'ai créé une classe PHP pour télécharger et analyser les rapports. Avec elle, vous pouvez obtenir le nombre total d'objets pour chaque seau, la taille totale en Go ou en octets et plus encore.

Regardez et dites-moi si cela vous a aidé.

AmazonTools

0 votes

Il s'agit d'une solution intéressante, bien qu'un peu bricolée. Je crains qu'elle ne se brise si/quand Amazon modifie son site, mais il se peut que je doive l'essayer une fois que j'aurai suffisamment d'objets pour que l'autre méthode devienne trop lente. Un autre avantage de cette approche est que vous n'êtes pas facturé pour les appels d'API.

0 votes

. . c'est une supposition mais, si Amazon change l'apparence de son site, je doute qu'ils changent beaucoup le back-end, ce qui signifie que les requêtes GET et POST actuelles devraient fonctionner. Je maintiendrai la classe dans l'éventualité d'une rupture, car je l'utilise souvent.

0 votes

2voto

aminalid Points 666

Pour une approche vraiment low-tech : utilisez un client S3 qui peut calculer la taille pour vous. J'utilise Panic's Transmit, cliquez sur un bucket, faites "Get Info" et cliquez sur le bouton "Calculate". Je ne suis pas sûr de la rapidité ou de la précision de cette méthode par rapport aux autres, mais elle semble rendre la taille que j'attendais.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X