Azure Functions!

La semana pasada fue el evento Connect 2016 donde Microsoft lanzó muchas novedades algunas las veremos en algún otro post, pero hoy quería centrarme en una que me parece bastante interesante, ya que anunciaron que ya esta disponible sin ser preview, y son las Azure Functions.

Las funciones de Azure son fragmentos de código que se ejecutaran en la nube sin tener que pensar en nada relacionado con la infraestructura solamente en tu código!

Características:

  • Elección del lenguaje: C#, javascript, F#, PHP o python son algunas de las posibilidades.
  • Uso de Nuget o NPM para gestionar dependencias externas.
  • Uso de proveedores de OAUTH como Facebook, Twitter, Google para autorizar las peticiones.
  • Poder desarrollar desde el editor propio en el portal de Azure, o desde VS y usar TFS o git para integración continua.

Como dice la propia documentación, usemos Azure Functions cuando necesitemos gran capacidad de proceso, tratamiento de imágenes, tareas programadas entre otras cosas, y ademas tiene integración con gran parte de servicios de Azure (DocumentDb, EventHub, Mobile Apps…) y otros servicios on premises.

De serie nos podremos encontrar un conjunto de funciones de ejemplo que nos enseñaran cosas que podemos hacer con Azure functions:

  • Escuchar cambios en un contenedor de Blobs
  • Responder a Azure Event Hub
  • Responder a eventos de tus repos de GitHub
  • Responder a peticiones HTTP

Vamos a lo importante!

Si no tenéis una subscripción de Azure, no os preocupéis, podéis acceder a https://functions.azure.com/try y hacer vuestras pruebas.

En el post me voy a centrar en c#, pero como comentaba arriba se pueden hacer functions con otros lenguajes.

Bien, una vez defináis vuestra Function, nos encontraremos una imagen como la siguiente:

Elegiremos el tipo que mas se ajuste a la funcionalidad que vamos a implementar, para el ejemplo usaremos Webhook y API, y C# como lenguaje de programación.

Se creara una función como la siguiente:

Como se puede observar es un fragmento sencillo compuesto por unos usings para indicar los namespaces que se van a utilizar, y una función Run con los parámetros req y log, donde el primero serán los datos que recibe nuestra función y el log sera “inyectado” para poder realizar trazas.

Algo que llama la “atención” es la primera linea del fichero, ya que es:

#r “NewtonSoft.Json”

que nos va a permitir agregar otros ensamblados.

En el caso de que necesitamos definir nuestras propias clases podríamos hacerlo directamente en el fichero csx que contiene la función:

Bueno, vamos a ver un poco ahora a nivel de configuración, ya que la magia del código la podéis poner vosotros :).

Dentro del portal de administración, encontrareis un panel como el siguiente:

Podremos definir los desencadenadores, los parámetros de entrada y de salida, los verbos admitidos, la autorización a usarla (para ello podremos configurar los providers de OAUTH), y el modo que si lo cambiamos a WebHook, podremos hacer “capturas” para peticiones desencadenadas por Github o Slack.

Esto es la forma visual, pero si pulsamos en el editor avanzado, aparecerá un editor del fichero function.json.

Algunas cosas a tener en cuenta:

  1. Se recomienda usar Async y Await, tal como usar Task como retornos.
  2. Se puede poner un CancellationToken que nos permita gestionar la cancelación de las tareas.
  3. Se pueden utilizar paquetes de Nuget a través de subir un fichero project.json.
  4. Podemos usar DLLs propias que subamos a un directorio Bin.
  5. Podemos reusar los ficheros csx a traves de usar #load y el nombre.
  6. Se recomienda evitar funciones “pesadas”
  7. Nuestra funciones deberían ser “stateless”

Por otro lado, tenemos integraciones tanto para la entrada en la función como para acciones de salida de la función:

Podemos llevar a cabo integraciones de entrada con Bot Framework, ficheros Blob, SAAS, inserciones en DocumentDb o tablas de Mobile Apps.

Y de salida con Event Hub, inserciones, notificaciones push, colas, o Twilio…

Resumen

Azure Functions nos va a aportar una nueva forma de publicar funcionalidades o servicios que queramos exponer sin preocuparnos de nada a nivel de infraestructura.

Como gran parte de los servicios de Azure, nos aporta un gran nivel de integraciones, ya sea para autenticaciones a través de los proveedores de OAUTH, como de otras integraciones con otros servicios de Azure.

Nos va a facilitar el desarrollo, ya que podremos hacerlo directamente desde nuestro navegador sin necesidad de tener un Visual Studio, pero también podremos hacerlo desde el mismo.

Tenéis mas info en:

https://docs.microsoft.com/en-us/azure/azure-functions/functions-overview

Espero que os sea de utilidad.

Like what you read? Give Javier Torrecilla a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.