Pere Garriga

Obtener el tamaño bucket de S3 con la SDK para PHP

Obtener tamaño bucket

La SDK de PHP de Amazon Web Services (AWS), no ofrece la posibilidad de obtener el tamaño total de un bucket de forma inmediata con un método. Es por ello que para poder obtenerlo, deberemos obtener todos los objetos del bucket y calcularlo nosotros. Es decir, deberemos recorrer todos los objectos, uno a uno, e ir sumando los tamaños individuales para obtener el total, como se hace en el siguiente algoritmo.


public static function getAmazonS3BucketSize(){
        $sdk = new Sdk([
            'version' => 'latest',
            'region' => REGION,
            'credentials' => CREDENCIALES
        ]);
        
        $s3 = $sdk->createS3();
        
        $objects = $s3->getIterator('ListObjects', array(
            'Bucket' => NOMBRE_BUCKET,
        ));

        $size = 0;
        foreach ($objects as $object) {
            $size = $size + $object['Size'];
        }
        
        return $size;
}

Obtener tamaño directorio de un bucket

Para obtener el tamaño de un folder del bucket, simplemente añadiremos el prefix en el método de ListObjects y usaremos el mismo algoritmo anterior.


        $objects = $s3->getIterator('ListObjects', array(
            'Bucket' => NOMBRE_BUCKET,
            'Prefix' => NOMBRE_DIRECTORIO."/"
        ));

Puede parecer extraña la forma de obtener el tamaño total de un directorio, pero el problema reside en que Amazon no trata a los directorios como lo hace, por ejemplo, Windows. Por tanto, no existe un directorio como tal, sino que simplemente es un Objeto mas.

Enlaces de interes

Leave a Comment