Saltar al contenido

Lección 11 de 16 · Lectura y práctica

Ejercicio: Desplegar una Aplicación Federada en la Nube

Tipo de lección: VideoConcepto claveDesplegar una aplicacion federada en la nube implica gestionar multiples micro-frontends independientes que se ensamblan en tiempo de ejecucion. Imagina una ciudad donde cada edificio.

Del concepto a la práctica

Taller de esta lección

Desplegar una aplicación federada consiste en hacer coincidir artefacto, URL pública, permisos de origen y política de caché. Un host operativo no compensa un remoto publicado en una ruta distinta de la declarada.

Ejemplo resuelto

El host se sirve desde https://panel.local y el remoto desde https://static.local/inventory/1.0.0/. El mecanismo de carga debe poder obtener remoteEntry y sus fragmentos. Si utiliza fetch o módulos sujetos a CORS, configura los orígenes pertinentes; la carga clásica por script no tiene exactamente los mismos requisitos. Los fragmentos usan esa misma base y la versión queda en la ruta para evitar mezclar publicaciones.

Pruébalo

  1. Lista los artefactos generados y su ruta pública esperada.

  2. Comprueba que remoteEntry.js y sus fragmentos respondan desde el mismo prefijo.

  3. Verifica en el host local autorizado el mecanismo de carga y las cabeceras que realmente necesita, sin asumir que cualquier fallo sea CORS.

  4. Publica una segunda carpeta sin borrar la primera y compara cargas. Error frecuente: actualizar el archivo remoto pero conservar una caché que apunta a una ruta antigua. Corrección: versiona rutas o invalida solo la entrada necesaria, manteniendo una copia recuperable.

Comprueba tu resultado

Para las rutas 1.0.0 y 1.1.0, el host configurado a 1.1.0 debe cargar únicamente esa versión. Si se elimina 1.1.0 y se cambia la referencia a 1.0.0, el resultado esperado es recuperación sin modificar el código del remoto.

Navegador, API y base de datos conectados por solicitudes, consultas y respuestas en sentidos opuestos.
CursaloMapa de práctica
Del navegador a los datos

El navegador envía una solicitud a la API. El servidor valida la operación y consulta los datos; después devuelve una respuesta que el navegador puede mostrar. La base de datos se comunica con el servidor y no directamente con el navegador.

Ver la infografía en tamaño completo ↗

Tipo de lección: Video

Concepto clave

Desplegar una aplicacion federada en la nube implica gestionar multiples micro-frontends independientes que se ensamblan en tiempo de ejecucion. Imagina una ciudad donde cada edificio (micro-frontend) tiene su propio equipo de construccion y mantenimiento, pero todos comparten servicios publicos (infraestructura en la nube). La clave es coordinar el despliegue para que los cambios en un edificio no afecten a los demas, manteniendo la ciudad funcional.

En este contexto, el Module Federation de Webpack permite que cada micro-frontend se compile y despliegue por separado, mientras que un host o contenedor los une dinamicamente. Esto es similar a como una plataforma de streaming carga peliculas desde diferentes servidores: cada pelicula (micro-frontend) esta almacenada en su propio servidor, pero el usuario ve una interfaz unificada. La nube proporciona escalabilidad y resiliencia, esencial para aplicaciones empresariales.

Como funciona en la practica

El proceso comienza con la configuracion de Webpack en cada micro-frontend para exponer modulos federados. Luego, se despliegan en servicios en la nube como AWS S3, Google Cloud Storage o Azure Blob Storage, con CDN para optimizar la entrega. El host se despliega por separado y referencia las URLs de los micro-frontends en tiempo de ejecucion.

Paso a paso: primero, compila cada micro-frontend con Module Federation habilitado, generando archivos estaticos. Segundo, sube esos archivos a buckets en la nube, configurando politicas de CORS y cache. Tercero, actualiza el host con las nuevas URLs de los micro-frontends. Cuarto, prueba la integracion en un entorno de staging antes de produccion. Esto asegura que los cambios sean graduales y controlados.

Codigo en accion

Configuracion de Webpack para un micro-frontend (product-list) que expone un modulo:

// webpack.config.js para product-list
const ModuleFederationPlugin = require('webpack/lib/container/ModuleFederationPlugin');

module.exports = {
  output: {
    publicPath: 'https://cdn.tudominio.com/product-list/', // URL en la nube
    uniqueName: 'productList'
  },
  plugins: [
    new ModuleFederationPlugin({
      name: 'productList',
      filename: 'remoteEntry.js',
      exposes: {
        './ProductList': './src/ProductList.jsx'
      },
      shared: ['react', 'react-dom']
    })
  ]
};

Configuracion del host que consume el micro-frontend:

// webpack.config.js para el host
const ModuleFederationPlugin = require('webpack/lib/container/ModuleFederationPlugin');

module.exports = {
  plugins: [
    new ModuleFederationPlugin({
      name: 'host',
      remotes: {
        productList: 'productList@https://cdn.tudominio.com/product-list/remoteEntry.js'
      },
      shared: ['react', 'react-dom']
    })
  ]
};

Errores comunes

  • Versionado inconsistente: Desplegar micro-frontends con versiones incompatibles de dependencias compartidas (ej., React 17 vs 18). Solucion: Usar shared en Module Federation para forzar una version unica o usar rangos semanticos.
  • Fallas de CORS: No configurar politicas de CORS en los buckets de la nube, bloqueando las peticiones del host. Solucion: Asegurar que el origen del host este permitido en la configuracion del bucket.
  • Cache agresivo: La CDN cachea versiones antiguas de remoteEntry.js, impidiendo actualizaciones. Solucion: Usar estrategias de cache-busting como hashes en los nombres de archivo o headers de cache-control.
  • Despliegue no atomico: Actualizar el host antes que los micro-frontends, causando errores de referencia. Solucion: Implementar un despliegue coordinado con scripts o herramientas como CI/CD pipelines.
  • Monitoreo insuficiente: No rastrear errores de carga de micro-frontends en produccion. Solucion: Integrar herramientas como Sentry o logs en la nube para detectar fallos rapidamente.

Checklist de dominio

  1. Configurar Module Federation en todos los micro-frontends con publicPath apuntando a URLs en la nube.
  2. Desplegar archivos estaticos a buckets en la nube con CORS habilitado y CDN configurado.
  3. Actualizar el host con las URLs correctas de los remotes y probar en un entorno de staging.
  4. Implementar versionado semantico para dependencias compartidas y micro-frontends.
  5. Establecer una estrategia de cache que permita actualizaciones sin downtime.
  6. Automatizar el despliegue con CI/CD para garantizar consistencia.
  7. Configurar monitoreo y alertas para errores de carga de micro-frontends en produccion.

Desplegar un micro-frontend en AWS S3 y consumirlo desde un host

En este ejercicio, desplegaras un micro-frontend simple en AWS S3 y lo integraras en un host local para simular un entorno de produccion.

  1. Prepara un micro-frontend basico (ej., un componente React que muestra "Hola desde Micro-frontend") con Module Federation configurado para exponerlo.
  2. Compila el micro-frontend y sube los archivos generados (incluyendo remoteEntry.js) a un bucket de S3. Configura el bucket para acceso publico y CORS que permita origenes locales (http://localhost:3000).
  3. Crea un host simple (una app React) que use Module Federation para consumir el micro-frontend desde la URL de S3.
  4. Ejecuta el host localmente y verifica que el micro-frontend se cargue correctamente desde la nube.
  5. Modifica el micro-frontend, recompila, sube la nueva version a S3, y actualiza el host para reflejar los cambios sin recargar la pagina (usando hot reload si es posible).
Pistas
  • Usa AWS CLI o la consola de S3 para subir archivos rapidamente.
  • Asegurate de que la publicPath en la configuracion de Webpack apunte a la URL de tu bucket de S3.
  • Prueba con herramientas como ngrok para exponer localmente si necesitas HTTPS.

Evalua tu comprension

Completa el quiz interactivo de arriba para ganar XP.

Sigue con Arquitectura de Micro-frontends con Module Federation de Webpack

Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.

Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.

01 / ELEGIR UNA RUTA

El próximo paso

Aprende IA mientras construyes algo que sí necesitas.

Empieza por el curso inicial o explora el catálogo para encontrar una práctica alineada con tu trabajo.