Cómo usar azure functions para limpiar datos de una base de datos SQL.

Es común en aplicaciones empresariales encontrarse con ciertos procesos batch, que corren en segundo plano, para aplicar mantenimiento sobre el sistema de almacenamiento, integraciones de nuevos datos de referencia entre diferentes sistemas, actualización de estados, envío de mails de recordatorio, limpieza de datos…

En esta entrada voy a presentar como crear una función programada en el tiempo de forma regular, que elimine datos de nuestra base de datos como tarea de limpieza, usando únicamente Azure Functions para ello.

Qué son las Azure Functions

Las Azure Functions son programas que podrás ejecutar en la nube con una arquitectura sin servidor. Cuando se solicita lanzar esta función Azure destinará los recursos necesarios para ello y se cobrará únicamente por el tiempo de procesamiento. Estas funciones pueden ser lanzadas por diferentes triggers, como peticiones http o desde otros sistemas, o una programación temporal con una expresión CRON (una vez cada hora, una vez al día, o a la semana…).

Digamos que podría ser el símil de azure a las lambda funcion de Amazon, pero en este caso las azure functions permiten su programación en una gama mas amplia de lenguajes, como por ejemplo C#, así como su debug en modo remoto con visual studio.

Para crear un Azure Function en primer lugar necesitarás disponer de una suscripción a Azure y acceder a tu cuenta.

Una vez ahí crea un nuevo recurso de tipo Function App que podrás encontrar en la sección proceso.

Al igual que con otros recursos, selecciona un nombre para tu app, elige o crea un grupo de recursos, un storage, selecciona una zona y un plan de hospedaje.

En cuanto al plan de hospedaje, el de “consumo” es el que aplica la tarificación por uso de la función.

 

Una vez creada tu función verás una pantalla similar a la siguiente, con algunas opciones útiles para este ejemplo:

Funciones

La opción Funciones del menu lateral izquierdo, estará vacía, necesitarás crear tu primera función, seleccionando está opción podrás crear una nueva con una pantalla en la que seleccionar el tipo de función que necesitas.

Creando tu función ya si podrás ver las opciones de la imagen anterior.

Integrar

Desde integrar podrás seleccionar tus triggers, en este caso, siendo una función timerTrigger, podrás introducir una expresión CRON.

La página te ofrece toda la documentación necesaria, no obstante en “esta entrada sobre expresiones CRON” muestro algunos ejemplos extraídos de esa documentación.

Un ejemplo rápido sería “0 0 1 * * 7”, en este caso la función se ejecutará la 1 AM de cada sábado.

Supervisar

Desde la opción de supervisar podrás ver todas las ejecuciones realizadas de tu función y su resultado de salida a modo de log (si lo has creado desde tu código). Al principio verás las ejecuciones consecuencia de tus intentos manuales, pero cuando ya la tengas terminada, verás una ejecución semanal correspondiente a las 1 AM de cada sábado de acuerdo al ejemplo anterior.

Configuración

En configuración verás opciones como CORS, Autenticación, o cadenas de conexión. Es este último caso el que te será de utilidad para identificar la cadena de conexión de tu base de datos contra la que deseas ejecutar el proceso de limpieza de datos de la función que voy a utilizar como ejemplo de Azure Functions.

En esta sección podrás encontrar un enlace llamado “Manage Application Settings”, y dentro de esta sección, haciendo scroll, podrás encontrar una zona para introducir “cadenas de conexión”. Si deseas copiar tu cadena de conexión desde un webconfig ya existente en tu API o tu aplicación MVC, bastará con asignarle un nombre, introducir la cadena, seleccionar la opción personalizado del dropdown sobre tipo de conexión, y listo.

Nombre de la función

Por último, si haces click sobre el nombre de la función, en el ejemplo de la imagen se trata de TimerTriggerCsharp1, podrás ver un espacio para incluir el código de tu función, en un archivo run.csx. También verás un botón para poder ejecutar tu función.

La función que yo he utilizado se encarga de limpiar de la tabla de usuarios de la base de datos a aquellos que aun no hayan confirmado su registro, y cuyo registro se haya producido hace más de 2 semanas.

sqldb es el nombre que utilicé para nombrar la cadena de conexión desde “manage application settings”.

La función reflejará un log en cada una de sus ejecuciones con la cantidad de usuarios afectados por el delete.

Es un ejemplo sencillo y que se puede complicar tanto como se quiera, pero mi objetivo es precisamente ese, utilizar Azure Functions como proceso batch con un ejemplo muy sencillo.

Un saludo, espero que te pueda ser de utilidad y te animes a probar estas útiles azure functions.

Deja un comentario