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

Если мне что-то не хватает, кажется, что ни один из API, на который я смотрел, не скажет вам, сколько объектов находится в ведре/папке S3 (префикс). Есть ли способ получить счет?

Ответ 1

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

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

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

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

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

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

Ответ 2

Использование AWS CLI

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

или

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

Примечание. Вышеупомянутая команда cloudwatch, похоже, работает некоторое время, а не для других. Обсуждается здесь: https://forums.aws.amazon.com/thread.jspa?threadID=217050

Использование веб-консоли AWS

Вы можете посмотреть метрическую секцию cloudwatch, чтобы получить приблизительно количество сохраненных объектов. введите описание изображения здесь

У меня около 50 миллионов продуктов, и вам потребовалось больше часа, чтобы использовать aws s3 ls

Ответ 3

Существует переключатель --summarize, который включает в себя сводную информацию о корзине (то есть количество объектов, общий размер).

Вот правильный ответ, используя AWS cli:

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

Total Objects: 194273

см. документацию

Ответ 4

Хотя это старый вопрос, и обратная связь была предоставлена ​​в 2015 году, сейчас это намного проще, поскольку S3 Web Console включила опцию "Получить размер":

введите описание изображения здесь

Что обеспечивает следующее:

введите описание изображения здесь

Ответ 5

Если вы используете инструмент командной строки s3cmd, вы можете получить рекурсивный список конкретного ведра, выводя его в текстовый файл.

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

Затем в linux вы можете запустить wc -l в файле для подсчета строк (1 строка на объект).

wc -l listing.txt

Ответ 6

Теперь существует простое решение с S3 API (доступно в AWS cli):

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

или для определенной папки:

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

Ответ 7

Вы можете использовать метрики AWS cloudwatch для s3, чтобы увидеть точное количество для каждого ведра. метка cloudwatch при выборе ковша

Ответ 8

Перейдите на AWS Billing, затем отчитайте, затем AWS. Выберите Amazon Simple Storage Service, затем Operation StandardStorage. Затем вы можете загрузить CSV файл, который содержит UsageType для StorageObjectCount, который перечисляет количество элементов для каждого ведра.

Ответ 9

В s3cmd просто запустите следующую команду (в системе Ubuntu):

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

Ответ 10

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

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

Ответ 11

Старый поток, но все еще актуальный, поскольку я искал ответ, пока не понял это. Мне нужен счетчик файлов с использованием инструмента на основе графического интерфейса (т.е. Никакого кода). Я уже использую инструмент под названием 3Hub для перетаскивания и пересылки на S3. Я хотел знать, сколько файлов у меня было в определенном ведре (я не думаю, что биллинг разбивает его на ведра).

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  

У меня было 20521 файлов в ковше, и количество файлов было меньше минуты.

Ответ 12

Если вы используете AWS CLI в Windows, вы можете использовать Measure-Object из PowerShell, чтобы получить общее количество файлов, как wc -l в * nix.

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

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

Надеюсь, поможет.

Ответ 13

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

Ответ 14

Я использовал python script из scalablelogic.com (добавление в журнал подсчета). Отлично работает.

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

Ответ 15

Вы можете легко получить общее количество и историю, если перейдете на вкладку "Управление" консоли s3, а затем нажмите "Метрики"... Снимок экрана с вкладкой

Ответ 16

3Hub прекращено. Там лучшее решение, вы можете использовать Transmit (только для Mac), затем вы просто подключаетесь к своему ковшу и выбираете Show Item Count из View.

Ответ 17

Вы можете загрузить и установить браузер s3 из http://s3browser.com/. Когда вы выбираете ковш в центральном правом углу, вы можете увидеть количество файлов в ковше. Но размер, который он показывает, неверен в текущей версии.

Gubs

Ответ 18

Самый простой способ - использовать консоль разработчика, например, если вы находитесь на хроме, выберите "Инструменты разработчика", и вы увидите следующее: вы можете найти или подсчитать или выполнить некоторое совпадение, например 280-279 + 1 = 2

  ...

Ответ 19

В командной строке в AWS CLI используйте ls plus --summarize. Он предоставит вам список всех ваших предметов и общее количество документов в конкретном ковше. Я не пробовал это с ведрами, содержащими подкопы:

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

Это займет немного времени (потребовалось перечислить мои документы 16 + K около 4 минут), но это быстрее, чем подсчет 1K за раз.

Ответ 21

Я нашел инструмент браузера S3 очень удобным, он предоставляет файлы и папки, а также общее количество и размер для любой папки.

Ссылка для скачивания: https://s3browser.com/download.aspx

Ответ 22

Это также можно сделать с помощью gsutil du (да, инструмент Google Cloud)

gsutil du s3://mybucket/ | wc -l

Ответ 23

Вы можете просто выполнить эту команду cli, чтобы получить общее количество файлов в корзине или определенной папке

Сканирование всего ведра

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

Вы можете использовать эту команду, чтобы получить подробную информацию

aws s3api list-objects-v2 --bucket BUCKET_NAME

Сканирование определенной папки

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

Ответ 24

Если вы ищете конкретные файлы, например, изображения .jpg, вы можете сделать следующее:

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

Ответ 25

Ниже описано, как вы можете сделать это с помощью 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;
    }
}

Ответ 26

Вы можете использовать инвентарь Amazon S3, который предоставит вам список объектов в CSV файле.