¿Cómo enviar tareas a una cola con Azure Functions y Blob Storage?

Es común encontrar escenarios donde las organizaciones requieren recolectar periódicamente archivos con datos provenientes de diferentes áreas, sedes o clientes para analizarlos posteriormente.

En una situación como la mencionada, se puede aprovechar la magia de Azure Functions al interactuar con los servicios Azure Blob Storage y Azure Queue Storage para apoyar el proceso.

Azure Blob Storage

Azure Blob Storage permite el almacenamiento de cantidades masivas de objetos no estructurados en la nube a los cuales se puede acceder a través de HTTP/HTTPS.

Para leer o escribir objetos Blob Storage se puede usar API REST de Azure Storage, Azure PowerShell, Azure CLI o bibliotecas para clientes en diversos lenguajes como C#, Java, Python entre otros.

Azure Functions

Una función de Azure Functions es un pequeño fragmento de código que puede ejecutarse en la nube sin preocuparse por la aplicación completa o la infraestructura para ejecutarla. Si se elige la opción de consumo, Azure escala automáticamente la función según la demanda de los usuarios, además, solo factura el tiempo de ejecución del código.

Una función sólo se ejecuta en respuesta a un evento disparador “Trigger”. Un trigger puede provenir de servicios como Blob Storage, Azure Cosmos DB, Event Grid, HTTP, Microsoft Graph, Queue Storage, Service Bus o Temporizadores.

Por otra parte, Azure Functions usa enlaces “Bindings” para conectarse a datos y/o servicios. Con lo cual se delega a la plataforma la administración de conexiones y origen de datos. Los enlaces pueden ser entrada (lectura de datos) o de salida (escritura de datos).

Azure Queue Storage

Azure Queue Storage es un servicio que permite almacenar grandes cantidades de mensajes. Es común su uso para encolar trabajos que se van a procesar de forma asincrónica.

Para un escenario como el mencionado, se proponen los siguientes pasos como parte de la solución:

  1. Los clientes envían los archivos a un contenedor Azure Blob Storage
  2. Una función de Azure Functions, inicia cuando se crea o actualiza un blob y lleva a una cola un mensaje de solicitud de proceso para el archivo detectado.
  3. Una función Azure detecta cuando se recibe un nuevo mensaje en la cola y realiza o delega el procesamiento del archivo.

Ahora, nos centramos en los pasos relacionados con Azure Functions, por lo cual, no se darán detalles sobre cómo llevar los archivos a un contenedor (primer paso), pero al final del post hay algunos enlaces relacionados.

Respecto al segundo paso, a continuación, se muestra de forma rápida cómo crear una función de Azure Functions que lleva el nombre de un archivo creado o actualizado a una cola utilizando Visual Studio y C# (aunque existen otras formas de hacerlo).

Desentrañando el código de la función:

  • En la línea 10, tenemos "name" que toma el nombre del archivo nuevo o actualizado en el contenedor "mycontainer".

  • En la línea 11, se tiene un enlace a un Azure Queue Storage llamado "myqueue", al cual se hará referencia mediante el parámetro "queueMsg".

  • En la línea 15, adicionamos a la cola un mensaje que es el nombre del archivo.

Para el tercer paso, se puede usar una función con un trigger que detecte los mensajes nuevos en la cola y los procese o delegue su proceso. A continuación, se muestra cómo hacerlo usando la plantilla que proporciona Visual Studio.

Esto es sólo un esbozo de la solución propuesta, quedan pendientes varios aspectos como la carga de blobs, la estructura de los mensajes que recibirá la cola, el procesamiento de los archivos, entre otros. Sin embargo, se espera que este post, haya sido útil para atisbar el potencial de estas tecnologías.

Para terminar, puede ver el código del proyecto aquí y revisar algunos de los siguientes enlaces:

comments powered by Disqus