201 votes

Comment puis-je savoir combien d'objets j'ai stockés dans un panier S3 ?

À moins que quelque chose ne m'échappe, il semble qu'aucune des API que j'ai examinées ne permette de savoir combien d'objets se trouvent dans un fichier <S3 bucket>/<folder> . Existe-t-il un moyen d'obtenir un décompte ?

2voto

Darby Points 48

Je cherche la réponse à cette question, mais je viens de la trouver. Je voulais compter les fichiers en utilisant un outil basé sur l'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 depuis et vers S3. Je voulais savoir combien de fichiers j'avais dans un seau particulier (Je ne pense pas que la facturation soit ventilée par seaux).

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 j'ai fait le décompte des fichiers en moins d'une minute.

2voto

Tayler Points 434

J'ai utilisé le script python script de scalablelogic.com (en ajoutant l'enregistrement du comptage). Cela a très 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

2voto

55 Cancri Points 383

Le problème mentionné par @Mayank Jaiswal concernant l'utilisation des métriques cloudwatch ne devrait pas être un problème. Si vous n'obtenez pas de résultats, c'est que votre plage n'est peut-être pas assez large. Nous sommes le 3 novembre et je n'ai pas obtenu de résultats quoi que j'aie essayé. Je suis allé dans le seau s3 et j'ai regardé les comptes et le dernier enregistrement pour le compte "Nombre total d'objets" était le 1er novembre.

Voici donc à quoi ressemble la solution cloudwatch en utilisant javascript aws-sdk :

import aws from 'aws-sdk';
import { startOfMonth } from 'date-fns';

const region = 'us-east-1';
const profile = 'default';
const credentials = new aws.SharedIniFileCredentials({ profile });
aws.config.update({ region, credentials });

export const main = async () => {
  const cw = new aws.CloudWatch();
  const bucket_name = 'MY_BUCKET_NAME';

  const end = new Date();
  const start = startOfMonth(end);

  const results = await cw
    .getMetricStatistics({
      // @ts-ignore
      Namespace: 'AWS/S3',
      MetricName: 'NumberOfObjects',
      Period: 3600 * 24,
      StartTime: start.toISOString(),
      EndTime: end.toISOString(),
      Statistics: ['Average'],
      Dimensions: [
        { Name: 'BucketName', Value: bucket_name },
        { Name: 'StorageType', Value: 'AllStorageTypes' },
      ],
      Unit: 'Count',
    })
    .promise();

  console.log({ results });
};

main()
  .then(() => console.log('Done.'))
  .catch((err) => console.error(err));

Remarquez deux choses :

  1. Le début de la plage est fixé au début du mois.
  2. La période est fixée à un jour. Si elle est inférieure, vous risquez d'obtenir un message d'erreur indiquant que vous avez demandé trop de points de données.

1voto

fuzzygroup Points 116

Voici la version boto3 du script python script intégré ci-dessus.

import sys
import boto3

s3 = boto3.resource("s3")
s3bucket = s3.Bucket(sys.argv[1])
size = 0
totalCount = 0

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

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

1voto

MayurSatpute Points 27

Aws s3 ls s3://bucket-name/folder-prefix-if-any --recursive | wc -l

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X