249 votos

¿Cómo puedo obtener el tamaño de un depósito de Amazon S3?

Me gustaría gráfico el tamaño (en bytes y el número de elementos) de un depósito de Amazon S3 y estoy buscando una manera eficiente para obtener los datos.

El s3cmd herramientas proporcionan una forma para obtener el tamaño total del archivo usando s3cmd du s3://bucket_name, pero estoy preocupado acerca de su capacidad para escalar, ya que parece que recopila datos acerca de cada archivo y calcula su propia suma. Desde Amazon cargos a los usuarios en el GB-Meses parece raro que no exponga este valor directamente.

Aunque Amazon RESTO de la API devuelve el número de elementos en un cubo, [s3cmd] no parece que la exponga. Yo podría hacer s3cmd ls -r s3://bucket_name | wc -l , pero que parece un hack.

El Rubí AWS::S3 biblioteca parecía prometedor, pero sólo proporciona el # de cubo de elementos, no el total de tamaño de las cubetas.

Es alguien consciente de cualquiera de las otras herramientas de línea de comandos o bibliotecas (prefieren Perl, PHP, Python o Ruby) que proporcionan maneras de obtener estos datos?

146voto

Christopher Hackett Puntos 266

La CLI de AWS ahora es compatible con el --query parámetro que toma un JMESPath expresiones.

Esto significa que usted puede sumar los valores de tamaño dado por list-objects uso de sum(Contents[].Size) y contar como length(Contents[]).

Este puede ser ejecutado utilizando el oficial de la CLI de AWS como a continuación y se introdujo en Febrero de 2014

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

103voto

Ya que es el primer resultado de google, puedo responder más tarde. s3cmd puede hacer esto : s3cmd du s3://bucket-name

22voto

Si descarga un informe de uso, usted puede graficar los valores diarios para la TimedStorage-ByteHrs de campo.

Si desea que el número en GiB, solo hay que dividir por 1024 * 1024 * 1024 * 24 (del GiB-horas para un ciclo de 24 horas). Si desea que el número de bytes, solo hay que dividir por 24 y gráfico de distancia.

6voto

Vic Puntos 214

He usado el S3 RESTO/Curl API enumerados anteriormente en este hilo e hice esto:

<?php
if (!class_exists('S3')) require_once 'S3.php';

// Instantiate the class
$s3 = new S3('accessKeyId', 'secretAccessKey');
S3::$useSSL = false;

// List your buckets:
echo "S3::listBuckets(): ";
echo '<pre>' . print_r($s3->listBuckets(), 1). '</pre>';

$totalSize = 0;
$objects = $s3->getBucket('name-of-your-bucket');
foreach ($objects as $name => $val) {
    // If you want to get the size of a particular directory, you can do
    // only that.
    // if (strpos($name, 'directory/sub-directory') !== false)
    $totalSize += $val['size'];
}

echo ($totalSize / 1024 / 1024 / 1024) . ' GB';
?>

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: