Wyświetl wszystkie wiadra AWS S3 i wyświetl listę używanych pojemników

11

Mam wiele kont AWS i muszę wyświetlić listę wszystkich segmentów S3 na konto, a następnie wyświetlić łączny rozmiar każdego segmentu.

Obecnie mogę wyświetlić rozmiar pamięci pojedynczej łyżki S3 za pomocą:

aws s3 ls s3://mybucket --recursive --human-readable --summarize
Kyle Steenkamp
źródło
S3 Select został wydany kilka dni temu w: wynalaz
Abdennour TOUMI
Możesz spróbować tego kodu, który sam napisałem, aby osiągnąć to samo: github.com/insperitas/s3-data
jimmy978654321

Odpowiedzi:

11

Rozdzielczość 1

Rozwiązałem to za pomocą następującego skryptu. Pierwotnie opublikowałem pytanie na wypadek, gdyby istniał łatwiejszy sposób, o którym nie wiedziałem.

#!/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

Rozdzielczość 2

Korzystanie z pulpitów nawigacyjnych w CloudWatch w konsoli AWS.

Następnie możesz po prostu określić wszystkie segmenty S3 i dodać statystyki liczb, aby pokazać miary wielkości magazynu.

Nie będzie to kosztować dużo wywołań API i może być znacznie szybsze w zależności od wielkości segmentów s3 (zajmuje trochę czasu, aby uzyskać rozmiar w bardzo dużych segmentach).

Werdykt

Tworzenie pulpitu nawigacyjnego ( rozdzielczość 2 ) na każdym koncie AWS było dla mnie najbardziej wydajną opcją , ponieważ jest o wiele szybsze logowanie się i pobieranie danych ręcznie z każdego konta AWS, niż czekanie na zakończenie wywołań API skryptów. :(

Kyle Steenkamp
źródło
Dlaczego | awk END'{print}'?
Tensibai
1
Użycie opcji rekurencyjnej pokazuje rozmiar każdego folderu i pliku i potrzebuję tylko danych wyjściowych o całkowitym rozmiarze segmentu.
Kyle Steenkamp
Musisz wybrać „1 dzień” lub dłużej, aby panel mógł wyświetlać cokolwiek
Jeremy Leipzig
2
Uwaga: rozwiązanie zaproponowane w rezolucji 2 zwiększa koszt Cloudwatch, ponieważ obecnie kokpity kosztują 3 USD. aws.amazon.com/cloudwatch/pricing/?nc1=h_ls
Drubio
Co robi [@]w "${buckets[@]}"średniej?
Joe
3

Będziesz musiał napisać skrypt, który analizuje i wysyła zapytania do tych danych, ponieważ o ile mi wiadomo, nie ma narzędzia ani funkcji cli, które to wykonałyby. Na szczęście możesz zebrać wszystkie te informacje za pomocą CLI.

  1. Wyświetl listę i przeanalizuj wszystkie konta w swojej organizacji.

    aws organizations list-accounts
    
  2. Dla każdego konta wyświetl i przeanalizuj wszystkie segmenty.

    aws s3api list-buckets --query "Buckets[].Name"
    
  3. Na koniec uzyskaj rozmiar każdego segmentu na każdym koncie. Możesz użyć tej samej komendy cli, którą byłeś wcześniej, ale ostrzegaj, że będziesz wyświetlał indywidualny rozmiar każdego elementu w wiadrze. Możesz również użyć tego polecenia cli, aby uzyskać rozmiar wiadra.

    aws s3api list-objects --bucket BUCKETNAME --output json --query "
    [sum(Contents[].Size), length(Contents[])]"
    
PrestonM
źródło
1
1. nie zawiera informacji o profilu konta AWS. Nie miałem czasu, aby ponownie wyrenderować to z pliku konfiguracyjnego aws, w którym te informacje są przechowywane, więc po prostu zapisałem wartości w skrypcie, który zamieściłem poniżej
Kyle Steenkamp,
2

Będziesz musiał napisać skrypt, aby to zrobić, chyba że istnieje narzędzie, którego nie mogę znaleźć.

Jeśli pracujesz z wieloma kontami aws, musisz przełączać się między kontami, aby uzyskać rozmiary segmentów.

Aby uzyskać wszystkie wiadra i ich całkowity rozmiar, możesz użyć „ aws s3api ”. Za pomocą list-bucketsmożesz uzyskać wszystkie wiadra na jednym koncie, a następnie będziesz mógł wymienić ich rozmiary i wypróbować następne konto.

Briansbum
źródło
1
Napisałem skrypt Python z boto3, aby to zrobić: gist.github.com/rwiggins/b945b5ec1693c1d473a814915adcee8c (uwaga: używa GetMetricStatistics z CloudWatch do wydajnego pobierania rozmiarów wiadra / bez sumowania wszystkich rozmiarów obiektów w wiadrze)
Reid
1

Żadne z nich nie pokazuje rozmiaru segmentu, jeśli włączono kontrolę wersji, a ogromne ilości danych zostały „usunięte”. W konsoli GUI S3 karta Metryki pokazuje, za co płacisz.

Zeskrobałem następujące polecenie ze skryptu znalezionego na /server/84815/how-can-i-get-the-size-of-an-amazon-s3-bucket . Działa dobrze w systemie Windows. Zastępstwo yourregioni 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

Daje to średni rozmiar w bajtach w dniach ograniczonych czasem rozpoczęcia i zakończenia. Wynik może cię zszokować jeśli Twój segment ma włączoną kontrolę wersji (aktywne) i uważasz, że „usunąłeś” ogromne ilości danych.

Aby wyczyścić segmenty obsługujące kontrolę wersji, należy ustawić regułę cyklu życia. Możesz trwale usunąć poprzednie wersje. Możesz pominąć pola wyboru w kroku Przejścia.

Nowicjusz
źródło