web-dev-qa-db-fra.com

Comment savoir combien d'objets j'ai stockés dans un compartiment S3?

À moins que quelque chose me manque, il semble qu'aucune des API que j'ai consultées ne vous dise combien d'objets se trouvent dans un compartiment/dossier S3 (préfixe). Est-il possible d'obtenir un compte?

94
fields

Il n'y a pas moyen, sauf si vous 

  1. les lister tous par lots de 1 000 (ce qui peut être lent et consommer beaucoup de bande passante - Amazon ne semble jamais compresser les réponses XML), ou

  2. connectez-vous à votre compte sur S3 et accédez à Compte - Utilisation. Il semble que le service de facturation sache exactement combien d'objets vous avez stockés!

Le téléchargement de la liste de tous vos objets prendra du temps et coûtera de l'argent si vous avez 50 millions d'objets stockés.

Voir également ce fil relatif à StorageObjectCount - qui se trouve dans les données d'utilisation.

Une API S3 pour obtenir au moins les bases, même si elle avait plusieurs heures, serait géniale. 

27
Tom Andersen

Utilisation de l'AWS CLI

aws s3 ls s3://mybucket/ --recursive | wc -l 

ou 

aws cloudwatch get-metric-statistics \
  --namespace AWS/S3 --metric-name NumberOfObjects \
  --dimensions Name=BucketName,Value=BUCKETNAME \
              Name=StorageType,Value=AllStorageTypes \
  --start-time 2016-11-05T00:00 --end-time 2016-11-05T00:10 \
  --period 60 --statistic Average

Remarque: la commande cloudwatch ci-dessus semble fonctionner pour certains mais pas pour d'autres. Discuté ici: https://forums.aws.Amazon.com/thread.jspa?threadID=217050

Utilisation de la console Web AWS

Vous pouvez regarder la section métrique de cloudwatch pour obtenir un nombre approximatif d'objets stockés .  enter image description here

J'ai environ 50 millions de produits et il a fallu plus d'une heure pour compter en utilisant aws s3 ls

181
Mayank Jaiswal

Il existe un commutateur --summarize qui inclut des informations récapitulatives sur le bucket (le nombre d’objets, la taille totale). 

Voici la réponse correcte en utilisant AWS cli:

aws s3 ls s3://bucketName/path/ --recursive --summarize | grep "Total Objects:"

Total Objects: 194273

Voir la documentation

93
advncd

Si vous utilisez l'outil de ligne de commande s3cmd , vous pouvez obtenir une liste récursive d'un compartiment particulier, en le sortant dans un fichier texte. 

s3cmd ls -r s3://logs.mybucket/subfolder/ > listing.txt

Ensuite, sous Linux, vous pouvez exécuter un wc -l sur le fichier pour compter les lignes (1 ligne par objet).

wc -l listing.txt
48
Jim Murphy

Il existe maintenant une solution simple avec l'API S3 (disponible dans AWS cli):

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

ou pour un dossier spécifique:

aws s3api list-objects --bucket BUCKETNAME --prefix "folder/subfolder/" --output json --query "[length(Contents[])]"
41
Raphael

Bien qu'il s'agisse d'une vieille question et que des commentaires aient été fournis en 2015, c'est beaucoup plus simple, car la console Web S3 a activé l'option "Obtenir la taille":

 enter image description here

Ce qui fournit ce qui suit:

 enter image description here

38
gvasquez

Vous pouvez utiliser les métriques AWS cloudwatch pour s3 pour connaître le nombre exact pour chaque compartiment . cloudwatch metric when you select bucket

31
mastaBlasta

Dans s3cmd, exécutez simplement la commande suivante (sur un système Ubuntu):

s3cmd ls -r s3://mybucket | wc -l
6
mjsa

Accédez à AWS Billing, puis aux rapports, puis aux rapports d'utilisation AWS . Sélectionnez Amazon Simple Storage Service, puis Operation StandardStorage . Vous pouvez ensuite télécharger un fichier CSV comprenant un type d'utilisation (StorageType) de StorageObjectCount répertoriant le nombre d'éléments pour chaque compartiment .

5
Kenan

L'API renverra la liste par incréments de 1000. Vérifiez la propriété IsTruncated pour voir s'il en reste encore. Dans ce cas, vous devez passer un autre appel et transmettre la dernière clé que vous avez obtenue en tant que propriété Marker lors du prochain appel. Vous voudriez alors continuer à boucler comme ceci jusqu'à ce que IsTruncated soit à false.

Consultez ce document Amazon pour plus d'informations: Itérer à travers des résultats multi-pages

2
BigJoe714

Vieux fil, mais toujours d'actualité car je cherchais la réponse jusqu'à ce que je sache ce que c'était. Je voulais un nombre de fichiers en utilisant un outil basé sur une interface graphique (c'est-à-dire sans code). Il se trouve que j’utilise déjà un outil appelé 3Hub pour les transferts par glisser-déposer vers et depuis S3. Je voulais savoir combien de fichiers j'avais dans un compartiment particulier (je ne pense pas que la facturation soit ventilée par compartiments). 

So, using 3Hub, 
- list the contents of the bucket (looks basically like a Finder or Explorer window)
- go to the bottom of the list, click 'show all'
- select all (ctrl+a)
- choose copy URLs from right-click menu
- paste the list into a text file (I use TextWrangler for Mac) 
- look at the line count  

J'avais 20521 fichiers dans le seau et fait le compte de fichiers en moins d'une minute.

2
Darby

Vous pouvez facilement obtenir le nombre total et l'historique en accédant à l'onglet "Gestion" de la console s3, puis en cliquant sur "Métriques" ... Capture d'écran de l'onglet

1
Tilan Ukwatta

Aucune des API ne vous donnera de résultat, car aucune API spécifique à Amazon ne permet de le faire. Vous devez simplement exécuter une liste de contenus et compter le nombre de résultats renvoyés.

1
Mitch Dempsey

J'ai utilisé le script python de scalablelogic.com (ajout de la journalisation du nombre). A bien fonctionné.

#!/usr/local/bin/python

import sys

from boto.s3.connection import S3Connection

s3bucket = S3Connection().get_bucket(sys.argv[1])
size = 0
totalCount = 0

for key in s3bucket.list():
    totalCount += 1
    size += key.size

print 'total size:'
print "%.3f GB" % (size*1.0/1024/1024/1024)
print 'total count:'
print totalCount
1
Tayler

Si vous utilisez AWS CLI sous Windows, vous pouvez utiliser le Measure-Object de PowerShell pour obtenir le nombre total de fichiers, tout comme wc -l sur * nix.

PS C:\> aws s3 ls s3://mybucket/ --recursive | Measure-Object

Count    : 25
Average  :
Sum      :
Maximum  :
Minimum  :
Property :

J'espère que ça aide.

0
pdm

Vous pouvez télécharger et installer le navigateur s3 à partir de http://s3browser.com/ . Lorsque vous sélectionnez un compartiment dans le coin central droit, vous pouvez voir le nombre de fichiers qu'il contient. Mais la taille affichée est incorrecte dans la version actuelle. 

Gubs

0
gubs

J'ai trouvé l'outil de navigateur S3 très utilisateur, il fournit des fichiers et des dossiers, ainsi que la taille totale de chaque dossier de manière récursive.

Lien de téléchargement: https://s3browser.com/download.aspx

0
Vishal Zanzrukia

Si vous recherchez des fichiers spécifiques, disons .jpg images, vous pouvez procéder comme suit:

aws s3 ls s3://your_bucket | grep jpg | wc -l
0
tsveti_iko

3Hub n'est plus fabriqué. Il existe une meilleure solution, vous pouvez utiliser Transmettre (Mac uniquement), puis connectez-vous à votre compartiment et choisissez Show Item Count dans le menu View

0
arielcr

Peut aussi être fait avec gsutil du (oui, un outil Google Cloud)

gsutil du s3://mybucket/ | wc -l
0
Ghilas BELHADJ

Qu'en est-il des analyses de classe de stockage S3 - Vous obtenez des API ainsi que sur console - https://docs.aws.Amazon.com/AmazonS3/latest/dev/analytics-storage-class.html

0
Prabhat

A partir de la ligne de commande dans AWS CLI, utilisez ls plus --summarize. Il vous donnera la liste de tous vos articles et le nombre total de documents dans un compartiment particulier. Je n'ai pas essayé cela avec des seaux contenant des sous-seaux:

aws s3 ls "s3://MyBucket" --summarize

Cela prend un peu long (il a fallu environ 4 minutes pour lister mes documents 16 + K), mais c'est plus rapide que de compter 1K à la fois.

0
Ricardo

Vous pouvez simplement exécuter cette commande cli pour obtenir le nombre total de fichiers dans le compartiment ou un dossier spécifique.

Scanner le seau entier

aws s3api list-objects-v2 --bucket testbucket | grep "Key" | wc -l
aws s3api list-objects-v2 --bucket BUCKET_NAME | grep "Key" | wc -l

vous pouvez utiliser cette commande pour obtenir des détails

aws s3api list-objects-v2 --bucket BUCKET_NAME

Analyser un dossier spécifique

aws s3api list-objects-v2 --bucket testbucket --prefix testfolder --start-after testfolder/ | grep "Key" | wc -l

aws s3api list-objects-v2 --bucket BUCKET_NAME --prefix FOLDER_NAME --start-after FOLDER_NAME/ | grep "Key" | wc -l
0
Indunil Asanka

Le moyen le plus simple consiste à utiliser la console du développeur. Par exemple, si vous utilisez Chrome, choisissez Outils de développement et voyez ce qui suit, vous pouvez trouver et compter ou faire des correspondances, comme 280-279 + 1 = 2.

... 

0
zeroc00l