Я хотел бы изобразить размер (в байтах и # элементов) корзины Amazon S3 и ищу эффективный способ получения данных.
Инструменты s3cmd предоставляют способ получения общего размера файла с использованием s3cmd du s3://bucket_name
, но я беспокоюсь о его способности масштабировать, поскольку похоже, что он выбирает данные о каждом файле и вычисляет свою собственную сумму. Поскольку Amazon взимает плату с пользователей в месяцах GB, кажется странным, что они не выставляют это значение напрямую.
Хотя Amazon REST API возвращает количество элементов в корзине , s3cmd , похоже , не раскрывает его. Я мог бы сделать, s3cmd ls -r s3://bucket_name | wc -l
но это похоже на взлом.
Библиотека Ruby AWS :: S3 выглядела многообещающе, но предоставляет только количество элементов корзины, а не общий размер корзины.
Кто-нибудь знает какие-либо другие инструменты или библиотеки командной строки (предпочитают Perl, PHP, Python или Ruby), которые предоставляют способы получения этих данных?
источник
Ответы:
Теперь CLI AWS поддерживает
--query
параметр, который принимает выражения JMESPath .Это означает, что вы можете суммировать значения размера, заданные с
list-objects
помощьюsum(Contents[].Size)
и считать какlength(Contents[])
.Это можно запустить с помощью официального интерфейса командной строки AWS, как показано ниже, и был представлен в феврале 2014 г.
источник
s4cmd du s3://bucket-name
s3cmd
должны иметь те же накладные расходы, что иAWS CLI
. В показанном кодеs3cmd
сделайте запрос для каждого каталога в корзине.aws s3api --profile PROFILE_NAME list-objects --bucket BUCKET_NAME --output json --query "[sum(Contents[].Size), length(Contents[])]" | awk 'NR!=2 {print $0;next} NR==2 {print $0/1024/1024/1024" GB"}'
s4cmd du
замечательно, спасибо @Brent Faust! небольшая заметка (для заинтересованных), которую нужно добавить,-r
чтобы получить размеры подкаталогов.Теперь это можно сделать тривиально, просто с помощью официального клиента командной строки AWS:
Официальная документация
Это также принимает префиксы пути, если вы не хотите считать весь сегмент:
источник
Консоль AWS:
С 28 июля 2015 года вы можете получить эту информацию через CloudWatch . Если вам нужен графический интерфейс, перейдите в консоль CloudWatch : (Выберите Регион>) Метрики> S3
Команда AWS CLI:
Это намного быстрее, чем некоторые другие команды, размещенные здесь, так как он не запрашивает размер каждого файла в отдельности для вычисления суммы.
Важное замечание: Вы должны указать и StorageType, и BucketName в аргументе измерений, иначе вы не получите никаких результатов. Все, что вам нужно изменить
--start-date
, это--end-time
, иValue=toukakoukan.com
.Вот скрипт bash, который вы можете использовать, чтобы избежать необходимости указывать
--start-date
и--end-time
вручную.источник
Invalid value ('1525354418') for param timestamp:StartTime of type timestamp
s3cmd может сделать это:
s3cmd du s3://bucket-name
источник
BotoClientError: Bucket names cannot contain upper-case characters when using either the sub-domain or virtual hosting calling format.
для сегментов с заглавными буквами.Если вы загрузите отчет об использовании , вы можете отобразить дневные значения для
TimedStorage-ByteHrs
поля.Если вы хотите получить это число в ГиБ, просто разделите на
1024 * 1024 * 1024 * 24
(это ГиБ-часы для 24-часового цикла). Если вам нужно число в байтах, просто разделите на 24 и отложите график.источник
Используя официальные инструменты командной строки AWS s3:
Это лучшая команда, просто добавьте следующие 3 параметра
--summarize --human-readable --recursive
послеaws s3 ls
.--summarize
не требуется, хотя дает хороший штрих на общий размер.источник
s4cmd - самый быстрый способ, который я нашел (утилита командной строки, написанная на Python):
Теперь, чтобы вычислить весь размер сегмента, используя несколько потоков:
источник
s4cmd du s3://123123drink
не просто вернет размер ведра. Чтобы получить размер сегмента, добавьте рекурсив-r
, например: s4cmd du -r s3: // 123123drink-r
в пример выше, чтобы избежать путаницы, когда люди используют смоделированные папки на S3).Я использовал S3 REST / Curl API, указанный ранее в этой теме, и сделал это:
источник
Вы можете использовать утилиту s3cmd, например:
источник
Таким образом, просматривая API и воспроизводя несколько одинаковых запросов, S3 будет производить все содержимое сегмента за один запрос, и ему не нужно спускаться в каталоги. Результаты затем просто требуют суммирования по различным элементам XML, а не повторных вызовов. У меня нет образца ведра с тысячами предметов, поэтому я не знаю, насколько хорошо он будет масштабироваться, но он кажется достаточно простым.
источник
... Немного поздно, но лучший способ, который я нашел, - это использовать отчеты на портале AWS. Я сделал PHP-класс для загрузки и анализа отчетов. С его помощью вы можете получить общее количество объектов для каждого сегмента, общий размер в ГБ или в байтах и многое другое.
Проверьте это и дайте мне знать, если это было полезно
AmazonTools
источник
Я рекомендую использовать S3 Usage Report для больших сегментов , см. Мои инструкции о том, как его получить. По сути, вам необходимо загрузить Usage Report for S3 service за последний день с помощью Timed Storage - Byte Hrs и проанализировать его, чтобы определить использование диска.
источник
Документация AWS говорит вам, как это сделать:
Это результат, который вы получаете:
источник
Для действительно низкотехнологичного подхода: используйте клиент S3, который может рассчитать размер для вас. Я использую Transmit от Panic, нажимаю на корзину, делаю «Get Info» и нажимаю кнопку «Calculate». Я не уверен, насколько он быстр или точен по сравнению с другими методами, но, похоже, он возвращает мне тот размер, который я ожидал.
источник
Поскольку ответов так много, я решила, что сама добавлю свои. Я написал свою реализацию на C #, используя LINQPad. Скопируйте, вставьте и введите ключ доступа, секретный ключ, конечную точку региона и имя сегмента, который вы хотите запросить. Также обязательно добавьте пакет nuget AWSSDK.
При тестировании одного из моих контейнеров он дал мне счет 128075 и размер 70,6 ГБ. Я знаю, что это точность 99,9999%, поэтому я доволен результатом.
источник
Если вы хотите получить размер из Консоли AWS:
По умолчанию вы должны увидеть хранения Metric ведра
источник
Я знаю, что это старый вопрос, но вот пример PowerShell:
Get-S3Object -BucketName <buckename> | select key, size | foreach {$A += $_.size}
$A
содержит размер сегмента и параметр keyname, если вы просто хотите указать размер определенной папки в блоке.источник
Чтобы проверить размер всех блоков, попробуйте этот скрипт
источник
Вы можете использовать
s3cmd
:или же
Это дает общее количество объектов и размер корзины в очень удобочитаемой форме.
источник
du
Перечисляет ли список все объекты или получает метаданные? Хотелось бы получить версию API для отчетов или версию, отображаемую в консоли aws ...Привет, есть инструмент поиска метаданных для AWS S3 по адресу https://s3search.p3-labs.com/. Этот инструмент выдает статистику об объектах в корзине с поиском по метаданным.
источник
Также Hanzo S3 Tools делает это. После установки вы можете сделать:
Но я считаю, что это также суммируется на стороне клиента и не получается через API AWS.
источник
По программе Cloudberry также можно перечислить размер корзины , количество папок и общее количество файлов, нажав «Свойства» прямо в верхней части корзины.
источник
Если вы не хотите использовать командную строку, в Windows и OSX есть универсальное приложение для удаленного управления файлами, которое называется Cyberduck . Войдите в S3 с вашей парой доступа / секретного ключа, щелкните правой кнопкой мыши каталог, щелкните
Calculate
.источник
Я написал сценарий Bash, s3-du.sh, который будет перечислять файлы в ведре с s3ls, а также печатать количество файлов и размеры, например
Полный скрипт:
Он имеет размер подкаталога, так как Amazon возвращает имя каталога и размер всего его содержимого.
источник
CloudWatch теперь имеет панель инструментов по умолчанию для службы S3, которая отображает ее на графике под названием «Среднее значение в байтах». Я думаю, что эта ссылка будет работать для всех, кто уже вошел в консоль AWS:
источник
Следующий способ использует AWS PHP SDK для получения общего размера корзины.
источник
Это работает для меня ..
источник