Cuando hablamos del Cloud, hay tres categorías donde se pueden agrupar todos los servicios en la nube y que es importante conocer cuando se vaya a contratar un servicio: IaaS (Infrastructure as a Service), PaaS (Platform as a Service) y SaaS (Software as a Service)[1].
Recientemente se habla cada vez más del denominado Serverless computing[2]. Se trata de un servicio en la nube donde tú puedes crear microservicios o subir módulos de código de una forma transparente para el usuario sin tener que preocuparte por los servidores. Esto puede parecer una solución PaaS, pero realmente está un nivel por encima.
En una solución PaaS, cuando haces un despliegue de tu aplicación, posteriormente puedes escalar la aplicación, pero es un proceso que debes hacer tú manualmente, con lo que no es transparente para el usuario ya que es consciente de las instancias de servidores.
En los nuevos sistemas Serverless, tú simplemente subes el código y automáticamente ya está funcionando sin tener que preocuparte de nada más.
¿Qué son las Azure Functions?
Azure Functions[3] es un servicio Serverless orientado a eventos o bajo demanda y que extiende las funcionalidades en la implementación de código que responde a eventos en otros servicios Azure, servicios SaaS o sistemas on-premise.
Podemos decir que sería una alternativa para ejecutar procesos en segundo plano en el cloud. Básicamente, lo que pretende es añadir una capa más a los ya conocidos Azure WebJobs, añadiendo más funcionalidades, sobre una arquitectura Serverless y con un sistema de pago pay-per-execution.
Este servicio está creado basándose en el SDK de Webjobs[4] con lo que comparten muchos de los triggers (desencadenadores) y bindings (enlaces) pero con la característica de estar desplegado en un modelo Serverless.
Características
-Functions Code
Las function Code permiten implementar el código utilizando un gran abanico de lenguajes. En el caso de C#, se utiliza el formato .csx. Simplemente tienes que definir tu método Run, e importar las referencias necesarias.
Además existe un fichero de configuración llamado function.json el cual contiene la configuración específica de la function y sus bindings. Cuando el runtime lee la configuración, determina para que eventos tiene que ejecutarse, qué datos debe incluir cuando se llama al function, a qué otro servicio tiene que llamar cuando acaba la ejecución y qué datos debe pasarle.
Esto permite encadenar múltiples functions. Por ejemplo, podríamos tener una function que se ejecuta cuando se inserta un fichero en el blob storage guardando los datos de ese fichero en una base de datos, y otra function que, por ejemplo, cuando se acaba de insertar en la base de datos, envía un mail de confirmación.
La siguiente tabla muestra los diferentes parámetros de configuración:
-Functions App
Las Function App están destinadas a organizar y gestionar uno o más functions que hayas creado con lo que te permite, por ejemplo, aplicar el mismo plan de precios o despliegue continuo a un grupo de functions.
-Runtime
El Runtime es el proceso host del Azure Webjob el cual escucha los eventos, recopila y envía información interaccionando con las Function.
-Estructura de directorios
Cuando se despliegan las Function en una Function App en Azure App Service, se genera la siguiente estructura de directorios:
En el directorio root están definidas todas las Function agrupadas en el Function App. Cada Function tiene su directorio donde están los ficheros de código .csx y de configuración function.json y otras dependencias.
-Function Bindings
Estos son todos los bindings que puedes integrar con el servicio Function:
Ejemplo
Supón que tenemos una cola de mensajes usando un servicio Azure Storage Queues[5] donde se van encolando usuarios y queremos ejecutar un código cada vez que un mensaje se añade a la cola. Además, queremos que al acabar la ejecución de este código, se guarde el usuario como un nuevo registro en otro servicio de tablas Azure Storage Table[6].
Aquí es donde los triggers y binders del servicio Function entran en juego. Las Function permiten capturar el evento de cuando se inserta un mensaje al nuestro servicio de colas Azure Storage Queues (trigger) y nos permite enlazar e insertar registros a nuestro servicio de Tablas Azure Storage Table (binding).
Para eso, necesitamos definir este comportamiento en la configuración:
Y en el fichero de código añadiremos la lógica de la Function para leer el mensaje de la cola y registrar el nuevo usuario en la base de datos.
Referencias
[1] https://support.rackspace.com/white-paper/understanding-the-cloud-computing-stack-saas-paas-iaas/
[2] https://en.wikipedia.org/wiki/Serverless_computing
[3] https://azure.microsoft.com/en-us/documentation/articles/functions-create-first-azure-function/
[4] https://azure.microsoft.com/en-us/documentation/articles/websites-dotnet-webjobs-sdk/
[6] https://azure.microsoft.com/en-us/services/storage/tables/
[7] https://azure.microsoft.com/en-us/documentation/articles/functions-bindings-storage/
[8] https://azure.microsoft.com/en-us/documentation/articles/functions-triggers-bindings/
Descubre cómo SOGETI puede ayudarte en el viaje hacia la Nube.
Ramón Tomás es Ingeniero superior en Telecomunicaciones por la universidad politécnica de Catalunya. Se ha unido a SOGETI recientemente, en la unidad de soluciones Microsoft en Barcelona como desarrollador analista. Anteriormente ha trabajado como desarrollador especializado en tecnología Microsoft para clientes del sector bancario.
0 comments on “Azure Functions: una función en la nube”