Просмотреть все сегменты AWS S3 и перечислить каждое использованное хранилище сегментов

11

У меня есть несколько учетных записей AWS, и мне нужно перечислить все корзины S3 для каждой учетной записи, а затем просмотреть общий размер каждой корзины.

В настоящее время я могу просматривать только объем хранилища одного сегмента S3 с:

aws s3 ls s3://mybucket --recursive --human-readable --summarize
Кайл Стинкамп
источник
S3 Select был выпущен несколько дней назад в ре: изобретать 2017 twitch.tv/videos/206752912
Abdennour TOUMI
Возможно, вы захотите попробовать этот код, который я написал, чтобы достичь того же самого: github.com/insperitas/s3-data
jimmy978654321

Ответы:

11

Разрешение 1

Поэтому я решил это с помощью следующего сценария. Первоначально я разместил вопрос на случай, если есть более простой способ, о котором я не знал.

#!/bin/bash
aws_profile=('profile1' 'profile2' 'profile3');

#loop AWS profiles
for i in "${aws_profile[@]}"; do
  echo "${i}"
  buckets=($(aws --profile "${i}" --region your_region s3 ls s3:// --recursive | awk '{print $3}'))

  #loop S3 buckets
  for j in "${buckets[@]}"; do
  echo "${j}"
  aws --profile "${i}" --region your_region s3 ls s3://"${j}" --recursive --human-readable --summarize | awk END'{print}'
  done

done

Разрешение 2

Использование Dashboards в CloudWatch в консоли AWS.

Затем вы можете просто указать все сегменты S3 и добавить статистику чисел, чтобы показать метрики размера хранилища.

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

решение суда

Создание Dashboard ( Решение 2 ) для каждой учетной записи AWS было для меня наиболее эффективным вариантом, поскольку для меня гораздо быстрее войти в систему и получить показатели вручную из каждой учетной записи AWS, чем ждать завершения вызовов API сценариев. :(

Кайл Стинкамп
источник
Почему | awk END'{print}'?
Тенсибай
1
Использование рекурсивной опции показывает размер каждой папки и файла, и мне нужен только вывод общего размера корзины.
Кайл Стинкамп,
Вам нужно выбрать период «1 день» или больше, чтобы на панели инструментов отображалось что-либо
Джереми Лейпциг,
2
Помните, что решение, предложенное в Резолюции 2, увеличивает стоимость Cloudwatch, поскольку в данный момент на панели мониторинга стоят 3 доллара. aws.amazon.com/cloudwatch/pricing/?nc1=h_ls
Друбио
Что значит [@]в "${buckets[@]}"?
Джо
3

Вам нужно будет написать скрипт, который анализирует и запрашивает эти данные, потому что, насколько я знаю, нет инструмента или функции cli, которые выполняют это. К счастью, вы можете собрать всю эту информацию с помощью CLI.

  1. Перечислите и проанализируйте все учетные записи в вашей организации.

    aws organizations list-accounts
    
  2. Для каждой учетной записи перечислите и проанализируйте все сегменты.

    aws s3api list-buckets --query "Buckets[].Name"
    
  3. Наконец, получите размер каждой корзины в каждой учетной записи. Вы можете использовать ту же команду cli, что и раньше, но имейте в виду, что вы будете указывать индивидуальный размер каждого элемента в корзине. Вы также можете использовать эту команду cli, чтобы получить размер сегмента.

    aws s3api list-objects --bucket BUCKETNAME --output json --query "
    [sum(Contents[].Size), length(Contents[])]"
    
PrestonM
источник
1
1. не перечисляет информацию профиля учетной записи AWS. У меня не было времени для регулярного выражения этого в конфигурационном файле aws, где хранится эта информация, поэтому я просто жестко запрограммировал значения в сценарии, который я разместил ниже
Кайл Стинкамп,
2

Вам придется написать скрипт, чтобы сделать это, если нет инструмента для этого, который я не могу найти.

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

Чтобы получить все корзины и их общий размер, вы можете использовать « aws s3api ». Используя list-bucketsвы можете получить все корзины в одной учетной записи, а затем вы сможете перечислить их размеры и попробовать следующую учетную запись.

Briansbum
источник
1
Я написал скрипт Python с помощью boto3, чтобы сделать это: gist.github.com/rwiggins/b945b5ec1693c1d473a814915adcee8c (примечание: использует GetMetricStatistics CloudWatch для эффективного извлечения размеров сегментов / без суммирования всех размеров объектов в
Рейд
1

Ни один из них не показывает размер корзины, если включено управление версиями и огромное количество данных было «удалено». В консоли графического интерфейса S3 на вкладке «Метрики» отображается то, за что вам выставлен счет.

Удалите следующую команду из скрипта, найденного по адресу /server/84815/how-can-i-get-the-size-of-an-amazon-s3-bucket . Хорошо работает на Windows. Заменить yourregionи yourbucketname:

aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time 2019-05-09T00:01:00Z --end-time 2019-05-11T23:59:00Z --period 86400 --statistics Average --region yourregion --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=yourbucketname Name=StorageType,Value=StandardStorage

Это дает средний размер в байтах за дни, ограниченные временем начала и окончания. Результат может вас шокировать, если в вашей корзине включена поддержка версий (активна) и вы думаете, что «удалили» огромные объемы данных.

Чтобы очистить корзины с поддержкой версий, вы должны установить правило LifeCycle. Вы можете навсегда удалить предыдущие версии. Вы можете опустить флажки на шаге Переходы.

Новичок
источник