Visualizza tutti i bucket AWS S3 ed elenca tutti gli storage dei bucket utilizzati


11

Ho più account AWS e devo elencare tutti i bucket S3 per account e quindi visualizzare le dimensioni totali di ciascun bucket.

Attualmente, posso solo visualizzare le dimensioni di archiviazione di un singolo bucket S3 con:

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

S3 Select è stato rilasciato pochi giorni fa in re: invent
Abdennour TOUMI

Potresti provare questo codice che ho scritto per ottenere la stessa cosa da solo: github.com/insperitas/s3-data
jimmy978654321

Risposte:


11

Risoluzione 1

Quindi ho risolto questo con il seguente script. Inizialmente avevo pubblicato la domanda nel caso in cui esistesse un modo più semplice di cui non ero a conoscenza.

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

Risoluzione 2

Utilizzo di Dashboard in CloudWatch nella console AWS.

È quindi possibile semplicemente specificare tutti i bucket S3 e aggiungere le statistiche dei numeri per mostrare le metriche delle dimensioni di archiviazione.

Questo non ti costerà un sacco di chiamate API e può essere significativamente più veloce a seconda delle dimensioni dei bucket S3 (richiede un po 'di tempo per ottenere le dimensioni su bucket molto grandi).

Verdetto

La creazione del Dashboard ( risoluzione 2 ) su ciascun account AWS è stata l'opzione più efficiente per me perché è molto più veloce per me accedere e acquisire le metriche manualmente da ciascun account AWS piuttosto che attendere il completamento delle chiamate API degli script. :(


Perché | awk END'{print}'?
Tensibai,

1
L'uso dell'opzione ricorsiva mostra la dimensione di ogni cartella e file e ho solo bisogno dell'output della dimensione totale del bucket.
Kyle Steenkamp,

Devi selezionare un periodo di '1 giorno' o superiore affinché la dashboard visualizzi qualsiasi cosa
Jeremy Leipzig,

2
Ricorda che la soluzione proposta nella Risoluzione 2 aumenta il costo di Cloudwatch poiché le dashboard hanno un costo di $ 3 ciascuna al momento. aws.amazon.com/cloudwatch/pricing/?nc1=h_ls
Drubio

Cosa significa " [@]in" "${buckets[@]}"?
Joe,

3

Dovrai scrivere uno script che analizzi e richieda questi dati perché, per quanto ne so, non esiste uno strumento o una funzione cli che li esegua. Fortunatamente, puoi raccogliere tutte queste informazioni con la CLI.

  1. Elenca e analizza tutti gli account nella tua organizzazione.

    aws organizations list-accounts
    
  2. Per ogni account, elenca e analizza tutti i bucket.

    aws s3api list-buckets --query "Buckets[].Name"
    
  3. Infine, ottieni le dimensioni di ciascun bucket all'interno di ciascun account. Puoi usare lo stesso comando cli che eri prima, ma tieni presente che stai elencando le dimensioni individuali di ciascun articolo all'interno del bucket. È inoltre possibile utilizzare questo comando cli per ottenere la dimensione del bucket.

    aws s3api list-objects --bucket BUCKETNAME --output json --query "
    [sum(Contents[].Size), length(Contents[])]"
    

1
1. non elenca le informazioni del profilo dell'account AWS. Non ho avuto il tempo di regex questo dal file di configurazione aws in cui sono memorizzate queste informazioni, quindi ho appena inserito i valori nello script che ho postato di seguito
Kyle Steenkamp

2

Dovrai scrivere uno script per farlo a meno che non ci sia uno strumento per farlo che non riesco a trovare.

Se stai lavorando con più account aws dovrai passare da un account all'altro per ottenere le dimensioni del bucket.

Per ottenere tutti i secchi e le loro dimensioni totali è possibile utilizzare ' aws s3api '. Usando list-bucketspuoi ottenere tutti i secchi in un account e poi sarai in grado di elencare le loro dimensioni e provare l'account successivo.


1
Per fare questo ho scritto uno script Python con boto3: gist.github.com/rwiggins/b945b5ec1693c1d473a814915adcee8c (nota: utilizza GetMetricStatistics di CloudWatch per estrarre in modo efficiente le dimensioni del bucket / senza sommare tutte le dimensioni degli oggetti in un bucket)
Reid

1

Nessuno di questi mostra la dimensione del bucket se il controllo delle versioni è attivato e enormi quantità di dati sono state "cancellate". Nella console della GUI S3, la scheda Metriche mostra ciò che ti viene addebitato.

Scraped il seguente comando da uno script trovato su /server/84815/how-can-i-get-the-size-of-an-amazon-s3-bucket . Funziona bene su Windows. Sostituto yourregione 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

Ciò fornisce la dimensione media in byte nei giorni limitati dai tempi di inizio e fine. Il risultato può scioccarti se sul tuo bucket è abilitato il Versioning (attivo) e ritieni di aver "eliminato" enormi quantità di dati.

Per ripulire i bucket abilitati per il controllo delle versioni, è necessario impostare una regola del ciclo di vita. Puoi scegliere di eliminare definitivamente le versioni precedenti. Puoi omettere le caselle di controllo nel passaggio Transizioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.