Configurar cubos de AWS S3 como filesystems de tipo FUSE (Linux)

Amazon S3 (Simple Storage Service) es el servicio que provee Amazon para el almacenamiento de datos en la nube. Cuenta con diversas herramientas para la gestión de los datos almacenados, entre las cuales se encuentra s3cmd, que permite la administración de las unidades de almacenamiento (cubos) creadas en S3 mediante una interfaz de línea de comandos.

Una forma de facilitar la gestión de los datos almacenados en los cubos de S3 consiste en poder montarlos como filesystems de Linux. De este modo podemos trabajar con las carpetas y ficheros almacenados en un cubo utilizando las interfaces propias del sistema Linux (nautilus, comandos shell, …), obteniendo además los beneficios en cuanto a funcionalidad que ello supone. Una limitación existente en los filesystems montados a partir de cubos de S3 es que solamente el usuario root puede trabajar sobre ellos, y por lo tanto el punto de montaje que se utilice debe pertenecer también a este usuario.

Todo lo explicado anteriormente es posible mediante el uso de la herramienta s3fs, la cual permite montar un cubo de S3 como un sistema de ficheros de Linux de tipo FUSE (Filesystem in Userspace). El objetivo de este post es ofrecer un procedimiento de instalación y configuración de la herramienta s3fs, así como un pequeño tutorial con el fin de facilitar el uso de la misma.

Para llevar a cabo la instalación y configuración de la herramienta s3fs deberemos realizar los siguientes pasos:

1.- Descarga del software: Buscando esta herramienta en internet, se pueden encontrar dos versiones (s3fs y s3fs-c) cuyas diferencias son notables en lo que a funcionalidad se refiere. Tras haber probado ambas, finalmente me decanté por s3fs-c debido principalmente a que soporta los objetos de carpeta creados a través de la consola de gestión de AWS (la versión s3fs no visualiza este tipo de objetos). Podéis descargaros la versión s3fs-c en la siguiente URL, donde además podréis encontrar una descripción del producto en la que se indican las diferencias existentes entre ambas versiones:

github.com/tongwang/s3fs-c

2.- Requisitos previos a la compilación de la herramienta: Con el fin de asegurarnos de que el sistema disponga de todas las librerías y utilidades necesarias para poder llevar a cabo la compilación de s3fs-c, instalar los siguientes paquetes en función del sistema operativo con el que estemos trabajando:

  • Para Linux Debian / Ubuntu:
$ sudo apt-get install build-essential libfuse-dev fuse-utils libcurl4-openssl-dev libxml2-dev mime-support

 

  • Para Linux Red Hat / Fedora / CentOS:
$ sudo yum install gcc libstdc++-devel gcc-c++ fuse fuse-devel curl-devel libxml2-devel openssl-devel mailcap

 

3.- Instalación y configuración de s3fs-c: Una vez descargado el paquete. deberéis descomprimir su contenido y por último compilarlo:

$ unzip tongwang-s3fs-c-650f867.zip
$ cd tongwang-s3fs-c-650f867
$ ./configure --prefix=/usr
$ make
$ sudo make install

 

4.- Configuración de las credenciales de acceso: Para que s3fs pueda establecer conexión con los cubos de S3 que tengamos creados, deberemos configurar las credenciales de seguridad que se van a utilizar en la conexión. Existen tres tipos de credenciales asociadas a cada cuenta de AWS, aunque en este caso trabajaremos con las denominadas claves de acceso. Para configurar s3fs-c deberemos especificarle estas credenciales de seguridad mediante cualquiera de los siguientes métodos:

  • Utilizando la opción de fichero de credenciales (passwd_file) mediante línea de comando.
  • Definiendo en el sistema las variables de entorno AWSACCESSKEYID y AWSSECRETACCESSKEY.
  • Configurando el fichero .passwd-s3fs en el $HOME del usuario.
  • Configurando el fichero de sistema /etc/passwd-s3fs.

En este post nos centraremos en explicar el primer y el cuarto método::

  • Añadir la opción de fichero de credenciales (passwd_file) mediante línea de comando: Para utilizar este método deberéis definir previamente el fichero de credenciales y referenciarlo por medio de la variable de entorno AWS_CREDENTIAL_FILE. Es posible que esto ya lo tengáis hecho debido a que este fichero es el mismo que utiliza la herramienta s3cmd, pero en caso contrario podéis realizarlo del modo que se indica a continuación:
$ cat <<_EOF >$HOME/<nom_fichero>.keys     # Seleccionar la ruta que se desee para guardar el fichero
AWSAccessKeyId=<id_clave_de_acceso>
AWSSecretKey=<clave_de_acceso_secreta>
_EOF

$ export AWS_CREDENTIAL_FILE=$HOME/<nom_fichero>.keys
$ echo "export AWS_CREDENTIAL_FILE=$HOME/<nom_fichero>.keys" >> /etc/profile     # Ejecutar con usuario root

 

  • Configuración del fichero de sistema /etc/passwd-s3fs: Para ello bastará con ejecutar, asumiendo el rol del usuario root, el siguiente comando:
$ cat <<_EOF >/etc/passwd-s3fs
AKIAIMDP7ZH33EVZIHGA:l7A1G5NrB4pU1unCgovRVwK6rBTU8yTH4KlBvYVR
_EOF

$ chmod 640 /etc/passwd-s3fs

 

Una vez realizados los pasos descritos anteriormente, ya tendremos configurada la herramienta s3fs-c en el sistema. A continuación, y a modo de pequeño tutorial, os indico los comandos y configuraciones más comunes que podemos usando esta herramienta:

  • Montaje de un cubo: Para ello podemos ejecutar el siguiente comando:
$ sudo s3fs [ -o passwd_file=$AWS_CREDENTIAL_FILE ] <cubo_s3> <punto_de_montaje>

Por ejemplo:

$ sudo s3fs bucketwebsite /s3/bucketwebsite
$ mount
/dev/sda5 on / type ext4 (rw,errors=remount-ro,commit=0)
. . .
. . .
//192.168.1.166/compartido on /home/rmartin/globdatos/compartido type cifs (rw)
s3fs on /s3/bucketwebsite type fuse.s3fs (rw,nosuid,nodev)

* NOTA: La ruta especificada como punto de montaje debe ser propiedad del usuario root:root.

  • Configuración de filesystems montados a través de s3fs-c en el fichero /etc/fstab: Para que durante el arranque del sistema se realice el montaje automático de un sistema de ficheros montado a partir de un cubo de S3, deberemos añadir al fichero /etc/fstab la siguiente línea de configuración:
# sudo vi /etc/fstab
s3fs#<cubo_S3> <punto_de_montaje> fuse defaults 0 0

Por ejemplo:

# sudo vi /etc/fstab
s3fs#bucketwebsite /s3/bucketwebsite fuse defaults 0 0

 

WordPressTwitterBlogger PostShare

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>