Если я что-то не упустил, похоже, что ни один из API, на которые я смотрел, не скажет вам, сколько объектов находится в корзине / папке S3 (префикс). Есть ли способ получить счет?
Если я что-то не упустил, похоже, что ни один из API, на которые я смотрел, не скажет вам, сколько объектов находится в корзине / папке S3 (префикс). Есть ли способ получить счет?
Ответы:
Нет пути, если только ты
перечислите их все партиями по 1000 (что может быть медленным и отнять пропускную способность - похоже, amazon никогда не сжимает ответы XML), или
войдите в свою учетную запись на S3 и перейдите в раздел Учетная запись - Использование. Кажется, отдел биллинга точно знает, сколько объектов вы сохранили!
Простая загрузка списка всех ваших объектов на самом деле займет некоторое время и будет стоить денег, если у вас будет храниться 50 миллионов объектов.
Также посмотрите эту ветку о StorageObjectCount, который находится в данных об использовании.
S3 API, чтобы получить хотя бы основы, даже если бы это было часами, было бы здорово.
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
Вы можете посмотреть метрический раздел cloudwatch, чтобы получить приблизительное количество сохраненных объектов.
У меня есть около 50 миллионов продуктов, и для их использования потребовалось более часа. aws s3 ls
aws s3 ls s3://mybucket/mydirectory/ --recursive | wc -l
Существует --summarize
переключатель, который включает в себя сводную информацию (например, количество объектов, общий размер).
Вот правильный ответ, используя AWS cli:
aws s3 ls s3://bucketName/path/ --recursive --summarize | grep "Total Objects:"
Total Objects: 194273
Смотри документацию
Total Objects: 7235
Total Size: 475566411749
так легко.
Хотя это старый вопрос, и обратная связь была получена в 2015 году, сейчас все гораздо проще, поскольку в веб-консоли S3 включена опция «Получить размер»:
Который обеспечивает следующее:
Если вы используете инструмент командной строки s3cmd , вы можете получить рекурсивный список определенного сегмента, выводя его в текстовый файл.
s3cmd ls -r s3://logs.mybucket/subfolder/ > listing.txt
Затем в Linux вы можете запустить wc -l для файла, чтобы подсчитать количество строк (1 строка на объект).
wc -l listing.txt
-r
in предназначена для --recursive
, поэтому она должна работать и для подпапок.
aws s3 ls
вместо s3cmd, потому что это быстрее. б.) Для больших ведер это может занять много времени. Потребовалось около 5 минут для 1 млн файлов. c.) Смотрите мой ответ ниже об использовании cloudwatch.
Теперь есть простое решение с S3 API (доступно в разделе AWS):
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[])]"
Illegal token value '(Contents[])]'
(версия 1.2.9 из aws-cli), когда просто использую --bucket my-bucket
и A client error (NoSuchBucket) occurred when calling the ListObjects operation: The specified bucket does not exist
когда использую --bucket s3://my-bucket
. (Он определенно существует и имеет более 1000 файлов.)
Вы можете использовать показатели AWS cloudwatch для s3, чтобы увидеть точное количество для каждого сегмента.
Перейдите в раздел AWS Billing, затем отчеты, затем отчеты об использовании AWS. Выберите Amazon Simple Storage Service, затем «Операция StandardStorage». Затем вы можете загрузить CSV-файл, который содержит UsageType для StorageObjectCount, в котором перечисляется количество элементов для каждого сегмента.
Вы можете легко получить общее количество и историю, если перейдете на вкладку «Управление» консоли s3, а затем нажмите «Метрики» ... Снимок экрана с вкладкой
NumberOfObjects (count/day)
график? Было бы лучше, так как это напрямую связано с вопросом. На скриншоте вы показываете, BucketSizeBytes (bytes/day)
что, хотя и полезно, но не имеет прямого отношения к проблеме.
API вернет список с шагом 1000. Проверьте свойство IsTruncated, чтобы увидеть, есть ли еще. Если есть, вам нужно сделать еще один вызов и передать последний ключ, который вы получили в качестве свойства Marker при следующем вызове. Затем вы продолжите цикл, пока IsTruncated не станет ложным.
См. Этот документ Amazon для получения дополнительной информации: итерация по многостраничным результатам
Старая тема, но все еще актуальна, так как я искал ответ, пока я только не понял это. Я хотел, чтобы количество файлов с помощью инструмента на основе графического интерфейса (т.е. без кода). Я уже использую инструмент под названием 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 файлов в корзине, и я сделал подсчет файлов менее чем за минуту.
Я использовал скрипт на python от 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
В s3cmd просто запустите следующую команду (в системе Ubuntu):
s3cmd ls -r s3://mybucket | wc -l
Если вы используете 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 :
Надеюсь, поможет.
Один из самых простых способов подсчитать количество объектов в s3:
Шаг 1. Выберите корневую папку. Шаг 2. Нажмите «Действия» -> «Удалить» (очевидно, будьте осторожны, не удаляйте ее). Шаг 3. Подождите несколько минут. AWS покажет вам количество объектов и их общий размер.
UpVote, если вы найдете решение.
Ни один из API не даст вам счет, потому что на самом деле не существует специального API Amazon для этого. Вы просто должны запустить список содержимого и подсчитать количество результатов, которые возвращаются.
Из командной строки в AWS CLI используйте ls plus --summarize
. Это даст вам список всех ваших предметов и общее количество документов в конкретном ведре. Я не пробовал это с ведрами, содержащими вложенные ведра:
aws s3 ls "s3://MyBucket" --summarize
Это займет немного времени (заняло перечисление моих 16 + K документов за 4 минуты), но это быстрее, чем подсчет 1K за раз.
Как насчет аналитики класса хранилища S3 - вы получаете как API, так и консоль - https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html
Вы можете скачать и установить браузер s3 с http://s3browser.com/ . Когда вы выбираете корзину в центральном правом углу, вы можете увидеть количество файлов в корзине. Но размер, который он показывает, неверен в текущей версии.
Gubs
Самый простой способ - использовать консоль разработчика, например, если вы используете Chrome, выберите «Инструменты разработчика», и вы увидите следующее, вы можете либо найти и сосчитать, либо выполнить какое-то совпадение, например 280-279 + 1 = 2
...
Я нашел инструмент браузера S3 очень удобным, он предоставляет файлы и папки, а также общее количество и размер для любой папки.
Ссылка для скачивания: https://s3browser.com/download.aspx
Это также можно сделать с помощью gsutil du
(да, инструмент Google Cloud)
gsutil du s3://mybucket/ | wc -l
Вы можете просто выполнить эту команду 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
Если вы ищете конкретные файлы, скажем, .jpg
изображения, вы можете сделать следующее:
aws s3 ls s3://your_bucket | grep jpg | wc -l
Ниже описано, как вы можете сделать это с помощью 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;
}
}
Вот версия 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)`
aws s3 ls s3: // имя-корзины / префикс-папки-если-любой --recursive | туалет