Как найти общий размер моего хранилища или папки для хранения AWS S3?

Помогает ли Amazon простой способ узнать, сколько хранилищ использует мой ведро или папка S3? Это значит, что я могу рассчитать свои расходы и т.д.

Ответ 1

Amazon изменил веб-интерфейс, так что теперь у вас есть "Получить размер" в меню "Дополнительно".

Ответ 2

Два пути,

Использование aws cli

aws s3 ls --summarize --human-readable --recursive s3://bucket/folder/*

Если мы опускаем / в конце, он получит все папки, начиная с имени вашей папки, и даст общий размер всех.

aws s3 ls --summarize --human-readable --recursive s3://bucket/folder

Использование boto3 api

import boto3

def get_folder_size(bucket, prefix):
    total_size = 0
    for obj in boto3.resource('s3').Bucket(bucket).objects.filter(Prefix=prefix):
        total_size += obj.size
    return total_size

Ответ 3

По состоянию на 28 июля 2015 года вы можете получить эту информацию через CloudWatch.

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 us-east-1 
--metric-name BucketSizeBytes --dimensions Name=BucketName,Value=myBucketNameGoesHere 
Name=StorageType,Value=StandardStorage


Important: You must specify both StorageType and BucketName in the dimensions argument otherwise you will get no results.

Ответ 4

Я использую s3cmd du s3://BUCKET/ --human-readable для просмотра размера папок в S3. Он дает довольно подробную информацию об общих объектах в ковше и их размере в очень читаемой форме.

Ответ 5

В качестве альтернативы вы можете попробовать s3cmd, у которого есть команда du, например Unix.

Ответ 6

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

  1. Перейти к CloudWatch
  2. Clcik Metrics с левой стороны экрана
  3. Нажмите S3
  4. Нажмите Хранилище
  5. Вы увидите список всех ведер. Обратите внимание, что здесь есть две возможные путаницы:

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

  6. Найдите слово "StandardStorage" в области "Поиск по любой метрике, измерению или идентификатору ресурса".

  7. Выберите корзины (или все корзины с флажком слева под словом "Все"), для которого вы хотите рассчитать общий размер
  8. Выберите по крайней мере 3d (3 дня) или больше от временной шкалы к верхнему правому углу экрана.

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

Ответ 7

s3cmd du --human-readable --recursive s3://Bucket_Name/

Ответ 8

Нашел здесь

aws s3api list-objects --bucket cyclops-images --output json --query "[sum(Contents[].Size), length(Contents[])]" | awk 'NR!=2 {print $0;next} NR==2 {print $0/1024/1024/1024" GB"}'

Ответ 9

Если вам не нужно точное количество байтов или если объем памяти очень велик (в ТБ или миллионах объектов), использование метрик CloudWatch является самым быстрым способом, поскольку он не требует итерации по всем объектам, что может потребовать значительных ресурсов ЦП. и может завершиться тайм-аутом или сетевой ошибкой при использовании команды CLI.

Основываясь на некоторых примерах использования SO [для запуска команды aws cloudwatch get-metric-statistics в SO, я обернул ее полезной функцией Bash, которая позволяет вам при желании указать профиль для команды aws:

# print S3 bucket size and count
# usage: bsize <bucket> [profile]
function bsize() (
  bucket=$1 profile=${2-default}

  if [[ -z "$bucket" ]]; then
    echo >&2 "bsize <bucket> [profile]"
    return 1
  fi

  # ensure aws/jq/numfmt are installed
  for bin in aws jq numfmt; do
    if ! hash $bin 2> /dev/null; then
      echo >&2 "Please install \"$_\" first!"
      return 1
    fi
  done

  # get bucket region
  region=$(aws --profile $profile s3api get-bucket-location --bucket $bucket 2> /dev/null | jq -r '.LocationConstraint // "us-east-1"')
  if [[ -z "$region" ]]; then
    echo >&2 "Invalid bucket/profile name!"
    return 1
  fi

  # get storage class (assumes
  # all objects in same class)
  sclass=$(aws --profile $profile s3api list-objects --bucket $bucket --max-items=1 2> /dev/null | jq -r '.Contents[].StorageClass // "STANDARD"')
  case $sclass in
    REDUCED_REDUNDANCY) sclass="ReducedRedundancyStorage" ;;
    GLACIER)            sclass="GlacierStorage" ;;
    DEEP_ARCHIVE)       sclass="DeepArchiveStorage" ;;
    *)                  sclass="StandardStorage" ;;
  esac

  # _bsize <metric> <stype>
  _bsize() {
    metric=$1 stype=$2
    utnow=$(date +%s)
    aws --profile $profile cloudwatch get-metric-statistics --namespace AWS/S3 --start-time "$(echo "$utnow - 604800" | bc)" --end-time "$utnow" --period 604800 --statistics Average --region $region --metric-name $metric --dimensions Name=BucketName,Value="$bucket" Name=StorageType,Value="$stype" 2> /dev/null | jq -r '.Datapoints[].Average'
  }

  # _print <number> <units> <format> [suffix]
  _print() {
    number=$1 units=$2 format=$3 suffix=$4
    if [[ -n "$number" ]]; then
      numfmt --to="$units" --suffix="$suffix" --format="$format" $number | sed -En 's/([^0-9]+)$/ \1/p'
    fi
  }
  _print "$(_bsize BucketSizeBytes $sclass)" iec-i "%10.2f" B
  _print "$(_bsize NumberOfObjects AllStorageTypes)" si "%8.2f"
)

Несколько предостережений:

  • Для простоты функция предполагает, что все объекты в сегменте находятся в одном классе хранения!
  • В macOS используйте gnumfmt вместо numfmt.
  • Если numfmt жалуется на неправильную опцию --format, обновите GNU coreutils для поддержки точности с плавающей запятой.

Ответ 10

aws s3 ls --summarize --human-readable --recursive s3://Bucket_Name/folder/

очень просто и быстро для любых объектов (что s3 вызывает папки) или ведра.