Posts Cómo Automatizar el Backup de una Base de Datos y Subirlo a Amazon S3
Post
Cancel

Cómo Automatizar el Backup de una Base de Datos y Subirlo a Amazon S3

La seguridad de los datos es una preocupación fundamental para cualquier sistema de gestión de bases de datos. Realizar copias de seguridad regulares y almacenarlas de forma segura es una práctica esencial para garantizar la integridad y disponibilidad de los datos. En este tutorial, te guiaré a través de un proceso paso a paso para automatizar el backup de una base de datos PostgreSQL y subirlo a Amazon S3, asegurando que solo se conserven los últimos 7 días de respaldos.

Introducción

Cuando se trata de respaldar una base de datos PostgreSQL, hay varios enfoques posibles. Sin embargo, en este tutorial, nos centraremos en un método que implica el uso de scripts para automatizar el proceso de respaldo y la AWS CLI para interactuar con Amazon S3.

Requisitos previos

Antes de comenzar, asegúrate de tener lo siguiente:

  1. Acceso a un clúster de OpenShift o a cualquier otro entorno donde pueda alojarse una instancia de base de datos, como MySQL u otra base de datos compatible con el sistema de gestión de contenedores que utilices, como Docker.
  2. La AWS CLI configurada en tu sistema local con las credenciales adecuadas para acceder a Amazon S3.

Es importante destacar que este tutorial se adapta a diversos entornos y tipos de bases de datos. Si bien el ejemplo se centra en el uso de OpenShift y PostgreSQL, el mismo enfoque puede aplicarse en otras plataformas y con diferentes sistemas de gestión de bases de datos, según las necesidades del usuario.

Paso 1: Crear un Bucket en Amazon S3

El primer paso es crear un bucket en Amazon S3 donde se almacenarán las copias de seguridad. Puedes hacerlo fácilmente a través de la AWS CLI con el siguiente comando:

1
aws s3api create-bucket --bucket backups-postgres --region eu-south-2 --create-bucket-configuration LocationConstraint=eu-south-2

Asegúrate de reemplazar backups-postgres con el nombre que desees para tu bucket y eu-south-2 con la región de AWS que prefieras.

Paso 2: Configuración del Script de Backup

Ahora, crearemos un script que se encargará de realizar el backup de PostgreSQL, empaquetar los archivos relevantes en un archivo ZIP y subirlos al bucket de Amazon S3. También implementaremos la limpieza para mantener solo los últimos 7 días de respaldos.

Aquí está el script detallado con explicaciones:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/bin/bash

# Cambiar por el proyecto de OpenShift donde está el pod de PostgreSQL
oc project <project>

# Nombre del bucket en S3 donde se almacenarán los backups
BUCKET_NAME="backups-postgres"

# Obtener la fecha actual para nombrar el archivo zip
TODAY=$(date +%d-%m-%Y)
ZIP_FILE="backup-$TODAY.zip"

# Realizar el volcado de la base de datos PostgreSQL a un archivo .sql
# Reemplazar <pod_postgres> por el nombre del pod donde está PostgreSQL
# y <database> por el nombre de la base de datos a respaldar
oc exec "<pod_postgres>" -- /usr/bin/pg_dump -C <database>  > backup.sql

# Empaquetar los archivos relevantes en un archivo ZIP
zip -r "$ZIP_FILE" backup.sql secret.yaml

# Establecer las credenciales de AWS desde archivos locales
export AWS_ACCESS_KEY_ID=$(cat /etc/aws/AWS_ACCESS_KEY_ID)
export AWS_SECRET_ACCESS_KEY=$(cat /etc/aws/AWS_SECRET_ACCESS_KEY)

# Subir el archivo ZIP al bucket de S3
aws s3 cp --no-verify-ssl "$ZIP_FILE" "s3://$BUCKET_NAME/$ZIP_FILE" --region eu-south-2

# Limpieza: mantener solo los últimos 7 días de backups en el bucket
# Obtener la lista de archivos ZIP en el bucket
FILE_LIST=$(aws s3 ls "s3://$BUCKET_NAME/" --region eu-south-2 | grep ".zip" | awk '{print $4}')

# Contar la cantidad de archivos ZIP
NUM_FILES=$(echo "$FILE_LIST" | wc -l)

# Si hay más de siete archivos ZIP, eliminar los más antiguos
if [ "$NUM_FILES" -gt 7 ]; then
    # Eliminar los archivos más antiguos uno por uno
    for FILE in $(aws s3 ls "s3://$BUCKET_NAME/" --region eu-south-2 | grep ".zip" | sort | head -n -7 | awk '{print $4}'); do
        aws s3 rm "s3://$BUCKET_NAME/$FILE" --region eu-south-2
    done
else
    echo "No hay suficientes archivos ZIP para eliminar."
fi

En este script:

  • Se establecen variables para el proyecto de OpenShift, el nombre del bucket S3 y el nombre del archivo ZIP.
  • Se realiza un volcado de la base de datos PostgreSQL a un archivo .sql.
  • Los archivos relevantes se empaquetan en un archivo ZIP.
  • Se establecen las credenciales de AWS desde archivos locales.
  • El archivo ZIP se sube al bucket de S3.
  • Se implementa la limpieza para mantener solo los últimos 7 días de respaldos en el bucket.

Mejoras Potenciales del Script de Backup

Optimiza y fortalece tu script de backup con estas recomendaciones importantes.

  1. Autenticación mediante Robot ServiceAccount: Puedes seguir el artículo Cómo generar un Token de Acceso sin Fecha de Vencimiento en OpenShift, donde se detalla cómo generar un token de acceso sin fecha de vencimiento utilizando un Robot ServiceAccount. Al seguir este artículo, obtendrás el comando oc login necesario para integrarlo en tu script de respaldo de base de datos. Esta mejora asegura un acceso seguro y automatizado al clúster de OpenShift, eliminando la necesidad de autenticación manual y garantizando que el token de acceso no caduque durante la ejecución del script.

  2. Guardar Credenciales de AWS en un Secret: En lugar de definir las credenciales de AWS directamente en el script, puedes almacenarlas de forma segura en un Secret de OpenShift. Esto mejora la seguridad y evita la exposición accidental de las credenciales en el código.

  3. Dinamizar la Búsqueda del Pod de la Base de Datos: En lugar de agregar manualmente el nombre del pod de la base de datos en el script, puedes realizar una búsqueda automatizada y guardar el nombre del pod en una variable. Esto asegura que el sistema de backup siga funcionando incluso si el nombre del pod cambia en el futuro.

Implementar estas mejoras aumentará la seguridad, la flexibilidad y la robustez del script de backup, garantizando un funcionamiento más confiable y fácil de mantener a largo plazo.

Implementación con CronJobs en OpenShift

En un entorno de OpenShift, podemos aprovechar la funcionalidad de los cronjobs para automatizar el proceso de backup de PostgreSQL y su almacenamiento en Amazon S3. Configurando un cronjob con el horario deseado, podemos programar la ejecución periódica de nuestro script de backup, lo que garantiza que se realicen respaldos regulares sin intervención manual. Esto simplifica la gestión operativa y asegura que los datos estén siempre protegidos y disponibles, con la opción de mantener solo los backups más recientes.

Conclusión

En este tutorial, has aprendido cómo automatizar el proceso de backup de una base de datos PostgreSQL y subirlo a Amazon S3 utilizando un script y la AWS CLI. Este enfoque te permite garantizar la integridad y disponibilidad de tus datos, así como gestionar eficazmente el almacenamiento manteniendo solo los backups más recientes.

¡Espero que este tutorial te haya sido útil para mejorar la seguridad y la gestión de tus datos!

This post is licensed under CC BY 4.0 by the author.