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

504voto

rob Points 1459

Cela peut maintenant être fait de manière triviale avec le client de ligne de commande officiel d'AWS :

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

Documentation officielle : Référence des commandes de l'AWS CLI (version 2)

Ceci accepte également les préfixes de chemin si vous ne voulez pas compter le seau entier :

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

32 votes

C'est la meilleure et la plus récente des réponses

4 votes

D'accord, c'est la meilleure réponse.

48 votes

Cette méthode est très lente pour les seaux contenant de nombreux fichiers, car elle liste tous les objets du seau avant d'afficher le résumé, et en cela elle n'est pas significativement plus rapide que la réponse de @Christopher Hackett - sauf que celle-ci est beaucoup plus bruyante.

223voto

Christopher Hackett Points 2229

L'AWS CLI prend désormais en charge l'option --query qui prend un JMESPath expressions.

Cela signifie que vous pouvez additionner les valeurs de taille données par list-objects en utilisant sum(Contents[].Size) et compter comme length(Contents[]) .

Cette opération peut être exécutée à l'aide de l'interface CLI officielle d'AWS comme indiqué ci-dessous et a été introduite dans Fév 2014

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

41 votes

Pour les grandes quantités (grands #fichiers), c'est atrocement lent. L'utilitaire Python s4cmd "du" est rapide comme l'éclair : s4cmd du s3://bucket-name

0 votes

C'est étrange. Quel est le profil général de votre seau (peu profond et gras / profond et mince) ? Il ressemble à s3cmd devrait avoir les mêmes frais généraux que AWS CLI . Dans le code il montre s3cmd faire une demande pour chaque répertoire dans un seau.

34 votes

Pour l'obtenir dans un format lisible par l'homme : 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"}'

187voto

Sam Martin Points 1934

Console AWS :

A partir de 28 juillet 2015 vous pouvez obtenir ces informations via CloudWatch . Si vous voulez une interface graphique, allez à l'adresse suivante Console CloudWatch : (Choisir la région > ) Métriques > S3

Commande CLI AWS :

Cette commande est beaucoup plus rapide que certaines des autres commandes affichées ici, car elle ne demande pas la taille de chaque fichier individuellement pour calculer la somme.

 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

Important : Vous devez spécifier à la fois StorageType et BucketName dans l'argument dimensions, sinon vous n'obtiendrez aucun résultat. Tout ce que vous devez changer est l'argument --start-date , --end-time y Value=toukakoukan.com .


Voici un bash script que vous pouvez utiliser pour éviter d'avoir à spécifier --start-date y --end-time manuellement.

#!/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

27 votes

Ou dans la console CloudWatch (Choisir la région > ) Métriques > S3

4 votes

C'est de loin la solution la plus simple et la plus rapide. Malheureusement, la réponse n'arrive qu'en quatrième position.

0 votes

Cela a fonctionné pour mon seau de plus de 10 millions d'objets. Mais le bash script n'a rien retourné, il a fallu passer par l'interface graphique).

109voto

Stefan Ticu Points 1209

s3cmd peut le faire :

s3cmd du s3://bucket-name

1 votes

Merci. Voici un peu de temps. Sur un seau qui contient un système de fichiers dédupliqué s3ql avec environ un million de fichiers utilisant environ 33 Go de données non dédupliquées, et environ 93000 objets s3, s3cmd du a pris environ 4 minutes pour calculer la réponse. Je suis curieux de savoir comment cela se compare avec d'autres approches comme celle de php décrite ailleurs ici.

2 votes

Il est lent parce que le Appel API S3 ListObjects renvoie les objets par pages de 1000 objets. Comme les E/S sont de loin le facteur limitant, je pense que toute solution sera relativement lente au-delà de 93 000 objets.

13 votes

s4cmd peut également faire la même chose, avec l'avantage supplémentaire de multithreader les requêtes à l'API de S3 pour calculer le résultat plus rapidement. L'outil n'a pas été mis à jour récemment, mais le passant sur Internet peut le trouver utile.

30voto

Hooman Bahreini Points 446

Si vous voulez obtenir la taille à partir de l'AWS Console :

  1. Allez sur S3 et sélectionnez le godet
  2. Cliquez sur l'onglet "Métriques".

enter image description here

Par défaut, vous devriez voir Taille totale du seau métriques sur le dessus

0 votes

Dans le graphique, je n'ai rien vu. Ce n'est que lorsque j'ai passé ma souris sur le graphique que j'ai vu apparaître des points indiquant le total quotidien.

0 votes

Cette réponse doit être mise à jour. Il existe désormais un onglet Métriques qui contient les informations (distinct de l'onglet Gestion).

0 votes

@DaveMoten : merci, mise à jour.

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