Saya ingin membuat grafik ukuran (dalam byte, dan # item) dari ember Amazon S3 dan saya sedang mencari cara yang efisien untuk mendapatkan data.
Alat s3cmd menyediakan cara untuk mendapatkan ukuran file total menggunakan s3cmd du s3://bucket_name
, tapi saya khawatir tentang kemampuannya untuk skala karena sepertinya mengambil data tentang setiap file dan menghitung jumlah sendiri. Karena Amazon menagih pengguna dalam GB-Bulan, rasanya aneh bahwa mereka tidak mengekspos nilai ini secara langsung.
Meskipun REST API Amazon mengembalikan jumlah item dalam ember, s3cmd tampaknya tidak mengeksposnya. Saya bisa melakukannya s3cmd ls -r s3://bucket_name | wc -l
tetapi itu seperti retasan.
Pustaka Ruby AWS :: S3 tampak menjanjikan, tetapi hanya menyediakan # item bucket, bukan ukuran total bucket.
Adakah yang mengetahui adanya alat baris perintah atau pustaka (lebih suka Perl, PHP, Python, atau Ruby) yang menyediakan cara untuk mendapatkan data ini?
sumber
Jawaban:
AWS CLI sekarang mendukung
--query
parameter yang mengambil ekspresi JMESPath .Ini berarti Anda dapat menjumlahkan nilai ukuran yang diberikan dengan
list-objects
menggunakansum(Contents[].Size)
dan menghitung sukalength(Contents[])
.Ini dapat dijalankan menggunakan AWS CLI resmi seperti di bawah ini dan diperkenalkan pada Februari 2014
sumber
s4cmd du s3://bucket-name
s3cmd
harus memiliki biaya overhead yang sama denganAWS CLI
. Dalam kode itu ditampilkans3cmd
membuat permintaan untuk setiap direktori dalam ember.aws s3api --profile PROFILE_NAME list-objects --bucket BUCKET_NAME --output json --query "[sum(Contents[].Size), length(Contents[])]" | awk 'NR!=2 {print $0;next} NR==2 {print $0/1024/1024/1024" GB"}'
s4cmd du
luar biasa, terima kasih @Brent Faust! catatan kecil (untuk yang bersangkutan) yang perlu Anda tambahkan-r
untuk mendapatkan ukuran sub-direktori juga.Ini sekarang dapat dilakukan secara sepele hanya dengan klien command line AWS resmi:
Dokumentasi resmi
Ini juga menerima awalan jalur jika Anda tidak ingin menghitung seluruh ember:
sumber
Konsol AWS:
Pada 28 Juli 2015 Anda bisa mendapatkan informasi ini melalui CloudWatch . Jika Anda menginginkan GUI, buka konsol CloudWatch : (Pilih Wilayah>) Metrik> S3
Perintah AWS CLI:
Ini jauh lebih cepat daripada beberapa perintah lain yang diposting di sini, karena tidak meminta ukuran setiap file secara individual untuk menghitung jumlahnya.
Penting : Anda harus menentukan StorageType dan BucketName dalam argumen dimensi jika tidak Anda tidak akan mendapatkan hasil. Semua Anda perlu mengubah adalah
--start-date
,--end-time
, danValue=toukakoukan.com
.Berikut skrip bash yang dapat Anda gunakan untuk menghindari keharusan menentukan
--start-date
dan--end-time
secara manual.sumber
Invalid value ('1525354418') for param timestamp:StartTime of type timestamp
s3cmd dapat melakukan ini:
s3cmd du s3://bucket-name
sumber
BotoClientError: Bucket names cannot contain upper-case characters when using either the sub-domain or virtual hosting calling format.
untuk ember dengan karakter huruf besar.Jika Anda mengunduh laporan penggunaan , Anda bisa membuat grafik nilai harian untuk
TimedStorage-ByteHrs
bidang tersebut.Jika Anda ingin nomor itu dalam GiB, cukup bagi dengan
1024 * 1024 * 1024 * 24
(itu adalah GiB-jam untuk siklus 24 jam). Jika Anda ingin nomor dalam byte, cukup bagi dengan 24 dan grafik.sumber
Menggunakan alat baris perintah AWS s3 resmi:
Ini adalah perintah yang lebih baik, tambahkan saja 3 parameter berikut
--summarize --human-readable --recursive
setelahnyaaws s3 ls
.--summarize
tidak diperlukan meskipun memberikan sentuhan yang bagus pada ukuran total.sumber
s4cmd adalah cara tercepat yang saya temukan (utilitas baris perintah yang ditulis dengan Python):
Sekarang untuk menghitung seluruh ukuran bucket menggunakan beberapa utas:
sumber
s4cmd du s3://123123drink
tidak akan dengan mudah mengembalikan ukuran ember. Untuk mendapatkan ukuran ember Anda menambahkan rekursif-r
, seperti ini: s4cmd du -r s3: // 123123drink-r
ke contoh di atas untuk menghindari kebingungan ketika orang menggunakan folder yang disimulasikan pada S3).Saya menggunakan S3 REST / Curl API yang terdaftar sebelumnya di utas ini dan melakukan ini:
sumber
Anda dapat menggunakan utilitas s3cmd, misalnya:
sumber
Jadi, berputar-putar melalui API dan memainkan beberapa pertanyaan yang sama, S3 akan menghasilkan seluruh isi ember dalam satu permintaan dan tidak perlu turun ke direktori. Hasilnya kemudian hanya membutuhkan penjumlahan melalui berbagai elemen XML, dan tidak panggilan berulang. Saya tidak memiliki ember sampel yang memiliki ribuan item, jadi saya tidak tahu seberapa baik skala itu, tetapi tampaknya cukup sederhana.
sumber
... Agak terlambat tetapi, cara terbaik yang saya temukan adalah dengan menggunakan laporan di portal AWS. Saya membuat kelas PHP untuk mengunduh dan memilah laporan. Dengan itu Anda bisa mendapatkan jumlah total objek untuk setiap ember, ukuran total dalam GB atau byte jam dan banyak lagi.
Lihatlah dan beri tahu saya apakah itu membantu
AmazonTools
sumber
Saya sarankan menggunakan Laporan Penggunaan S3 untuk kotak besar , lihat Cara saya tentang cara mendapatkannya. Pada dasarnya Anda perlu mengunduh Laporan Penggunaan untuk layanan S3 untuk hari terakhir dengan Penyimpanan Jangka Waktu - Byte Jam dan parsing untuk mendapatkan penggunaan disk.
sumber
Dokumentasi AWS memberi tahu Anda cara melakukannya:
Ini adalah output yang Anda dapatkan:
sumber
Untuk pendekatan yang benar-benar berteknologi rendah: gunakan klien S3 yang dapat menghitung ukuran untuk Anda. Saya menggunakan Panic's Transmit, klik pada ember, lakukan "Dapatkan Info" dan klik tombol "Hitung". Saya tidak yakin seberapa cepat atau akurat itu dalam kaitannya dengan metode lain, tetapi tampaknya memberikan kembali ukuran yang saya harapkan.
sumber
Karena ada begitu banyak jawaban, saya pikir saya akan menjawabnya sendiri. Saya menulis implementasi saya di C # menggunakan LINQPad. Salin, tempel, dan masukkan dalam kunci akses, kunci rahasia, titik akhir wilayah, dan nama bucket yang ingin Anda query. Juga, pastikan untuk menambahkan paket nuget AWSSDK.
Pengujian terhadap salah satu ember saya, itu memberi saya hitungan 128075 dan ukuran 70,6GB. Saya tahu itu 99,9999% akurat, jadi saya baik dengan hasilnya.
sumber
Jika Anda ingin mendapatkan ukuran dari AWS Console:
Secara default, Anda akan melihat Metrik Penyimpanan ember
sumber
Saya tahu ini adalah pertanyaan yang lebih lama tetapi ini adalah contoh PowerShell:
Get-S3Object -BucketName <buckename> | select key, size | foreach {$A += $_.size}
$A
berisi ukuran bucket, dan ada parameter keyname jika Anda hanya ingin ukuran folder tertentu dalam bucket.sumber
Untuk memeriksa semua ukuran bucket, coba skrip bash ini
sumber
Anda bisa menggunakan
s3cmd
:atau
Ini memberikan objek total dan ukuran ember dalam bentuk yang sangat mudah dibaca.
sumber
du
traverse mendaftar semua objek atau mengambil metadata? Akan sangat menyukai versi api dari versi laporan atau apa yang ditampilkan di konsol aws ...Hai ada alat pencarian metdata untuk AWS S3 di https://s3search.p3-labs.com/ . Alat ini memberikan statistik tentang objek dalam ember dengan pencarian di metadata.
sumber
Juga Hanzo S3 Alat melakukan hal ini. Setelah diinstal, Anda dapat melakukan:
Tapi saya percaya ini juga dijumlahkan di sisi klien dan tidak diambil melalui AWS API.
sumber
Dengan program Cloudberry juga memungkinkan untuk membuat daftar ukuran ember, jumlah folder dan total file, mengklik "properti" tepat di atas ember.
sumber
Jika Anda tidak ingin menggunakan command-line, pada Windows dan OSX, ada aplikasi manajemen file remote tujuan umum yang disebut Cyberduck . Masuk ke S3 dengan pasangan kunci akses / rahasia Anda, klik kanan pada direktori, klik
Calculate
.sumber
Saya menulis skrip Bash, s3-du.sh yang akan mencantumkan file dalam ember dengan s3ls, dan mencetak jumlah file, dan ukuran seperti
Skrip lengkap:
Itu memang melakukan ukuran subdirektori, karena Amazon mengembalikan nama direktori dan ukuran semua isinya.
sumber
CloudWatch memiliki dasbor layanan S3 default sekarang yang mencantumkannya dalam grafik yang disebut "Bucket Size Bytes Average". Saya pikir tautan ini akan berfungsi untuk siapa pun yang sudah masuk ke AWS Console:
sumber
Cara berikut menggunakan AWS PHP SDK untuk mendapatkan ukuran total bucket.
sumber
Ini bekerja untuk saya ..
sumber