Cómo sincronizar archivos de Linux a Amazon S3

¿Qué es AWS S3?

AWS S3 es el servicio de almacenamiento en la nube de Amazon, que te permite almacenar archivos individuales como objetos en una caja. Puedes cargar archivos desde la línea de comandos en su servidor Linux, o incluso sincronizar directorios completos a S3.

Si solo deseas compartir archivos entre instancias EC2, puedes usar un Volumen EFS y montarlo directamente en múltiples servidores, eliminando la «nube» por completo. Pero no deberías usarlo para todo, porque es mucho más caro que S3, incluso con el acceso poco frecuente activado.

Limita el acceso S3 a un usuario de IAM

Es probable que tu servidor no necesite acceso raíz completo a tu cuenta de AWS, por lo que antes de realizar cualquier tipo de sincronización de archivos, debes crear un nuevo usuario de IAM para que lo use tu servidor. Con un usuario de IAM, puedes limitar su servidor a solo administrar sus buckets S3.

  1. Desde el Consola de administración de IAM, crea un nuevo usuario y habilite el «Acceso programático».Establecer el menú Detalles del usuario.
  2. Se te pedirá que elija permisos para este usuario. Crea un nuevo grupo y asígnale el permiso «AmazonS3FullAccess».Asignación de permisos de grupo.
  3. Después de eso, se te dará una clave de acceso y una clave secreta. Toma nota de esto; los necesitarás para autenticar tu servidor.
  4. También puedes asignar manualmente permisos S3 más detallados, como permiso para usar un depósito específico o solo para cargar archivos, pero limitar el acceso a solo S3 debería estar bien en la mayoría de los casos.

Sincronización de archivos con s3cmd

s3cmd es una utilidad diseñada para facilitar el trabajo con S3 desde la línea de comandos. No forma parte de la AWS CLI, por lo que deberás instalarlo manualmente desde el administrador de paquetes de tu distribución. Para sistemas basados ​​en Debian como Ubuntu, sería de la siguiente manera:

sudo apt-get install s3cmd

Una vez s3cmd está instalado, deberás vincularlo con el usuario de IAM que creó para administrar S3. Ejecuta la configuración con:

s3cmd --configure

Se te pedirá la clave de acceso y la clave secreta que te proporcionó la Consola de administración de IAM. Pega los de aquí. Hay algunas opciones más, como cambiar los puntos finales para S3 o habilitar el cifrado, pero puedes dejarlos todos predeterminados y simplemente seleccionar «Y» al final para guardar la configuración.

Para cargar un archivo, usa:

s3cmd put file s3://bucket

Reemplazar «bucket» con el nombre de tu carpeta. Para recuperar esos archivos, ejecuta:

s3cmd get s3://bucket/remotefile localfile

Y, si deseas sincronizar sobre un directorio completo, ejecuta:

s3cmd sync directory s3://bucket/

Esto copiará todo el directorio en una carpeta en S3. La próxima vez que lo ejecutes, solo copiará los archivos que han cambiado desde la última vez que se ejecutó. No eliminará ningún archivo a menos que lo ejecutes con la opción  --delete-removed.

s3cmd sync no se ejecutará automáticamente, por lo que si deseas mantener este directorio actualizado regularmente, deberás ejecutar este comando regularmente. Puedes automatizar esto con cron; Abre tu crontab con crontab -ey agregue este comando para finalizar:

0 0 * * * s3cmd sync directory s3://bucket >/dev/null 2>&1

Esto sincronizará «directorio» a «bucket» una vez al día. Por cierto, si crontab -e se une a vim, puedes cambiar el editor de texto predeterminado con export VISUAL=nano;o lo que prefieras.

s3cmd tiene muchos subcomandos; puedes copiar entre bucketscon cp, mover archivos con mv, e incluso crear y eliminar depósitos de la línea de comando con mb y rb, respectivamente. Utilizar s3cmd -h para una lista completa.

Otra opción: AWS CLI

Más allá s3cmd, hay algunas otras opciones de línea de comandos para sincronizar archivos a S3. AWS proporciona sus propias herramientas con la CLI de AWS. Necesitará Python 3+, y puede instalar la CLI desde pip3 con:

pip3 install awscli --upgrade --user

Esto instalará el aws comando, que puede usar para interactuar con los servicios de AWS. Deberá configurarlo de la misma manera que s3cmd, lo que puede hacer con:

aws configure

Se le pedirá que ingrese la clave de acceso y la clave secreta para su usuario de IAM.

La sintaxis para AWS CLI es similar a s3cmd. Para cargar un archivo, use:

aws s3 cp file s3://bucket

Para sincronizar una carpeta completa, use:

aws s3 sync folder s3://bucket

Puede copiar e incluso sincronizar entre cubos con los mismos comandos. Puedes usar aws help para obtener una lista completa de comandos, o lea el referencia de comando en su sitio web.

Copias de seguridad completas: Restic, Duplicity

Si deseas hacer copias de seguridad grandes, puedes usar otra herramienta en lugar de una simple utilidad de sincronización. Cuando sincronizas con S3 con s3cmd o la AWS CLI, cualquier cambio que haya realizado sobrescribirá los archivos actuales. Porque la principal preocupación del almacenamiento de archivos en la nube no suele ser falla de la unidad, pero la eliminación accidental sin acceso al historial de revisiones es un problema.

AWS admite versionado de archivos, lo que resuelve un poco este problema, pero es posible que aún desee utilizar un programa de copia de seguridad más potente para manejarlo usted mismo, especialmente si está haciendo copias de seguridad de disco completo.

Duplicity es una sencilla utilidad que realiza copias de seguridad de archivos en forma de volúmenes TAR cifrados. El primer archivo es una copia de seguridad completa y luego los archivos posteriores son incrementales, almacenando solo los cambios realizados desde el último archivo.

Esto es muy eficiente, pero la restauración desde una copia de seguridad es menos eficiente, ya que el proceso de restauración tendrá que seguir la cadena de cambios para llegar al estado final de los datos. Restic resuelve este problema almacenando datos en bloques cifrados deduplicados y mantiene una instantánea de cada versión para su restauración. De esta manera, el estado actual de los archivos es fácilmente referenciable, y cada revisión aún es accesible.

Ambas herramientas se pueden configurar para funcionar con AWS S3, así como con varios otros proveedores de almacenamiento. Alternativamente, si solo deseas hacer una copia de seguridad de las instancias de EC2 basadas en EBS, puedes usar instantáneas incrementales de EBS, aunque es más caro que hacer una copia de seguridad manualmente en S3.

También te puede interesar:

A %d blogueros les gusta esto: