Как я могу сказать, сколько объектов я хранил в блоке S3?

Попробуйте запустить скрипт ниже:

npm install style-loader --save

Измените конфигурацию webpack, добавьте поле modulesDirectories в resolve.

    resolve: {
        extensions: ['', '.js', '.jsx', '.css'],
        modulesDirectories: [
          'node_modules'
        ]        
    }
126
задан Jonik 19 May 2010 в 17:07
поделиться

6 ответов

Нет никакого способа, если вы

  1. не перечислите их все партиями по 1000 (что может быть медленным и отнимать пропускную способность - amazon, похоже, никогда не сжимает XML-ответы) или

  2. войдите в свою учетную запись на S3 и перейдите Учетная запись - Использование. Похоже, отдел биллинга точно знает, сколько объектов вы сохранили!

Простая загрузка списка всех ваших объектов на самом деле займет некоторое время и будет стоить некоторых денег, если у вас хранится 50 миллионов объектов.

Также см. этот поток о StorageObjectCount - который находится в данных об использовании.

S3 API, чтобы получить хотя бы основы, даже если ему уже несколько часов, было бы здорово.

33
ответ дан 24 November 2019 в 00:48
поделиться

Вот boto3 версия сценария Python, встроенного выше.

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)`
0
ответ дан 24 November 2019 в 00:48
поделиться

Следующее - то, как можно сделать это с помощью клиента Java.

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-s3</artifactId>
    <version>1.11.519</version>
</dependency>
import com.amazonaws.ClientConfiguration;
import com.amazonaws.Protocol;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ObjectListing;

public class AmazonS3Service {

    private static final String S3_ACCESS_KEY_ID = "ACCESS_KEY";
    private static final String S3_SECRET_KEY = "SECRET_KEY";
    private static final String S3_ENDPOINT = "S3_URL";

    private AmazonS3 amazonS3;

    public AmazonS3Service() {
        ClientConfiguration clientConfiguration = new ClientConfiguration();
        clientConfiguration.setProtocol(Protocol.HTTPS);
        clientConfiguration.setSignerOverride("S3SignerType");
        BasicAWSCredentials credentials = new BasicAWSCredentials(S3_ACCESS_KEY_ID, S3_SECRET_KEY);
        AWSStaticCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(credentials);
        AmazonS3ClientBuilder.EndpointConfiguration endpointConfiguration = new AmazonS3ClientBuilder.EndpointConfiguration(S3_ENDPOINT, null);
        amazonS3 = AmazonS3ClientBuilder.standard().withCredentials(credentialsProvider).withClientConfiguration(clientConfiguration)
                .withPathStyleAccessEnabled(true).withEndpointConfiguration(endpointConfiguration).build();
    }

    public int countObjects(String bucketName) {
        int count = 0;
        ObjectListing objectListing = amazonS3.listObjects(bucketName);
        int currentBatchCount = objectListing.getObjectSummaries().size();
        while (currentBatchCount != 0) {
            count += currentBatchCount;
            objectListing = amazonS3.listNextBatchOfObjects(objectListing);
            currentBatchCount = objectListing.getObjectSummaries().size();
        }
        return count;
    }
}
0
ответ дан 24 November 2019 в 00:48
поделиться

Один из самых простых способов считать количество объектов в s3:

Step1: Выберите корневую папку Step2: Нажмите на Actions-> Delete (Obviously, быть осторожным не удаляют его), Step3: Ожидайте в течение нескольких минут aws, покажет Вам количество объектов и его общего размера.

UpVote, если Вы находите решение.

0
ответ дан 24 November 2019 в 00:48
поделиться

Ни один из API-интерфейсов не даст вам подсчет, потому что на самом деле не существует специального API-интерфейса Amazon для этого. Вам нужно просто запустить список содержимого и подсчитать количество возвращаемых результатов.

1
ответ дан 24 November 2019 в 00:48
поделиться

API вернет список с шагом 1000. Проверьте свойство IsTruncated, чтобы узнать, есть ли еще другие. Если есть, вам нужно сделать еще один вызов и передать последний полученный ключ в качестве свойства Marker при следующем вызове. Затем вы продолжите такой цикл до тех пор, пока IsTruncated не станет ложным.

См. Этот документ Amazon для получения дополнительной информации: Итерация многостраничных результатов

2
ответ дан 24 November 2019 в 00:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: