Haz Backups en Amazon S3 desde Linux

Todos sabemos que los servidores con velocidad, disponibilidad y varios cientos de gigas para almacenamiento no están al alcance de cualquiera. Las tarifas que suelen acompañar a este tipo de servicios han hecho que más de uno optimice al máximo los datos antes de subirlos a Internet, se piense dos veces qué incluir y qué no o que decida montarse un servidor casero con las limitaciones que esto implica (por nombrar dos: velocidad y seguridad).

Pero con la llegada del servicio de almacenamiento masivo S3 de Amazon, podemos disfrutar de alta disponibilidad de datos, velocidad y espacio ilimitado a bajo coste, como puede verse en la tabla de precios de Amazon S3. El servicio funciona de tal manera que pagamos a razón del uso que hacemos. Cuanto más datos alojemos y cuanto más tráfico generemos más pagaremos, pero al contrario de lo que pueda parecer las tarifas son tan bajas que el resultado es un ahorro considerable. A modo de ejemplo alojar 50Gb y generar un tráfico de 20Gb durante un mes nos costaría poco más de 10 Euros. Para cálculos concretos Amazon dispone de esta calculadora online.

Para hacer uso de S3 el primer requisito es registrarse, por lo que si no lo has hecho ya puedes seguir este link para registrarte, o entrar en el portal de Amazon.

El servidor de S3 tiene sus particularidades, y a diferencia de un hosting convencional no tendremos ninguna cuenta FTP/sFTP o similar, así que para trabajar cómodamente con él lo mejor es hacer uso de alguna de las herramientas que se han ido desarrollando alrededor del servicio. Una de las listas más completas la podemos encontrar en el blog de Jeremy Zawodny.

Para hacer backups lo mejor que he encontrado es S3sync, una herramienta muy similar a rSync y que además es gratuita y open source.

Antes de instalar S3sync conviene asegurarnos de que contamos con una versión de Ruby actualizada. Lo he probado tanto en Ubuntu como en Fedora y en ambos la versión preinstalada ha sido suficiente. Es importante comentar que existe una versión S3sync descontinuada, y que la versión que vamos a instalar es la nueva, la reescrita en Ruby.

[root@domU-12-31-39-02-68-55 /]# ruby -v
ruby 1.8.4 (2005-12-24) [i386-linux]


En este caso la versión de Ruby es reciente, por lo que se puede instalar S3sync sin problemas.

Descargamos la aplicación del portal de Amazon S3.

[root@domU-12-31-39-02-68-05 /]# wget http://s3.amazonaws.com/ServEdge_pub/s3sync/s3sync.tar.gz
--05:36:39--  http://s3.amazonaws.com/ServEdge_pub/s3sync/s3sync.tar.gz
           => `s3sync.tar.gz´
Resolving s3.amazonaws.com... 72.21.211.148
Connecting to s3.amazonaws.com|72.21.211.148|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 30,415 (30K) []
100%[====================================>] 30,415        --.--K/s
05:36:39 (7.24 MB/s) - `s3sync.tar.gz´ saved [30415/30415]


Y la descomprimimos.

[root@domU-12-31-39-02-68-05 /]# tar -xzvf s3sync.tar.gz
s3sync
s3sync/HTTPStreaming.rb
s3sync/README.txt
s3sync/README_s3cmd.txt
s3sync/S3.rb
s3sync/s3cmd.rb
s3sync/s3config.rb
s3sync/s3config.yml.example
s3sync/S3encoder.rb
s3sync/s3sync.rb
s3sync/s3try.rb
s3sync/S3_s3sync_mod.rb
s3sync/thread_generator.rb


Cuando nos registramos a Amazon recibimos una clave ID de acceso y una clave secreta que nos valdrá ahora para asociar nuestra cuenta con S3. Asignamos ambas claves al servicio de esta manera. (cambiad ´xxxx´ por vuestro ACCESS KEY ID e ´yyyy´ por vuestro SECRET ACCESS KEY)

[root@domU-12-31-39-02-68-05 /]# AWS_ACCESS_KEY_ID=xxxx
[root@domU-12-31-39-02-68-05 /]# export AWS_ACCESS_KEY_ID
[root@domU-12-31-39-02-68-05 /]# AWS_SECRET_ACCESS_KEY=yyyy
[root@domU-12-31-39-02-68-05 /]# export AWS_SECRET_ACCESS_KEY


Hecho esto todo se reduce a partir de ahora a utilizar el script s3cmd.rb que tenemos dentro de la carpeta s3sync. Antes de nada comentar que la información dentro del S3 se ordena por buckets, que para entendernos se asemejan a las unidades de disco. Es decir, dentro de nuestra cuenta S3 crearemos tantas unidades de disco o buckets como necesitemos, y ahí subiremos nuestros archivos.

Por lo tanto el primer paso será crear los buckets, o al menos uno para empezar a hacer las primeras pruebas. Una vez creado podremos eliminarlos, listarlos, subirles archivos, etc. A continuación una chuleta de los comandos básicos.

Crear un bucket:

./s3cmd.rb createbucket mi_unidad


Eliminar un bucket:

./s3cmd.rb deletebucket mi_unidad


Listar buckets:

./s3cmd.rb listbuckets


Subir un archivo a un bucket:

./s3cmd.rb put mi_unidad:backup.txt example.txt


El comando anterior copiaría el archivo local ´example.txt´ al bucket ´mi_unidad´, donde pasaría a llamarse ´backup.txt´.

Por defecto los archivos que subimos no son accesibles desde un navegador o aplicación que pueda leer URLs, pero podemos hacerlo por medio del siguiente comando:

./s3cmd.rb put mi_unidad:backup.txt example.txt x-amz-acl:public-read


Podemos verificarlo entrando en un navegador e indicando el bucket y el archivo al que queremos acceder:

http://mi_unidad.s3.amazonaws.com/backup.txt

Sigamos con los comandos...

Eliminar un archivo del bucket:

./s3cmd.rb delete mi_unidad:backup.txt


Eliminar todo el contenido de un bucket:

./s3cmd.rb deleteall mi_unidad


Descargar un archivo del bucket si este es público:

wget http://mi_unidad.s3.amazonaws.com/backup.txt


Descargar un archivo del bucket si este es privado:

./s3cmd.rb get mi_unidad:backup.txt example.txt


Para cuando se trata de mover varios archivos, directorios o combinaciones de ambos usamos el script s3sync que también viene incluido. Veamos algunos comandos:

Copiar un directorio local completo al bucket:

./s3sync.rb -r /root/archivos/ mi_unidad:/


Copiaría el contenido del directorio /root/archivos/ en la raiz del bucket.

Copiar un directorio completo del bucket a local:

./s3sync.rb -r mi_unidad: /root/archivos/


Realizaría la operación inversa.

A partir de aquí tan solo necesitamos crear un pequeño script que incluya los comandos necesarios para copiar directorios al bucket, incluirlo en el cron de nuestro equipo y habremos terminado nuestro sistema de backups en S3.

04-04-2009


Comentarios:

22-04-2009 | Fernando Gracias Compadre, voy a replicar tu experiencia. Dale un trabajito de SEO a la pagina, esta info si no la rebusco no la encuentro. Y esta buena.

20-01-2010 | SaveR Listar los archivos contenidos en un bucket también es sencillo con el comando: ./s3cmd.rb list nombrebucket

11-04-2010 | SaveR En s3tools.org se explica como instalar s3cmd y ganar algo de comodidad http://s3tools.org/s3cmd http://s3tools.org/s3cmd-sync

Pues yo pienso que:


Suscribirse