Leer App Settings de Web Apps con Node.js y ASP.NET

Azure Web Apps pone a nuestra disposición las denominadas “App Settings”, que son parejas de claves-valor que podemos utilizar en nuestra aplicación. Podremos utilizarlas como parte de configuración de nuestra aplicación. Un ejemplo concreto sería la posibilidad de utilizarlas con los slots, de forma que, en función de en qué slot despleguemos la aplicación, podamos cargar una cadena de conexión que apunte a una base de datos de desarrollo o una cadena de conexión que lo haga apuntando a una en producción.

Gracias a esta característica, evitamos tener que almacenar información sensible dentro de algún fichero de nuestra aplicación y que, por tanto, pueda ser fácilmente accesible.

En función del lenguaje que utilicemos, el acceso a las “App Settings” desde nuestro código se realizará de manera diferente:

  • Si utilizamos ASP.NET, los parámetros se inyectarán en el fichero Web.config, dentro de <appSettings> , de forma que podremos acceder a ellas como si accediéramos a cualquier otra que tuviésemos en local. Cabe destacar que se sobrescribirán aquellos valores con la misma clave, por lo que hay que ser cuidadosos a la hora de elegir el nombre que le demos.
  • Si utilizamos PHP, Java, Node.js o Python, estos parámetros serán accesibles como variables de entorno, y se crearán dos: una con el nombre que le demos al parámetro, y otra con ese nombre precedido de APPSETTING_ . Ambas tendrán el mismo valor.

Existe otro tipo especial de “App Settings”, que son las “Connection Strings”. Tienen el mismo funcionamiento que las anteriores, con la diferencia de que las “Connection Strings” tienen metadatos indicando a Azure que se trata de cadenas de conexión de bases de datos.

Vamos a ver cómo podemos utilizar las App Settings utilizando ASP.NET y Node.js. El ejemplo será sencillo: Crearemos una página que muestre un texto, el cual será el valor de la variable que tengamos en Azure Web Apps.

Lo primero es lo primero: Crear parámetros en Azure

Crearemos una Web App en Azure y nos dirigiremos a “Application Settings”. Dentro de ellas, si nos desplazamos hacia abajo, veremos el apartado de “App Settings”, que es donde crearemos nuestro parámetro con el valor del texto. Si nos fijamos, al lado de cada variable que creemos aparecerá un checkbox con el nombre de “Slot setting”. Más adelante en este mismo post veremos para qué sirve.

1

Le pondremos como clave “textoSaludo”. Es importante recordar esta clave, ya que es la que identificará el parámetro y la que utilizaremos para acceder a su valor desde nuestro código de la aplicación web.

2

Tras esto guardamos los cambios y procederemos a crear nuestra aplicación.

Segundo paso: Crear nuestra aplicación

Como comentamos anteriormente, vamos a ver cómo utilizar las App Settings utilizando ASP.NET y Node.js. Por esta razón, tendremos creadas dos Web Apps con la misma configuración.

Desde ASP.NET

Creamos una aplicación desde Visual Studio utilizando la plantilla de MVC.

3

Tras esto, lo que haremos será crear una variable en el ViewBag que devuelva el texto que contiene el parámetro que configuramos a la vista. Para ello, en la acción Index del controlador HomeController, pondremos el siguiente código:

4

Y dejamos la vista Index tal como se muestra en la captura:

5

 

¡Eso es todo! No tenemos que hacer más para acceder a las App Settings, ya que como comentamos al principio, se acceden de la misma forma que lo haríamos si las tuviéramos en local. Azure inyectará las App Settings a nuestra aplicación cuando esta se ejecute.

Si ahora procedemos a publicar la aplicación en la Web App que habíamos creado:

6

 

Podemos ver el texto del parámetro que pusimos. Si queremos actualizar el valor del texto, sólo tenemos que ir al portal, cambiarlo, y recargar la página. ¡Es una característica muy cómoda si queremos tener un valor dinámico sin tener que volver a publicar cada vez que lo cambiemos!

Desde Node.js

Vamos a crear una aplicación Node.js desde Visual Studio. Para ello, hace falta instalar las Node.js for Visual Studio Tools. Tras ello, al crear un nuevo proyecto nos aparecerá la posibilidad de hacerlo en Node.js, como se puede apreciar en la imagen.

7

 

Escogemos Blank Azure Node.js Web Application y le damos a Ok.

Como comentamos anteriormente, para acceder a una App Setting desde Node.js (al igual que en PHP, Java o Python) debemos acceder como si se tratara de una variable de entorno. Por tanto, pondríamos el código siguiente dentro del fichero server.js para acceder a la variable textoSaludo que habíamos creado.

8

 

¡Y listo! Publicamos la aplicación y, si entramos, veremos el texto del parámetro.

9

 

Uso con Slots

Es posible que utilicemos varios entornos de despliegue para nuestra aplicación. Además, hay ocasiones en las que utilizaremos parámetros exclusivos de cada entorno y que no queramos compartir con el resto de entornos.

Es por ello que Web Apps nos da la posibilidad de marcar las App Settings que vayamos realizando como exclusivas de dicho slot. ¿Qué quiere decir? Que, si en algún momento realizamos un intercambio de lo existente en ese slot con otro, no se intercambiarán las App Settings marcadas como exclusivas del slot. Veamos un ejemplo.

Hemos creado un slot llamado Development para la Web App que alojaba nuestra aplicación hecha en ASP.NET. El slot va a tener el mismo App Setting que antes, pero con un texto diferente, y marcado como Slot Setting:

10

 

Si ahora desplegamos la aplicación en el slot, veremos la siguiente pantalla:

11

 

No obstante, si ahora intercambiamos el slot “Development” por el de producción…

12

Vemos que el valor de la App Setting es el que teníamos en producción desde un principio.

¿Qué hubiera pasado si en el slot Development no hubiera marcado la App Setting como exclusiva? Que, al realizar el intercambio, se habría sobreescrito el valor de ésta en el slot de destino. Y, por tanto, hubiéramos visto el mismo texto en producción y en Development.

Esta característica se hace imprescindible cuando, por ejemplo, tenemos dos entornos que apuntan a bases de datos diferentes. En nuestro código haremos referencia siempre a un parámetro que contenga cadena de conexión, la cual tendrá valores diferentes en función del entorno en el que estemos. Así, cuando hagamos un intercambio de slots, automáticamente la aplicación apuntará a la nueva base de datos del nuevo entorno, sin tener que realizar nada más.

Daniel Escribano García

Technical Evangelist Intern

@daesgar90