Перегляньте всі відра AWS S3 та перерахуйте всі використані сховища відра


11

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

На даний момент я можу переглянути лише розмір сховища одного відра S3 лише з:

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

S3 Select вийшов кілька днів тому в re: inven
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

Використання інформаційних панелей у CloudWatch в консолі AWS.

Потім можна просто вказати всі відра S3 та додати статистику чисел, щоб відобразити показники розміру пам’яті.

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

Вирок

Створення інформаційної панелі ( роздільна здатність 2 ) для кожного облікового запису AWS було для мене найефективнішим варіантом, тому що для мене набагато швидше увійти та схопити показники вручну з кожного облікового запису AWS, ніж чекати завершення викликів API сценаріїв. :(


Чому | awk END'{print}'?
Тенсібай

1
Використання рекурсивного параметра показує розмір кожної папки та файлу, і мені потрібен лише вихід із загального розміру відра.
Kyle Steenkamp

Вам потрібно вибрати "1 день" або більший період, щоб приладна панель відображала що-небудь
Джеремі Лейпциг

2
Слідкуйте за тим, щоб рішення, запропоноване у роздільній роздільній здатності 2, збільшувало вартість Cloudwatch, оскільки на інформаційних панелях наразі коштують 3 долари. aws.amazon.com/cloudwatch/pricing/?nc1=h_ls
Drubio

Що робить [@]в "${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[])]"
    

1
1. не перераховує інформацію про профіль облікового запису AWS. Я не встиг переробити це з файлу aws config, де зберігається ця інформація, тому я просто зашифрував значення в сценарії, який я розмістив нижче
Kyle Steenkamp

2

Вам потрібно буде написати сценарій для цього, якщо не існує інструменту, який я не можу знайти.

Якщо ви працюєте з декількома обліковими записами aws, вам потрібно буде перемикатися між обліковими записами, щоб отримати розміри відра.

Щоб отримати усі відра та їх загальний розмір, ви можете скористатися ' aws s3api '. Використовуючи list-bucketsви можете отримати всі відра в одному обліковому записі, і тоді ви зможете перерахувати їх розміри та спробувати наступний рахунок.


1
Я написав сценарій Python з boto3, щоб це зробити: gist.github.com/rwiggins/b945b5ec1693c1d473a814915adcee8c (примітка: використовує GetMetricStatistics CloudWatch для ефективного витягування розмірів відра / без підсумовування всіх розмірів об'єкта у відрі)
Reid

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. Ви можете назавжди видалити попередні версії. Ви можете опустити прапорці на кроці Переходи.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.