El almacenamiento en la nube o bien en inglés Cloud Storage es una arquitectura de almacenamiento de datos que gestiona los datos como si fueran objetos. A diferencia de otras arquitecturas de almacenamiento, el Cloud Storage o también conocido como Object Storage -aunque son conceptos diferentes, pero no le voy a dar mucha vuelta a esto- no se gestionan los datos como si fuera una jerarquía de archivos.

Cada objeto generalmente incluye los datos en sí, una cantidad variable de metadatos y un identificador global único. Es lo que se utiliza para grandes proyectos como Instagram o Spotify, dos servicios privativos que gestionan una cantidad inmensa de datos. Básicamente los Object Storage son como cubos donde vas metiendo todo lo que necesitas sin importar donde queda, si no que tendrás un identificador que te permitirá coger un fichero en concreto de ese cubo.

En GNU/Linux, hay un comando llamado s3cmd que permite gestionar este tipo de arquitecturas de almacenamiento. Dicho comando fue creado por Amazon y en versiones anteriores solo se podían gestionar los Object Storage de Amazon. Pero desde la última actualización se permite configurar el bucket sin tener que ser obligatoriamente de Amazon.

Instalar s3cmd en GNU/Linux

s3cmd está disponible en los repositorios de la gran mayoría de distribuciones tanto RPM como DEB. Os explicamos como instalar el paquete en las diferentes distribuciones:

  • CentOS/RHEL
yum install s3cmd
  • Debian/Ubuntu
apt install s3cmd
  • OpenSUSE/SUSE Linux Enterprise Server
zypper addrepo http://s3tools.org/repo/SLE_11/s3tools.repo
zypper install s3cmd

Instalar última versión de s3cmd desde las fuentes

Si quieres utilizar la última versión de s3cmd, es necesario instalar desde las fuentes. Por lo que he estado probando, he visto que en Debian 8 tiene en repositorios una versión antigua de s3cmd que no permite gestionar todos los spaces o buckets -según vengas de Amazon o de DigitalOcean-.

wget https://sourceforge.net/projects/s3tools/files/s3cmd/2.0.1/s3cmd-2.0.2.tar.gz
tar xzf s3cmd-2.0.2.tar.gz

Y luego lo instalamos con Python -tenéis que tener el paquete python y python-setuptools instalado-:

cd s3cmd-2.0.2
python setup.py install

Configurar s3cmd

Para configurar s3cmd es necesario tener una Clave de Acceso y una Clave Secreta de la API del servicio que estés utilizando. Una vez la obtengas, simplemente hay que ejecutar este comando que generará un fichero de configuración en /root/.s3cfg:

s3cmd --configure

Y la salida es la siguiente, donde tendréis que añadir vuestros datos:

Enter new values or accept defaults in brackets with Enter.
Refer to user manual for detailed description of all options.

Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables.
Access Key: XXXXXXXX
Secret Key: XXXXXXXXXXXXX
Default Region [US]:

Use "s3.amazonaws.com" for S3 Endpoint and not modify it to the target Amazon S3.
S3 Endpoint [s3.amazonaws.com]: URL del object storage

Use "%(bucket)s.s3.amazonaws.com" to the target Amazon S3. "%(bucket)s" and "%(location)s" vars can be used
if the target S3 system supports dns based buckets.
DNS-style bucket+hostname:port template for accessing a bucket [%(bucket)s.s3.amazonaws.com]: %(bucket).[URL del object storage]

Encryption password is used to protect your files from reading
by unauthorized persons while in transfer to S3
Encryption password: XXXXXXXXX
Path to GPG program [/usr/bin/gpg]:

When using secure HTTPS protocol all communication with Amazon S3
servers is protected from 3rd party eavesdropping. This method is
slower than plain HTTP, and can only be proxied with Python 2.7 or newer
Use HTTPS protocol [Yes]: Yes

On some networks all internet access must go through a HTTP proxy.
Try setting it here if you can't connect to S3 directly
HTTP Proxy server name:

New settings:
Access Key: XXXXXXXX
Secret Key: XXXXXXXXXXXXX
Default Region: US
S3 Endpoint: [URL del object storage]
DNS-style bucket+hostname:port template for accessing a bucket: %(bucket).[URL del object storage]
Encryption password: XXXXXXXXX
Path to GPG program: /usr/bin/gpg
Use HTTPS protocol: True
HTTP Proxy server name:
HTTP Proxy server port: 0

Test access with supplied credentials? [Y/n] Y


Utilizar s3cmd desde la Terminal

Aunque hay programas en GUI para gestionar este tipo de almancenamiento, aquí vamos a ver los comandos por terminal para utilizar S3cmd y poder, por ejemplo, gestionar nuestros scripts para subir copias de seguridad, por ejemplo.

Listar todos los buckets

Para listar los buckets que tenemos tan sólo tenemos que ejecutar:

s3cmd ls

Crear un nuevo bucket

Para crear un nuevo bucket se utiliza este comando, por ejemplo, vamos a crear un bucket llamado voidnull:

s3cmd mb s3://voidnull
Bucket 's3://voidnull/' created

Subir fichero al bucket

Para cargar un fichero en algún bucket que tengamos, tenemos que usar el siguiente comando:

s3cmd put backup.tar.gz s3://voidnull

backup.tar.gz -> s3://voidnull/backup.tar.gz [1 of 1]
190216 of 190216 100% in 0s 1668.35 kB/s done

Subir directorio al bucket

Para cargar un directorio en algún bucket que tengamos, tenemos que usar el siguiente comando:

s3cmd put -r backup s3://voidnull/

backup/file1.txt -> s3://voidnull/backup/file1.txt [1 of 2]
9984 of 9984 100% in 0s 18.78 kB/s done
backup/file2.txt -> s3://voidnull/backup/file2.txt [2 of 2]
0 of 0 0% in 0s 0.00 B/s done

Importante no poner backup/, ya que de poner la barra al final solo te subirá el contenido de ese directorio y no de los directorios que están dentro.

Listar contenido de un bucket

Para listar el contenido de un bucket hay que usar un ls de toda la vida:

s3cmd ls s3://voidnull/

DIR s3://voidnull/backup/
2013-09-03 10:58 190216 s3://voidnull/file.txt

Descargar un fichero del bucket

En alguna ocasión, tendrás que descargar un fichero del bucket, así es como debes de hacerlo:

s3cmd get s3://voidnull/file.txt

s3://voidnull/file.txt -> ./file.txt [1 of 1]
4 of 4 100% in 0s 10.84 B/s done

Eliminar datos del bucket

Para eliminar un fichero o un directorio del bucket:

# Removing file from s3 bucket
s3cmd del s3://voidnull/file.txt

File s3://voidnull/file.txt deleted

# Removing directory from s3 bucket
s3cmd del s3://voidnull/backup

File s3://voidnull/backup deleted

Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación