Coding With No Try Catch
Cómo levantar una demo CDC con SQL Server, Debezium y Kafka (Part 2): guía paso a paso

Cómo levantar una demo CDC con SQL Server, Debezium y Kafka (Part 2): guía paso a paso

En la primera parte expliqué la arquitectura de la demo y las decisiones de diseño detrás de SQL Server, Debezium, Kafka Connect, Kafka UI y el visor web. En esta segunda parte me concentro en la ejecución: cómo levantar el entorno, validar que CDC esté funcionando y probar el flujo completo con cambios reales.

Antes de arrancar, necesitas Docker Desktop o Docker Engine con Docker Compose v2, puertos libres para SQL Server, Kafka Connect, Kafka UI, Kafka y Web Viewer, y memoria suficiente para que SQL Server no estrangule el resto del stack. Si estás en Windows, la demo trae scripts tanto en PowerShell como en bash.

Docker Compose v2 operativo

Puertos 1433, 8083, 8080, 9092 y 3000 disponibles o remapeados

Continuar leyendo →
CDC con SQL Server, Kafka y Debezium (Part 1): arquitectura end-to-end con Docker Compose

CDC con SQL Server, Kafka y Debezium (Part 1): arquitectura end-to-end con Docker Compose

Si quieres entender Change Data Capture (CDC) sin quedarte en la teoría, esta demo tiene un objetivo muy concreto: mostrar cómo un cambio en una tabla de SQL Server termina convertido en un evento de Kafka usando Debezium y Kafka Connect, todo orquestado con Docker Compose.

Para que el recorrido sea claro y útil, dividí el contenido en dos partes. En esta primera parte me concentro en la arquitectura, el flujo de datos y las decisiones de diseño. En la segunda parte dejo la guía operativa para levantar la demo, validarla y probar INSERT, UPDATE y DELETE de punta a punta.

Parte 2: Cómo levantar la demo paso a paso.

En muchos sistemas, la base de datos es la fuente de verdad y al mismo tiempo el punto donde nacen eventos valiosos para otros consumidores: analítica, sincronización con otros sistemas, motores de recomendación, pipelines de auditoría o paneles en tiempo real. El problema es que convertir cada cambio en un evento sin acoplar la aplicación no siempre es trivial.

Continuar leyendo →

Contenerización en .NET y Buenas Prácticas de Seguridad

En este post, vamos a centrarnos en como contenerizar una aplicación en .NET, primero revisaremos que novedades tenemos con NET 8 y luego veremos un enfoque más clásico usando Docker. Adicionalmente, veremos que buenas prácticas es recomendable seguir y que consideraciones respecto a la seguridad debemos de tener en cuenta cuando lo realizamos.

CONTENERIZACIÓN EN NET 8

A partir de NET 7 y consecuentemente en NET 8, tenemos la posibilidad de contenerizar nuestras aplicaciones directamente desde nuestra solución (.csproj), sin necesidad de usar un “dockerfile” como seguramente hemos usado ampliamente si queríamos conseguir este resultado con anterioridad. Esto gracias al uso de la librería “Microsoft.NET.Build.Containers”, esta mejora nos permitirá estandarizar como generamos los containers para nuestras aplicaciones.

Veamos como conseguimos realizar esto. Una ves que tengamos nuestra aplicación lista para contenerizar, usamos el siguiente comando.

Continuar leyendo →

Tool: MySQL Profiler con Python

Hace ya algún tiempo que no hacia un post, tengo varios en el tintero y busco hacerme un tiempo en adelante para seguir actualizando el blog.

Dicho esto, en este post voy a presentar una herramienta sencilla que he realizado para suplir la necesidad de un "SQL Profiler" para MySQL. Como saben, en la suite de SQL Server, tenemos el IDE (management studio) y también un Profiler, es último nos sirve para poder monitorear que está ocurriendo en nuestra BD. Una herramienta extremadamente util, para distintos perfiles técnicos (DBAs, desarrolladores, etc).

Me encontraba revisando una aplicación que llego como un proyecto de fin de semana y me vi con la necesidad de usar una herramienta similar, pero que funcione en MySQL. Revisando un poco las herramientas opensource actuales, vi que ninguna me brindaba la información que necesitaba, por ahí vi que hay algunas herramientas que si cubrían esta necesidad, pero son de pago.

Teniendo esto en mente, la lógica detrás de una herramienta así, no se me hacía tan complicada, y ya antes había visto que uno puede habilitar que se genere un log de los queries que se ejecutan en el servidor.

Continuar leyendo →

Integrando AWS Lambda a un Pipeline de Azure Devops

Hola, espero que estén bien. Este post es una continuación al post anterior, en el cual revisamos como podemos realizar el deploy de un api en un AWS Lambda. Ahora seguiremos con lo que es más lógico que suceda luego de hacer esto, automatizar este proceso. En post anteriores, he mostrado el uso de Azure Devops para los procesos de devops que uso, veamos como realizamos en este caso.

Primero, debemos tener creado un rol en IAM para que nuestro pipeline de devops se pueda authenticar. Con esto realizado, ingresar a azure devops y nos dirigimos a la siguientes opción.

Con esto hecho, vamos a AWS para crear un bucket, que es donde configuraremos luego para que nuestra pipeline deje los archivos.

En nuestro pipeline, vamos a seleccionar la siguiente tarea.

Continuar leyendo →

Dockerizando una aplicación Net 5.0 - Part. II

Este post es una continuación de su versión anterior, en este nos enfocaremos en como configuramos nuestro ambiente de desarrollo con docker.

Retomemos en el código del proyecto.

Vamos a modificar nuestro "launchSetting.json", eliminemos los profiles que tenemos actualmente, creemos uno nuevo para manejar nuestra instancia en docker que tendrá la siguiente estructura.

Lo que hemos hecho es crear un nuevo perfil, le indicamos el comando que va a ejecutar "docker", que debe abrir un navegador, la url que se va a abrir (esta como vemos se obtiene de variables, no valores en duro), un poco de dolor de cabeza me llevo descubrir el uso de "httpPort" y "sslPort", dado que estos dos nos permiten indicarle que puertos queremos que use. Esto ultimo parece algo menor, pero nos sirve cuando mapeamos en nuestro postman o en el front el puerto del backend, y que este sea consistente en distintos ambientes, de otro modo, nos asignarán un puerto aleatorio y esto nos generar tener que estar cambiando nuestra configuración en el front. Finalmente, acá también podemos indicarle las variables de entorno que vamos a usar dentro de nuestro dockerfile.

Continuar leyendo →

Dockerizando una aplicación Net 5.0 - Part. I

Hola, espero que los que me lean a esta fecha estén bien. Hace ya un tiempo que no publicaba nada, principalmente se debe a la falta de tiempo que he tenido por el trabajo y otras complicaciones que empezaron a surgir como consecuencia de la pandemia. En estos meses he aprendido algunas cosas nuevas relacionadas con AWS, Google Cloud y otras cosas que por ahí alguien puede encontrar interesante.

Retomo las publicaciones con este post, por que les comento que en general, en AWS y GCloud no es tan común que sus servicios soporten la última versión de net que nos ofrece microsoft, en mi caso tenía que migrar algunos servicios de AWS a Google Cloud esta semana que pasó y me di con la sorpresa que app engine no soporta Net 5.0. Sin embargo, soportan docker así que fue la oportunidad perfecta para practicar un poco mis skills en docker que hace un tiempito no he podido jugar con esta herramienta.

Quiero que este sea el primer post, por que en algunos de los que tengo pensado más adelante, quiero usar net 5.0, y de este modo sabrán como manejarse con esta versión del framework. Tomemos como ejemplo una aplicación que tiene especial cariño para mi porque yo la inicie como un proyecto…

Continuar leyendo →

Descargar Archivo en Angular

Bueno, con este post espero complementar el post anterior:

Generación de un excel dinámico

Lo hago con angular, por que cuando me toco revisarlo en el trabajo use angular para hacerlo. Pero, me parece que encontrarán algunas funciones que les pueden servir, dado que son javascript puro.

Basicamente, tenemos una aplicación creada usando el tipico:

Continuar leyendo →

Crear Excel con Apache POI y Spring Boot

Bueno, tuve que dejar un par de semanas de hacer post por que me acumule de trabajo y quería tocar este tema por que es algo que me parece muy útil para quien le toque ver temas referidos a la generación de excel con Spring boot o en general con java. Y para serles franco el código en este post no va a ser pequeño, por lo que hacer una demo que yo considero útil para varios posibles escenarios con los que se van a encontrar en algún trabajo y proyecto me tomo unas cuantas horas por lo que me demoro el desarrollo del post.

Espero que lo que revisemos y el código y video que deje les sea de provecho por si llegan a tener algún escenario como el que voy a plantear para iniciar con la explicación.

Escenario

Digamos que en su trabajo/freelo/proyecto personal, quieres realizar la generación de un excel. El modo más sencillo sería empezar a definir las columnas que va a tener y así ir dándole la forma al excel. Sin embargo, si queremos que este sea dinámico. Digamos que necesitamos un componente al cual le pasamos una estructura de datos y este nos genera un excel formateado y demás. Claro que el nivel de customización dependen de lo que se busque, pero un caso similiar tuve hace unos…

Continuar leyendo →