AWS S3: как узнать, сколько места на диске используется


113

У меня есть аккаунт AWS. Я использую S3 для хранения резервных копий с разных серверов. Вопрос: есть ли в консоли AWS какая-либо информация о том, сколько дискового пространства используется в моем облаке S3?


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

Странно, что настоящего решения этой проблемы нет. Перебор всех элементов и вычисление - не решение, если у вас есть десятки миллионов файлов! В пользовательском интерфейсе AWS s3 вы можете легко увидеть использование в разделе «Управление» -> «Метрики». Почему нет способа получить это из командной строки?
Саранг,

Ответы:


117

Yippe - обновление AWS CLI позволяет рекурсивно ls через корзины ...

aws s3 ls s3://<bucketname> --recursive  | grep -v -E "(Bucket: |Prefix: |LastWriteTime|^$|--)" | awk 'BEGIN {total=0}{total+=$3}END{print total/1024/1024" MB"}'

print total / 1024/1024/1024 * .03 дает хорошую оценку использования $, если у вас меньше 1 ТБ. @cudds awesomeness - огромное спасибо !!!
chrislovecnm

4
Вам не нужна часть grep, если у вас всего одно ведро.
jpbochi

7
AWS Cloudwatch теперь имеет метрику для размера корзины и количества объектов, которые обновляются ежедневно. О времени! aws.amazon.com/blogs/aws/…
cudds

3
Пример aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time 2015-07-15T10:00:00 --end-time 2015-07-31T01:00:00 --period 86400 --statistics Average --region eu-west-1 --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=toukakoukan.com Name=StorageType,Value=StandardStorage Важно: вы должны указать StorageType и BucketName в аргументе измерений, иначе вы не получите результатов.
Сэм Мартин

@SamMartin, что должен быть StorageType? Также этот ответ занимает очень много времени, чтобы вычислить для сегментов
размером

104

Я не уверен, когда это было добавлено в AWSCLI, учитывая, что исходный вопрос был задан 3 года назад, но инструмент командной строки дает хорошее резюме, запустив:

aws s3 ls s3://mybucket --recursive --human-readable --summarize

4
Ваш и Кристофер - безусловно, лучшие ответы.
Майкл Алерс,

2
Намного более простое решение, чем принятый ответ. Спасибо!
Адриан Макнейл,

1
это не показывает истинный размер с версиями. Есть ли способ проверить общий размер ведра s3 со всеми версиями?
Shanika Ediriweera

1
Напечатайте общий размер каждого из ваших ведер:for b in $(aws s3 ls | awk '{ print $NF }'); do printf "$b "; aws s3 ls s3://$b --recursive --human-readable --summarize | tail -1; done
Мэтт Уайт,

70

Чтобы узнать размер корзины S3 с помощью Консоли AWS:

  1. Щелкните имя корзины S3
  2. Выберите вкладку «Управление».
  3. Нажмите кнопку навигации "Показатели".
  4. По умолчанию вы должны увидеть метрику хранилища для корзины.

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


3
Это работает быстрее, если в вашей корзине есть ТБ данных. Принятые ответы требуют много времени, чтобы вычислить все объекты в этом масштабе.
сокрас 01

Также обратите внимание, что это будет фиксировать зависшие неполные загрузки, а lsрешения на основе - этого не делают.
Дэвид


36

s3cmd может показать вам это, запустив s3cmd du, опционально передав имя сегмента в качестве аргумента.


1
FYI - я пробовал это и версию aws cli в ответе cudds. Оба они работают нормально, но s3cmd был значительно медленнее в тех случаях, которые я пробовал, начиная с версии 1.5.0-rc1.
DougW

@DougW: Спасибо, полезная информация. AWS CLI 1.0.0 был выпущен в сентябре 2013 года , поэтому в то время, когда я писал свой ответ, его не существовало.
markusk

s3cmd не поддерживает хеширование AWS4, поэтому он не будет работать с любыми новыми регионами, включая регион ЕС «eu-central-1»
Коэн.

@Koen .: Спасибо, я не знал об этом. Похоже, разработчик s3cmd изучает возможность добавления поддержки AWS4: github.com/s3tools/s3cmd/issues/402
markusk

@Koen .: s3cmd теперь поддерживает хеширование AWS4 начиная с версии 1.5.0, выпущенной 12 января 2015 г. См. S3tools.org/news .
Markusk

28

Интерфейс командной строки AWS теперь поддерживает --queryпараметр, который принимает выражения JMESPath .

Это означает, что вы можете суммировать значения размеров, list-objectsиспользуя sum(Contents[].Size)и посчитать как length(Contents[]).

Его можно запустить с помощью официального интерфейса командной строки AWS, как показано ниже, и он был представлен в феврале 2014 г.

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

Мне пришлось использовать двойные кавычки вокруг строки запроса в командной строке Windows. Хотя работает как чемпион.
Travis Steel

Осторожно: если корзина пуста, команда завершится ошибкой: в In function sum(), invalid type for value: None, expected one of: ['array-number'], received: "null"противном случае запрос будет работать отлично!
мехатронер

7

В окне Linux, в котором есть pythonpipустановщиком), grepи awkустановите AWS CLI (инструменты командной строки для EC2, S3 и многих других сервисов)

sudo pip install awscli

затем создайте .awssecretфайл в своей домашней папке с содержимым, как показано ниже (при необходимости настройте ключ, секрет и регион):

[default]
aws_access_key_id=<YOUR_KEY_HERE>
aws_secret_access_key=<YOUR_SECRET_KEY_HERE>
region=<AWS_REGION>

Сделайте этот файл доступным только для чтения и записи:

sudo chmod 600 .awssecret

и экспортировать в свою среду

 export AWS_CONFIG_FILE=/home/<your_name>/.awssecret

затем запустите в терминале (это однострочная команда, разделенная \для удобства чтения):

aws s3 ls s3://<bucket_name>/foo/bar | \
grep -v -E "(Bucket: |Prefix: |LastWriteTime|^$|--)" | \
awk 'BEGIN {total=0}{total+=$3}END{print total/1024/1024" MB"}'
  • awsчасть перечисляет ведро (или , опционально, «подпапку»)
  • то grepчасть удаляет (используя -v) линии , которые соответствуют регулярному выражению ( с помощью -E). ^$для пустой строки, --для строк-разделителей в выводеaws s3 ls
  • последний awkпросто добавить к total3-му столбцу результирующего вывода (размер в КБ), а затем отобразить его в конце

ПРИМЕЧАНИЕ: эта команда работает для текущего сегмента или папки, а не рекурсивно.


7

Облачные часы также позволяют создавать показатели для корзины S3. Он показывает вам показатели по размеру и количеству объектов. Сервисы> Инструменты управления> Облачные часы. Выберите регион, в котором находится ваша корзина S3, и метрики размера и количества объектов будут среди этих доступных метрик.


6

См. Https://serverfault.com/questions/84815/how-can-i-get-the-size-of-an-amazon-s3-bucket

Ответил Вик ...

<?php
if (!class_exists('S3')) require_once 'S3.php';

// Instantiate the class
$s3 = new S3('accessKeyId', 'secretAccessKey');
S3::$useSSL = false;

// List your buckets:
echo "S3::listBuckets(): ";
echo '<pre>' . print_r($s3->listBuckets(), 1). '</pre>';

$totalSize = 0;
$objects = $s3->getBucket('name-of-your-bucket');
foreach ($objects as $name => $val) {
    // If you want to get the size of a particular directory, you can do
    // only that.
    // if (strpos($name, 'directory/sub-directory') !== false)
    $totalSize += $val['size'];
}

echo ($totalSize / 1024 / 1024 / 1024) . ' GB';
?>

Вы знаете, гигабайт в данном случае равен 1024 3 или 1000 3? Мне сложно найти окончательное заявление S3.
dfrankow

@dfrankow Строка echo ($totalSize / 1024 / 1024 / 1024) . ' GB';прямо там, внизу исходного кода.
MJD

@MJD Я не помню, о чем я здесь думал. Он спрашивал об использовании слова «гигабайт» в s3cmd или S3, а не об этом PHP-коде.
dfrankow

5

В дополнение к ответу Кристофера.

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

aws s3api list-object-versions --bucket BUCKETNAME --output json --query "[sum(Versions[].Size)]"

Учитываются как последние, так и архивные версии.



1

Консоль AWS не покажет вам это, но вы можете использовать Bucket Explorer или Cloudberry Explorer, чтобы получить общий размер корзины . У обоих есть бесплатные версии.

Примечание: эти продукты все равно должны получать размер каждого отдельного объекта, поэтому для ведер с большим количеством объектов может потребоваться много времени.


Однако я вижу только пробную версию. Это предложение было удалено?
Trefex

1

На основе ответа @ cudds:

function s3size()
{
    for path in $*; do
        size=$(aws s3 ls "s3://$path" --recursive | grep -v -E "(Bucket: |Prefix: |LastWriteTime|^$|--)" | awk 'BEGIN {total=0}{total+=$3}END{printf "%.2fGb\n", (total/1024/1024/1024)}')
        echo "[s3://$path]=[$size]"
    done
}

...

$ s3size bucket-a bucket-b/dir
[s3://bucket-a]=[24.04Gb]
[s3://bucket-b/dir]=[26.69Gb]

Кроме того, Cyberduck позволяет удобно рассчитывать размер корзины или папки.



1

Это старый запрос, но, поскольку я искал ответ, я наткнулся на него. Некоторые ответы заставили меня вспомнить, что я использую браузер S3 для управления данными. Вы можете щелкнуть ведро и выбрать свойства, и он покажет вам общую сумму. Довольно просто. Я настоятельно рекомендую браузер: https://s3browser.com/default.aspx?v=6-1-1&fam=x64


0

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

Я использую CrossFTP , который является бесплатным и кроссплатформенным, и там вы можете щелкнуть правой кнопкой мыши каталог папки -> выбрать «Свойства ...» -> нажать кнопку «Рассчитать» рядом с размером и вуаля.


0

s3admin - это приложение с открытым исходным кодом (UI), которое позволяет просматривать сегменты, рассчитывать общий размер, отображать самые большие / самые маленькие файлы. Он предназначен для быстрого обзора ваших корзин и их использования.


0

Вы спросили: информация в консоли AWS о том, сколько дискового пространства используется в моем облаке S3 ?

Я перехожу на панель управления биллингом и проверяю использование S3 в текущем счете .

Они предоставляют вам информацию - MTD - в ГБ с точностью до 6 десятичных знаков, IOW, на уровне КБ.

Он разбит по регионам, но сложить их (при условии, что вы используете более одного региона) достаточно просто.

BTW: вам могут потребоваться определенные разрешения IAM, чтобы получить информацию о выставлении счетов.


-2

Я использую Cloud Turtle, чтобы получить размер отдельных ведер. Если размер сегмента превышает> 100 ГБ, для отображения размера потребуется некоторое время. Cloud turtle распространяется бесплатно.


8
Будьте осторожны с этим программным обеспечением. Он устанавливает дополнительные расширения Chrome и кажется довольно спамерским.
Стикс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.