Zeigen Sie alle AWS S3-Buckets an und listen Sie jeden verwendeten Buckets-Speicher auf

11

Ich habe mehrere AWS- Konten und muss alle S3- Buckets pro Konto auflisten und dann die Gesamtgröße der einzelnen Buckets anzeigen.

Derzeit kann ich nur die Speichergröße eines einzelnen S3- Buckets anzeigen mit:

aws s3 ls s3://mybucket --recursive --human-readable --summarize
Kyle Steenkamp
quelle
S3 Select wurde vor einigen Tagen in re veröffentlicht: invent
Abdennour TOUMI
Vielleicht möchten Sie diesen Code ausprobieren, den ich geschrieben habe, um dasselbe selbst zu erreichen: github.com/insperitas/s3-data
jimmy978654321

Antworten:

11

Beschluss 1

Also habe ich das mit dem folgenden Skript gelöst. Ich habe die Frage ursprünglich nur für den Fall gestellt, dass es einen einfacheren Weg gibt, den ich nicht kenne.

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

Beschluss 2

Verwenden von Dashboards in CloudWatch in der AWS-Konsole.

Sie können dann einfach alle S3-Buckets angeben und die Zahlenstatistiken hinzufügen, um die Speichergrößenmetriken anzuzeigen.

Dies kostet Sie nicht viele API-Aufrufe und kann je nach Größe der s3-Buckets erheblich schneller sein (es dauert eine Weile, bis die Größe bei sehr großen Buckets erreicht ist).

Urteil

Das Erstellen des Dashboards ( Auflösung 2 ) für jedes AWS-Konto war für mich die effizienteste Option, da ich mich viel schneller anmelden und die Metriken manuell von jedem AWS-Konto abrufen kann, als auf den Abschluss der Skript-API-Aufrufe zu warten. :(

Kyle Steenkamp
quelle
Warum | awk END'{print}'?
Tensibai
1
Wenn Sie die rekursive Option verwenden, wird die Größe jedes Ordners und jeder Datei angezeigt, und ich benötige nur die Ausgabe der Gesamtgröße des Buckets.
Kyle Steenkamp
Sie müssen einen Zeitraum von 1 Tag oder mehr auswählen, damit im Dashboard etwas angezeigt wird
Jeremy Leipzig,
2
Beachten Sie, dass die in Auflösung 2 vorgeschlagene Lösung Ihre Cloudwatch-Kosten erhöht, da Dashboards derzeit jeweils 3 US-Dollar kosten. aws.amazon.com/cloudwatch/pricing/?nc1=h_ls
Drubio
Was bedeutet das [@]in "${buckets[@]}"?
Joe
3

Sie müssen ein Skript schreiben, das diese Daten analysiert und abfragt, da meines Wissens kein Tool oder keine CLI-Funktion vorhanden ist, die dies ausführt. Glücklicherweise können Sie all diese Informationen mit der CLI sammeln.

  1. Listen Sie alle Konten in Ihrer Organisation auf und analysieren Sie sie.

    aws organizations list-accounts
    
  2. Listen Sie für jedes Konto alle Buckets auf und analysieren Sie sie.

    aws s3api list-buckets --query "Buckets[].Name"
    
  3. Schließlich erhalten Sie die Größe jedes Buckets in jedem Konto. Sie können den gleichen Befehl wie zuvor verwenden, aber seien Sie gewarnt, dass Sie die individuelle Größe jedes Elements im Bucket auflisten werden. Sie können diesen Befehl cli auch verwenden, um die Bucket-Größe abzurufen.

    aws s3api list-objects --bucket BUCKETNAME --output json --query "
    [sum(Contents[].Size), length(Contents[])]"
    
PrestonM
quelle
1
1. listet die Profilinformationen des AWS-Kontos nicht auf. Ich hatte keine Zeit, dies aus der aws-Konfigurationsdatei, in der diese Informationen gespeichert sind, neu zu formulieren, also habe ich nur die Werte in dem Skript, das ich unten gepostet habe, fest codiert
Kyle Steenkamp
2

Sie müssen dazu ein Skript schreiben, es sei denn, es gibt ein Tool, das ich nicht finden kann.

Wenn Sie mit mehreren aws-Konten arbeiten, müssen Sie zwischen Konten wechseln, um die Bucket-Größen zu erhalten.

Um alle Eimer und ihre Gesamtgröße zu erhalten, können Sie ' aws s3api ' verwenden. Mit list-bucketskönnen Sie alle Buckets in einem Konto abrufen und dann ihre Größen auflisten und das nächste Konto ausprobieren.

Briansbum
quelle
1
Ich habe dazu ein Python-Skript mit boto3 geschrieben: gist.github.com/rwiggins/b945b5ec1693c1d473a814915adcee8c (Hinweis: Verwendet GetMetricStatistics von CloudWatch, um die Bucket-Größen effizient zu ziehen / ohne alle Objektgrößen in einem Bucket zu summieren)
Reid
1

Keiner dieser Werte zeigt die Größe des Buckets an, wenn die Versionierung aktiviert ist und große Datenmengen "gelöscht" wurden. In der S3-GUI-Konsole wird auf der Registerkarte Metriken angezeigt, was Ihnen in Rechnung gestellt wird.

Der folgende Befehl wurde aus einem Skript entfernt, das unter /server/84815/how-can-i-get-the-size-of-an-amazon-s3-bucket gefunden wurde . Es funktioniert gut unter Windows. Ersatz yourregionund 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

Dies gibt die durchschnittliche Größe in Bytes über die Tage an, die durch die Start- und Endzeit begrenzt sind. Das Ergebnis kann Sie schockieren, wenn in Ihrem Bucket die Versionierung aktiviert (aktiv) ist und Sie der Meinung sind, dass Sie große Datenmengen "gelöscht" haben.

Um versionierungsfähige Buckets zu bereinigen, müssen Sie eine LifeCycle-Regel festlegen. Sie können Vorherige Versionen dauerhaft löschen. Sie können die Kontrollkästchen im Schritt Übergänge weglassen.

Neuling
quelle