Помогает ли Amazon простой способ узнать, сколько хранилищ использует мой ведро или папка S3? Это значит, что я могу рассчитать свои расходы и т.д.
Как найти общий размер моего хранилища или папки для хранения AWS 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:
- Перейти к CloudWatch
- Clcik Metrics с левой стороны экрана
- Нажмите S3
- Нажмите Хранилище
-
Вы увидите список всех ведер. Обратите внимание, что здесь есть две возможные путаницы:
а. Вы увидите только те корзины, в которых есть хотя бы один объект.
б. Вы можете не видеть сегменты, созданные в другом регионе, и вам может потребоваться переключить регионы, используя раскрывающийся список в правом верхнем углу, чтобы увидеть дополнительные сегменты -
Найдите слово "StandardStorage" в области "Поиск по любой метрике, измерению или идентификатору ресурса".
- Выберите корзины (или все корзины с флажком слева под словом "Все"), для которого вы хотите рассчитать общий размер
- Выберите по крайней мере 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
, обновите GNUcoreutils
для поддержки точности с плавающей запятой.
Ответ 10
aws s3 ls --summarize --human-readable --recursive s3://Bucket_Name/folder/
очень просто и быстро для любых объектов (что s3 вызывает папки) или ведра.