Якщо я щось не пропускаю, здається, що жоден з API, який я переглянув, не скаже вам, скільки об’єктів знаходиться у відро / папці S3 (префікс) S3. Чи є спосіб отримати підрахунок?
Якщо я щось не пропускаю, здається, що жоден з API, який я переглянув, не скаже вам, скільки об’єктів знаходиться у відро / папці S3 (префікс) S3. Чи є спосіб отримати підрахунок?
Відповіді:
Немає способу, якщо ви
перелічіть їх усіми групами по 1000 (що може бути повільним і смоктати смугу пропускання - Amazon, здається, ніколи не стискає відповіді XML), або
увійдіть до свого облікового запису на S3 та перейдіть до облікового запису - використання. Здається, відділ виставлення рахунків точно знає, скільки об’єктів ви зберегли!
Просто завантаження списку всіх ваших об’єктів фактично зайнять певний час і коштуватиме трохи грошей, якщо у вас збережено 50 мільйонів об’єктів.
Також дивіться цю тему про StorageObjectCount - що є в даних про використання.
API S3, щоб отримати хоча б основи, навіть якщо це було кілька годин, було б чудово.
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
в" призначена для --recursive
, тому вона повинна працювати і для підпапок.
aws s3 ls
а не s3cmd, тому що це швидше. б.) Для великих відрів це може зайняти тривалий час. Знадобилося близько 5 хв для 1мл файлів. в.) Дивіться мою відповідь нижче про використання хмарного годинника.
Просте рішення з API S3 зараз (доступне в кліпі 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, а потім Operation StandardStorage. Тоді ви можете завантажити файл CSV, що включає UsageType StorageObjectCount, який містить список елементів для кожного відра.
Ви можете легко отримати загальний підрахунок та історію, якщо перейти на вкладку "Управління" на консолі s3, а потім натиснути на "Метрики" ... Знімок екрана вкладки
NumberOfObjects (count/day)
графік? Було б краще, оскільки це безпосередньо пов'язане з питанням. На екрані екрана ви показуєте, BucketSizeBytes (bytes/day)
що, хоча й корисно, безпосередньо не пов’язане з проблемою.
Api поверне список з кроком 1000. Перевірте властивість IsTruncated, щоб побачити, чи є ще їх. Якщо вони є, вам потрібно здійснити інший дзвінок та передати останній ключ, який ви отримали як властивість Маркер під час наступного дзвінка. Потім ви продовжуватимете циклічно так, поки IsTruncated не буде помилковим.
Додаткову інформацію див. У цьому документі Amazon: Повторення результатів на кількох сторінках
Стара нитка, але все ще актуальна, тому що я шукав відповідь, поки я просто не з’ясував це. Я хотів кількість файлів за допомогою інструменту на основі GUI (тобто, без коду). Мені здається, я вже використовую інструмент під назвою 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: Зачекайте, поки кілька хвилин у вікні з’явиться кількість об'єктів та їх загальний розмір.
UpVote, якщо ви знайдете рішення.
Жоден з API не дасть вам рахунку, оскільки насправді не існує жодного специфічного API для Amazon. Вам потрібно просто запустити вміст списку і підрахувати кількість результатів, які повертаються.
З командного рядка в AWS CLI використовуйте ls plus --summarize
. Це дасть вам список усіх ваших предметів та загальну кількість документів у певному відрі. Я не пробував цього з відрами, що містять підрозділи:
aws s3 ls "s3://MyBucket" --summarize
Це може зайняти трохи довго (знадобилось перерахування моїх документів 16 + K близько 4 хвилин), але це швидше, ніж підрахунок 1К за один раз.
Як щодо аналітики класу зберігання S3 - Ви отримуєте API, а також на консолі - https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html
Ви можете завантажити та встановити браузер s3 з http://s3browser.com/ . Вибравши відро у правому центральному куті, ви побачите кількість файлів у відрі. Але розмір, який він показує, є невірним у поточній версії.
Губи
Найпростіший спосіб - це використовувати консоль розробника, наприклад, якщо ви перебуваєте в хромі, виберіть Інструменти для розробників, і ви можете побачити наступне, ви можете знайти і порахувати, або виконати відповідність, наприклад, 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
Далі - як ви можете це зробити за допомогою клієнта 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: // ім'я відра / папка-префікс-якщо-яка --рекурсивна | wc -l