El otro día fui a la .Net Conf Barcelona 2018 y pude asistir a la charla que dieron @tonirecio y @barbosound en la que hablaban sobre como habían usado Azure logic apps para automatizar ciertas tareas recurrentes en su organización.
Logic apps es uno de esos temas en los que llevaba tiempo pensando, pero ya sabes, el tiempo es limitado y nunca me ponía a ello, por lo que esta charla me vino de maravillas para conocer de que va el tema e interesarme por ellas.
Azure Logic Apps te permite crear flujos de trabajo y procesos sin tirar una sola linea de código. Es el concepto de no tirar una sola linea de código lo que me tiraba un poco para atrás a la hora de ponerme con ello, pero me he dado cuenta de que bien usado y con cabeza, puede ser una herramienta muy potente que nos puede ahorrar muchas horas de trabajo y algún que otro dolor de cabeza.
Como ejemplo, he creado una logic app que «escucha» Twitter y si detecta un hastag concreto, captura el Tweet y me lo envía por correo. Lo he hecho en cinco minutos. Por muy rápido que seas picando, seguro que tardas mas.
Crear una Logic app es tan sencillo como entrar en el portal de Azure, clicar sobre crear nuevo recurso y buscar logic app.
Luego, has de introducir unos datos básicos y ya esta todo listo para crear la primera logic app:
Se puede empezar a partir de una plantilla según las necesidades que se tengan, y luego ir añadiendo «cajitas» y configurándolas para que se haga el trabajo «mágicamente».
Para probar el resultado, he escrito un Tweet con el hashtag que estoy «escuchando»:
Y efectivamente me ha llegado el correo:
¿Maravilloso verdad? Como he dicho antes, usado con cabeza puede ser muy potente, ya que tienes muchas «cajitas» para jugar. Se conecta a muchos servicios existentes y puedes conectarlo con Azure Functions y con Cognitive services. Puede dar mucho juego. Es posible que escriba algunas entradas concretas sobre esto.
Ahora bien, ¿como controlamos esto? ¿podemos tener versionado y volver a un punto concreto? ¿como desplegamos esto en distintos entornos? ¿como pueden colaborar los equipos? ¿lo podemos guardar en un repositorio de código? La respuesta es si, y la clave esta en las plantillas ARM.
Al crear una logic app desde el portal de Azure, en la botonera superior vemos que hay un botón que pone «Código», y si lo pulsamos podemos ver un JSON como este:
Si has visto alguna vez una plantilla ARM este código te sonará.
Ahora vamos a lo que como desarrolladores nos gusta, controlar todo esto bien. Abre Visual Studio y crea un nuevo proyecto de Azure Resource Group.
Instala las tools de Azure Logic Apps for Visual Studio.
Una vez instaladas, abre la ventana de Cloud Explorer y conecta con tu suscripción de Azure. Ahora podrás ver las logics apps que tengas creadas, si haces clic derecho sobre cualquiera de ellas aparece un menú donde puedes seleccionar «Open with Logic App Editor».
Ahora las puedes ver como si estuvieses en el portal. Aparece un botón para descargarla.
Añade el fichero descargado a tu proyecto.
Ahora puedes pulsar sobre fichero con el botón derecho y abrir con el diseñador de logic apps y realizar las modificaciones que sean necesarias.
Si abres el fichero normalmente (no con el diseñador) se puede comprobar que tiene la estructura típica de un recurso ARM.
Añade los parámetros que sean necesarios para la definición de cada uno de los entornos. Esto es lo que usaremos luego para automatizar el despliegue y asignar el valor correspondiente a cada uno de ellos. Yo para el ejemplo voy a parametrizar la persona a la que se envía el correo al capturar un Tweet.
Modifica la plantilla para que coja el valor del parámetro.
Ahora puedes añadir este proyecto a un repositorio de código para tenerlo controlado tal y como harías con cualquier otro proyecto. Yo en mi caso lo he metido en un repositorio de Azure DevOps, que es la herramienta que voy a usar para la automatización del despliegue.
Desplegando nuestra logic app con Azure DevOps
Ahora que ya tenemos el código de la logic app bien controlado en un repositorio, es hora de desplegar y posiblemente tengas la necesidad de hacerlo en distintos entornos (test, pre, pro, etc…). Para ello, dentro de Azure DevOps, accede a la sección de relesases y crea una nueva.
Añade un artifact apuntando al repositorio.
Crea el primero de los entornos y añade una tarea del tipo Azure Resource Group Deployment. Configura los datos de la tarea, seleccionando el fichero .json que contiene la definición ARM y sobre-escribiendo los parámetros necesarios, tal y como se muestra en la imagen.
No escribas el valor de los parámetros en «cartón piedra» y utiliza variables, que luego podrás definir para cada entorno.
Ahora puedes clonar el entorno y crear tantos como necesites. Asegúrate de que el nombre del recurso se genere a partir de una variable, así al clonar no tendrás que tocar nada de la configuración de la tarea, solo añadir un nuevo valor para la variable en ese entorno.
Ahora ya puede lanzar el despligue y si todo va bien, tendras la logic app desplegada en cada uno de tus entornos.
!Nos leemos!
Hola!
Muy interesante el artículo!! Y se podrían parametrizar los conectores? Por ejemplo, yo uso un conector a Dynamics con el usuario Alejandro, y me gustaría que cuando se desplegara a otro entorno se cambiara de usuario!
Saludos.
Muy buen artículo, existe alguna integración de logic apps con algún repo para poder guardar las diferentes versiones?
Hola Marco, la respuesta es si. En el propio artículo la parte de «devops» se engancha al repositorio creado en Azure Repos.
Pero todo el JSON, que es la definición del logic app, puedes ponerlo en el repositorio que tu quieras. Ahora bien, siempre desde la parte de código del Visual Studio (o IDE que utilices)
Gracias! Puedes pasarlo con mi permiso y sin el 🙂
Muy buen artículo, muy claro el paso a paso, ahora si me vuelven a preguntar, con tu permiso paso el enlace! 🙂