Lihat semua ember AWS S3 dan daftarkan setiap penyimpanan ember yang digunakan

11

Saya memiliki beberapa akun AWS dan saya harus mendaftar semua ember S3 per akun dan kemudian melihat setiap ukuran total ember.

Saat ini, saya hanya dapat melihat ukuran penyimpanan satu ember S3 dengan:

aws s3 ls s3://mybucket --recursive --human-readable --summarize
Kyle Steenkamp
sumber
S3 Select dirilis beberapa hari lalu di re: invent 2017 twitch.tv/videos/206752912
Abdennour TOUMI
Anda mungkin ingin mencoba kode ini yang saya tulis untuk mencapai hal yang sama sendiri: github.com/insperitas/s3-data
jimmy978654321

Jawaban:

11

Resolusi 1

Jadi saya memecahkan ini dengan skrip berikut. Saya awalnya memposting pertanyaan kalau-kalau ada cara yang lebih mudah yang tidak saya sadari.

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

Resolusi 2

Menggunakan Dashboard di CloudWatch di konsol AWS.

Anda kemudian dapat dengan mudah menentukan semua ember S3 dan menambahkan statistik angka untuk menunjukkan metrik ukuran penyimpanan.

Ini tidak akan dikenakan biaya banyak panggilan API dan dapat secara signifikan lebih cepat tergantung pada ukuran ember s3 (butuh beberapa saat untuk mendapatkan ukuran pada ember yang sangat besar).

Putusan

Membuat Dasbor ( Resolusi 2 ) pada setiap akun AWS adalah opsi paling efisien bagi saya karena cara ini lebih cepat bagi saya untuk masuk dan mengambil metrik secara manual dari setiap akun AWS daripada menunggu skrip panggilan API selesai. :(

Kyle Steenkamp
sumber
Mengapa | awk END'{print}'?
Tensibai
1
Menggunakan opsi rekursif menunjukkan ukuran setiap folder dan file dan saya hanya perlu output dari ukuran total ember.
Kyle Steenkamp
Anda harus memilih periode '1 hari' atau lebih untuk dasbor untuk menampilkan apa pun
Jeremy Leipzig
2
Berhati-hatilah karena solusi yang diusulkan dalam Resolusi 2 menambah biaya Cloudwatch Anda karena dasbor memiliki biaya $ 3 masing-masing saat ini. aws.amazon.com/cloudwatch/pricing/?nc1=h_ls
Drubio
Apa yang [@]di "${buckets[@]}"berarti?
Joe
3

Anda harus menulis skrip yang mem-parsing dan menanyakan data ini karena sejauh yang saya ketahui, tidak ada alat atau fungsi klien yang melakukan ini. Untungnya, Anda dapat mengumpulkan semua informasi ini dengan CLI.

  1. Daftar dan parsing semua akun di org Anda.

    aws organizations list-accounts
    
  2. Untuk setiap akun, daftarkan dan parsing semua kotak.

    aws s3api list-buckets --query "Buckets[].Name"
    
  3. Terakhir, dapatkan ukuran setiap ember dalam setiap akun. Anda dapat menggunakan perintah cli yang sama seperti sebelumnya, tetapi berhati-hatilah bahwa Anda akan membuat daftar ukuran masing-masing dari setiap item dalam ember. Anda juga dapat menggunakan perintah cli ini untuk mendapatkan ukuran bucket.

    aws s3api list-objects --bucket BUCKETNAME --output json --query "
    [sum(Contents[].Size), length(Contents[])]"
    
PrestonM
sumber
1
1. tidak mencantumkan informasi profil akun AWS. Saya tidak punya waktu untuk regex ini dari file konfigurasi aws di mana informasi ini disimpan jadi saya hanya hardcoded nilai-nilai dalam skrip saya diposting di bawah ini
Kyle Steenkamp
2

Anda harus menulis skrip untuk melakukan ini kecuali ada alat untuk melakukannya yang tidak dapat saya temukan.

Jika Anda bekerja dengan beberapa akun aws, Anda harus beralih antar akun untuk mendapatkan ukuran bucket.

Untuk mendapatkan semua ember dan ukuran totalnya, Anda dapat menggunakan ' aws s3api '. Dengan menggunakan list-bucketsAnda bisa mendapatkan semua ember di satu akun dan Anda akan dapat membuat daftar ukurannya dan mencoba akun berikutnya.

Briansbum
sumber
1
Saya menulis skrip Python dengan boto3 untuk melakukan ini: gist.github.com/rwiggins/b945b5ec1693c1d473a814915adcee8c (catatan: menggunakan GetMetricStatistics CloudWatch untuk menarik ukuran ember secara efisien / tanpa menjumlahkan semua ukuran objek dalam ember)
Reid
1

Tak satu pun dari ini menunjukkan ukuran ember jika Versi dihidupkan dan sejumlah besar data telah "dihapus". Di konsol S3 GUI, tab Metrik menunjukkan untuk apa Anda ditagih.

Menghapus perintah berikut dari skrip yang ditemukan di /server/84815/how-can-i-get-the-size-of-an-amazon-s3-bucket . Ini bekerja dengan baik pada Windows. Pengganti yourregiondan 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

Ini memberikan ukuran rata-rata dalam byte selama beberapa hari yang dibatasi oleh waktu mulai dan berakhir. Hasilnya dapat mengejutkan Anda jika bucket Anda mengaktifkan Versi (aktif) dan Anda merasa telah "menghapus" sejumlah besar data.

Untuk membersihkan bucket yang mendukung Versi, Anda harus menetapkan aturan LifeCycle. Anda dapat memilih untuk menghapus Versi Sebelumnya secara permanen. Anda dapat menghilangkan kotak centang pada langkah Transisi.

Pemula
sumber