Este proyecto documenta la migración estratégica de una base de datos MySQL alojada localmente en un contenedor de Docker hacia la infraestructura de AWS. La solución implementa un túnel VPN a través de un Bastion Host Inmutable, garantizando una conexión segura. Para el movimiento de datos, utilicé AWS Database Migration Service (DMS), logrando una replicación continua y eficiente. A continuación, detallo el ciclo completo: desde el diseño de la arquitectura y el despliegue automatizado con Terraform, hasta la validación final de los datos

AWS Database Migration Service (DMS) se destaca principarmente por 3 características clave:
Un componente crítico de esta arquitectura es el Bastion Host, que actúa como el único punto de entrada seguro a la infraestructura. Para este laboratorio, decidí elevar el estándar de seguridad y operatividad mediante dos tecnologías clave:
El origen de los datos reside en una instancia de MySQL desplegada mediante Docker. El uso de contenedores fue clave para este laboratorio, ya que me permitió:
A lo largo del desarrollo, surgieron retos complejos que requirieron un análisis profundo de redes y seguridad. Estos fueron los más significativos:
En el directorio del proyecto, dentro de la subcarpeta: "server-keys" usar el siguiente comando:
wg genkey | tee private.key | wg pubkey > public.keyEsto generará dos archivos: private.key y public.key. El archivo private.key es la llave privada que se usará en el bastion host, mientras que el archivo public.key es la llave pública que se compartirá con el cliente para establecer la conexión WireGuard.
Posteriormente crearemos las llaves para el equipo local en el directorio "/etc/wireguard":
wg genkey | tee local-private.key | wg pubkey > local-public.keyUna vez realizado este paso, es importante cambiar los permisos de nuestra llave privada:
sudo chmod 600 /etc/wireguard/local-private.keyCon ambos pares de llaves listos, debe editarse primero el archivo de configuration.nix que se encuentra en la subcarpeta "flake-wireguard" en la sección de "publicKey" introduciendo el contenido de la llave local-public.key.

Antes de desplegar, editar el archivo "variables.tf" y especificar en "key_name" el nombre del key pair de AWS para acceso SSH. Luego ejecutar "terraform init" y "terraform apply" desde la carpeta del proyecto para crear todos los recursos en AWS.

Una vez completado el despliegue, Terraform mostrará en la terminal la IP pública y privada del bastion host, necesarias para configurar WireGuard y el RDS endpoint que se usará en AWS DMS.

Finalmente, crear el archivo de configuración "/etc/wireguard/wg0.conf" en el equipo local con el siguiente contenido:

Una vez realizado este paso, es necesario iniciar el servicio de WireGuard en el equipo local:
sudo wg-quick up wg0Con esto, ya deberíamos tener un bastion host inmutable en AWS con WireGuard configurado y funcionando. y podemos proceder a desplegar la base de datos MySQL en Docker usando en archivo docker-compose.yml proporcionado en el repositorio.

Con el túnel VPN activo y la base de datos MySQL corriendo en Docker, podemos proceder a configurar AWS DMS para la migración de datos. En la consola de AWS DMS, crearemos los endpoints de origen y destino, así como la tarea de migración.


Una vez configurados los endpoints y la tarea de migración, podemos iniciar la tarea en modo de replicación continua para asegurar que todos los cambios en la base de datos origen se reflejen en el destino.

Después de que la tarea de migración haya estado en ejecución durante un tiempo, es crucial validar que los datos se hayan migrado correctamente y que la replicación continua esté funcionando como se espera. Para ello, podemos conectarnos a la base de datos RDS y verificar la integridad de los datos.

Este proyecto demuestra la viabilidad de integrar entornos locales y de nube mediante una arquitectura híbrida segura y automatizada. La combinación de NixOS y Wireguard en un Bastion Host inmutable, junto con la precisión de Terraform, permitió crear una infraestructura resiliente que garantiza la seguridad bajo el principio de mínimo privilegio. Finalmente, el uso de AWS DMS validó que es posible ejecutar migraciones de datos complejas con alta disponibilidad, consolidando un flujo de trabajo profesional que prioriza la integridad de la información, la eficiencia operativa y las mejores prácticas de DevOps. Si quieres conocer más detalles técnicos o ver el código fuente, puedes visitar mi repositorio en GitHub db-migration
Sitio desarrollado con Reflex.
Built with Reflex