Publicación de Azure Functions desde Visual Studio
En un post anterior mostramos cómo crear, configurar y depurar una Azure Function desde Visual Studio. Trabajar desde Visual Studio resulta mucho más cómodo ya que de esta manera disponemos de toda la potencia del IDE y podemos depurar la función fácilmente, pero eso requiere publicarla desde el propio Visual Studio. Vemos cómo hacerlo y cuál es el resultado final.
Cloud Explorer
Es importante señalar que, a pesar de que la publicación en Azure puede realizarse desde versiones de Visual Studio anteriores a la versión 2019, a partir de Visual Studio 2019 disponemos de una ventana de herramientas especializada en interactuar con una suscripción de Azure. El Cloud Explorer nos permite comprobar los recursos de Azure de nuestra suscripción pero además podemos hacer operaciones con ellos, como asociar depuradores, iniiciar o detener servicios o recursos, diagnosticar, etc.
No sería ningún problema crear desde el Cloud Explorer los recursos necesarios para la publicación, pero eso requiere saber qué tenemos que crear exactamente. Si no tenemos experiencia en Azure tal vez eso sea algo confuso al principio, así que vamos a dejar que el propio Visual Studio nos guíe en el proceso de publicación.
Asistente de publicación en Azure
El asistente de publicación nos guiará paso a paso entre las opciones de publicación y creará los recursos necesarios en Azure. En primer lugar se nos pregunta en qué sistema alojaremos nuestra función:
Vamos a publicar en Azure, pero también podríamos hacerlo en otro destino. Publicar en Azure nos conduce a un paso en el que debemos escoger la plataforma de destino:
Azure nos ofrece diversas opciones de publicación. Las más sencillas requieren tan solo una aplicación de funciones hospedada en un equipo Windows o en un equipo Linux. No hay grandes diferencias entre ambos, pero si nuestro servicio utiliza características propias de Windows esta plataforma es más recomendable. También podemos publicar en un contenedor de Docker específico de nuestra función o en un registro de contenedores. Estas opciones requieren más recursos y son más complejas, pero también pueden resultar mejores en términos de rendimiento. De momento vamos a escoger una plataforma Windows y seguiremos con el proceso:
En este paso el asistente nos permitirá crear una nueva aplicación de funciones para alojar nuestra función. Todas las funciones han de estar alojadas en una aplicación de funciones, pero una misma aplicación de funciones puede alojar varias funciones. En este caso el asistente nos permitirá crear una nueva aplicación de funciones pero no podremos emplear una aplicación de funciones existente porque aún no tenemos ninguna creada. Cloud Explorer detecta esa situación y por lo tanto la opción que nos ofrece es la de la creación de una nueva aplicación de funciones.
La captura que mostramos detalla la información que Cloud Explorer necesita para crear la aplicación de funciones. Vamos paso por paso:
- Nombre: Es obligatorio e importante, ya que formará parte de la URL de acceso a la función.
- Suscripción: Seleccionamos nuestra suscripción. una cuenta puede tener diversas suscripciones, asociadas a distintas organizaciones.
- Grupo de recursos: El grupo de recursos es una forma de organizar los recursos que manejamos en Azure. Podemos crear el grupo desde esta misma pantalla. La ubicación del grupo de recursos no está directamente relacionada con la ubicación del recurso.
- Tipo de plan y plan de hospedaje: En estas listas seleccionamos el tipo de plan al que enlazaremos el recurso que estamos creando. Como casi todo, es una opción que puede cambiarse más adelante desde la administración de Azure. Sin embargo es un aspecto delicado. De momento para nuestra publicación elegiremos el plan Consumo. Las opciones que tenemos los las siguientes:
- Consumo: Este es un plan predeterminado que no posee un nombre personalizado y no es administrable. Si escogemos esta opción solo necesitamos escoger en la siguiente la ubicación del recurso. Debemos escoger una ubicación lo más cercana posible, pero hay que recordar que no todas las ubicaciones disponen de todos los servicios. En cualquier caso, la ubicación del Oeste de Europa (la más cercana a España) dispone de todos los servicios.
- Premium: al escoger esta opción el asistente nos crea automáticamente un plan de servicios de tipo Premium. Este es un plan de pago por uso, así que hemos de tener cuidado. De todas formas podemos personalizarlo más adelante.
- Plan de App Service: Esta opción nos permite elegir un plan que ya tengamos creado en Azure, o bien crear un plan nuevo. La creación de planes de servicios de aplicaciones es un proceso también delicado con muchas variantes. Baste decir que el plan puede ser completamente gratuito o escalarse vertical u horizontalmente todo lo que sea necesario.
- Azure Storage: Para almacenar nuestro código fuente, los ficheros de configuración y los binarios es necesaria una cuenta de almacenamiento. El escalado de las cuentas de almacenamiento depende en gran medida del tipo de redundancia utilizada. Desde esta pantalla podemos crear una nueva cuenta de almacenamiento. Para esta publicación crearemos una cuenta con redundancia local, lo más cercana posible:
Ya está todo listo. Aceptar en las siguientes pantallas creará nuestra aplicación de funciones en Azure, junto con los recursos necesarios y publicará nuestra función en ella. Ahora podremos verla y probarla en Azure.
Ejecución y prueba
Desde la pantalla de publicación de Visual Studio podemos acceder directamente al portal de Azure para probar nuestra función. El enlace nos lleva a la aplicación de funciones y allí podemos hacer clic en el nodo de funciones y seleccionar nuestra función. Desde esta página podemos monitorizarla y configurarla, pero la primera opción que tenemos disponible es la de “Código y prueba”.
Si la función la hubiéramos creado directamente en Azure, aquí podríamos ver el código fuente y editarlo, pero como la hemos creado en Visual Studio no podemos editar el código fuente, ya que la publicación solo publica la DLL ya compilada. Solo podemos cambiar el fichero function.json que es el fichero de configuración. Sin embargo podemos probarla mediante un sencillo interfaz que nos permite ejecutar la función mediante un Query String o mediante un métido POST:
El resultado lo hemos puesto como imagen destacada de este post. Sin embargo esta no es la única forma en la que podemos probar nuestra función. Recordemos que la función está ya publicada y por lo tanto tenemos a nuestra disposición una URL pública que podemos utilizar. En las opciones de la función podemos buscar la opción para copiar la URL de la función:
Podemos copiar la URL y pegarla en una pestaña nueva de este navegador o de cualquier otro. Si tenemos la precaución de poner los parámetros del Query String, veremos como nuestra función ya está publicada en Internet y se ejecuta con normalidad.