Tüm AWS S3 kovalarını görüntüleyin ve kullanılan her kova deposunu listeleyin


11

Birden fazla AWS hesabım var ve hesap başına tüm S3 gruplarını listelemem ve ardından her bir grubun toplam boyutunu görmem gerekiyor .

Şu anda, tek bir S3 kovasının depolama boyutunu yalnızca aşağıdakilerle görüntüleyebiliyorum :

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

S3 Select birkaç gün önce serbest bırakıldı: icat 2017 twitch.tv/videos/206752912
Abdennour TOUMI

Aynı şeyi kendim elde etmek için yazdığım bu kodu denemek isteyebilirsiniz: github.com/insperitas/s3-data
jimmy978654321

Yanıtlar:


11

Çözüm 1

Bu yüzden aşağıdaki senaryo ile çözdüm. Başlangıçta, farkında olmadığım daha kolay bir yol olması durumunda soruyu gönderdim.

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

Çözüm 2

Kullanılması Tablolarını içinde CloudWatch AWS konsolda.

Ardından tüm S3 gruplarını belirtebilir ve depolama boyutu metriklerini göstermek için sayı istatistiklerini ekleyebilirsiniz.

Bu size çok sayıda API çağrısına mal olmayacak ve s3 kovaların boyutuna bağlı olarak önemli ölçüde daha hızlı olabilir (çok büyük kovalarda boyut elde etmek biraz zaman alır).

Karar

Her AWS hesabında Gösterge Tablosu ( Çözünürlük 2 ) oluşturmak benim için en verimli seçimdi, çünkü oturum açıp metrikleri her AWS hesabından manuel olarak almam komut dosyalarının API çağrılarının bitmesini beklemekten çok daha hızlı. :(


Neden | awk END'{print}'?
Tensibai

1
Özyinelemeli seçeneğini kullanmak her klasör ve dosyanın boyutunu gösterir ve yalnızca grubun toplam boyutunun çıktısına ihtiyacım var.
Kyle Steenkamp

Gösterge tablosunun herhangi bir şey görüntülemesi için '1 gün' veya daha uzun bir süre seçmeniz gerekiyor
Jeremy Leipzig

2
Çözüm 2'de önerilen çözümün, şu anda gösterge tablolarının her biri için 3 ABD doları olduğu için Cloudwatch maliyetinizi artırdığını unutmayın. aws.amazon.com/cloudwatch/pricing/?nc1=h_ls
Drubio

Neyi [@]de "${buckets[@]}"ortalama?
Joe

3

Bildiğim kadarıyla, bunu gerçekleştiren bir araç veya cli işlevi olmadığından, bu verileri ayrıştıran ve sorgulayan bir komut dosyası yazmanız gerekir. Neyse ki, tüm bu bilgileri CLI ile toplayabilirsiniz.

  1. Kuruluşunuzdaki tüm hesapları listeleyin ve ayrıştırın.

    aws organizations list-accounts
    
  2. Her hesap için tüm bölümleri listeleyin ve ayrıştırın.

    aws s3api list-buckets --query "Buckets[].Name"
    
  3. Son olarak, her hesaptaki her grubun boyutunu elde edin. Daha önce kullandığınız aynı cli komutunu kullanabilirsiniz, ancak gruptaki her bir öğenin tek tek boyutunu listeleyeceğiniz konusunda uyarıda bulunun. Bu cli komutunu kova boyutunu almak için de kullanabilirsiniz.

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

1
1. AWS hesabının profil bilgilerini listelemez. Ben bu bilginin saklandığı aws yapılandırma dosyasından regex için bu zaman yoktu, bu yüzden ben sadece aşağıda yayınlanan komut dosyasında değerleri hardcoded
Kyle Steenkamp

2

Bunu yapamadığım bir araç yoksa bunu yapmak için bir komut dosyası yazmanız gerekecek.

Birden çok aws hesabıyla çalışıyorsanız, grup boyutlarını elde etmek için hesaplar arasında geçiş yapmanız gerekir.

Tüm kovaları ve toplam boyutlarını almak için ' aws s3api ' kullanabilirsiniz. Kullanarak list-bucketstüm bölümleri tek bir hesapta alabilir ve ardından boyutlarını listeleyebilir ve bir sonraki hesabı deneyebilirsiniz.


1
Bunu yapmak için boto3 ile bir Python betiği yazdım: gist.github.com/rwiggins/b945b5ec1693c1d473a814915adcee8c (not: CloudWatch'ın GetMetricStatistics'i, kova boyutlarını verimli bir şekilde / bir kovadaki tüm nesne boyutlarını toplamadan çekmek için kullanır)
Reid

1

Sürüm oluşturma özelliği açıksa ve çok miktarda veri "silindiğinde" bunların hiçbiri bölümün boyutunu göstermez. S3 GUI konsolunda, Metrikler sekmesi faturalandırıldığınız şeyi gösterir.

Https://serverfault.com/questions/84815/how-can-i-get-the-size-of-an-amazon-s3-bucket adresinde bulunan bir komut dosyasından aşağıdaki komutu not edin . Windows üzerinde iyi çalışır. Yerine koyun yourregionve 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

Bu, başlangıç ​​ve bitiş zamanlarının sınırladığı günlerde bayt cinsinden ortalama boyutu verir. Kepçenizde Sürüm Oluşturma Etkin (etkin) varsa ve büyük miktarda veriyi "sildiğinizi" düşünüyorsanız sonuç sizi şok edebilir .

Sürüm oluşturma özellikli bölümleri temizlemek için bir LifeCycle kuralı ayarlamanız gerekir. Önceki Sürümleri kalıcı olarak silmeyi seçebilirsiniz. Geçişler adımında onay kutularını atlayabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.