Hace unas semanas me propuse completar el Cloud Resume Challenge que vi en internet. Me pareció una forma ideal para principiantes como yo de aprender haciendo, mucho mejor que limitarse a ver o leer tutoriales.
Resumen del reto que abordé: 1) Crear un currículum con HTML y CSS. 2) Publicarlo como sitio estático en la nube. 3) Incluir un contador de visitas con JavaScript, Python y una base de datos. 4) Definir la infraestructura como código para desplegar todo de forma repetible. 5) Configurar pipelines de CI CD para frontend y backend con GitHub Actions. 6) Usar un dominio propio y habilitar HTTPS.
Arquitectura en pocas palabras: un sitio estático servido desde Azure Storage, un backend con Azure Functions que expone un endpoint HTTP seguro, y una base de datos en Azure Cosmos DB que almacena el contador. Como capa de entrega y seguridad, Azure Front Door con certificado gestionado para HTTPS y CDN para rendimiento.
Parte 1 Crear un currículum estático. No soy perfil frontend, así que repasé lo básico de HTML y CSS y apoyándome en un video y herramientas de IA monté un diseño limpio y suficiente para el objetivo del reto.
Parte 2 Convertir el currículum en un sitio estático. Creé una cuenta de almacenamiento en Azure, habilité el sitio estático y publiqué los archivos en el contenedor especial llamado web. Azure sirve el contenido directamente desde ahí como si fuera una CDN.
Parte 3 Contador de visitas en el frontend. Añadí en el HTML el área donde mostrar el contador y la enlacé a un pequeño script de JavaScript. El JS invoca una API y actualiza dinámicamente el número que devuelve el backend. Me apoyé en IA para acelerar la escritura y entender cada fragmento.
Parte 4 Base de datos con Cosmos DB. Usé Azure Cosmos DB con Table API en modo serverless. Es un modelo NoSQL sin esquema donde cada entidad se identifica por PartitionKey y RowKey. Serverless significa pagar solo por lo consumido. Creé una tabla sencilla para almacenar el total de visitas.
Parte 5 Backend del contador con Azure Functions. Por seguridad, el navegador no debe hablar directo con la base de datos ni exponer claves. Implementé una Azure Function con disparador HTTP que lee el contador en Cosmos DB, lo incrementa, lo persiste y devuelve el nuevo valor. En Linux inicialmente usé Python 3.12, pero encontré conflictos de dependencias y la función no aparecía tras el despliegue pese a compilar bien. Cambiar a Python 3.11 resolvió el problema al instante. Para las pruebas unitarias me apoyé en IA para generar casos básicos y asegurar el comportamiento esperado.
Parte 6 Infraestructura como código. En lugar de crear recursos manualmente desde el portal, describí todo con Bicep. Definí parámetros, recursos y la ejecución del despliegue para una cuenta de almacenamiento, una Function App con su plan y la configuración necesaria. Así puedo recrear el entorno con un solo comando y sin olvidar ajustes críticos.
Parte 7 CI CD para el backend. Configuré GitHub Actions para que con cada push se ejecuten pruebas automáticas y, si pasan, se despliegue la infraestructura con Bicep y el código de la Function. Separé responsabilidades en dos jobs build and test y deploy to azure, con dependencias y secretos almacenados en el repositorio para autenticación mediante un service principal. El runner de GitHub ignoraba mi intención de usar Python 3.11 y tomaba 3.12, por lo que instalé las dependencias en la ruta esperada por Azure Functions y fijé la versión de runtime adecuadamente. Tras ese ajuste, el despliegue fue estable.
Parte 8 CI CD para el frontend. Coloque los archivos estáticos en un repositorio dedicado y preparé un workflow que sincroniza los cambios al contenedor web de Azure Storage. Al finalizar, forzaba una purga de la caché en CDN para ver de inmediato la última versión en el dominio.
Parte 9 HTTPS y DNS. Registré un dominio y configuré Azure Front Door como frontend público. Validé la propiedad con registros TXT y CNAME en el proveedor del dominio y usé el certificado administrado de AFD para HTTPS sin comprar uno externo. Definí una regla de enrutamiento para llevar el tráfico del dominio personalizado al sitio estático de almacenamiento. Resultado final una web de currículum rápida, segura y fácilmente mantenible.
Conclusiones. Durante mucho tiempo estuve en el bucle de aprender leyendo y no construir. Este reto me obligó a pasar a la acción, enfrentar errores reales y comprender la teoría a partir de la práctica. Ahora tengo un mapa mental de cómo encajan servicios como Azure Storage, Functions, Cosmos DB, CI CD y Front Door en una aplicación moderna.
Sobre Q2BSTUDIO. Somos una empresa de desarrollo de software y aplicaciones a medida que integra inteligencia artificial, ciberseguridad, servicios cloud AWS y Azure, servicios de inteligencia de negocio y power bi, automatización de procesos, agentes IA e ia para empresas. Si quieres migrar tu currículum o tus soluciones a la nube, optimizar costes y ganar resiliencia, podemos ayudarte de punta a punta con arquitectura, despliegue y observabilidad. Descubre cómo aceleramos estos proyectos en nuestro servicio de servicios cloud aws y azure. Integramos además software a medida y prácticas de ciberseguridad para que tu plataforma sea escalable y segura desde el primer día.