Acceso a la configuración de aplicaciones en Azure Functions
En el panorama actual de la nube, en rápida evolución, la gestión de la configuración de las aplicaciones de forma segura y flexible es fundamental, especialmente para los desarrolladores que crean con Azure Functions. Tanto si está desplegando una aplicación de funciones a través del portal de Azure, como si está gestionando los ajustes de configuración mediante Azure Functions Core Tools o cableando secretos a través de Key Vault, es esencial estructurar la configuración de su aplicación desde el principio.
En una sesión práctica titulada "Accessing AppSettings in Console Apps Including Secrets.json", Tim Corey recorre las mejores prácticas utilizando el ecosistema .NET. Aunque se centra en las aplicaciones de consola, sus conceptos se aplican directamente al desarrollo y la gestión de la configuración de aplicaciones de funciones en Azure Functions, especialmente cuando se trabaja localmente, se configura un archivo de proyecto o se despliega en App Service.
En este artículo, lo desglosaremos todo utilizando la estructura de Tim y trasladaremos sus lecciones al desarrollo moderno de Azure Functions.
Por qué es importante la configuración de la aplicación para Azure Functions
Tim comienza explicando la importancia de la configuración de las aplicaciones cuando se crea algo más que las aplicaciones .NET más básicas. La necesidad de acceder a la configuración de la aplicación en entornos Azure Function es aún más pronunciada, dado que el tiempo de ejecución de Azure Functions espera que los valores de configuración se obtengan de almacenes gestionados como variables de entorno, local.settings.json basado en JSON o Azure App Configuration.
"Una característica común que los desarrolladores acaban deseando es acceder a un archivo de configuración", explica Tim en el minuto 0:17.
Tanto si se trata de una clave de API, una cadena de conexión o un indicador de función, la flexibilidad y la seguridad de la configuración son primordiales, especialmente cuando se despliega en plataformas en la nube como Microsoft Azure.
Crear la base con Visual Studio
En el minuto 1:24, Tim crea un proyecto de consola con Visual Studio y lo denomina SettingsDemoApp. Mientras que los desarrolladores de Azure normalmente inicializarían un proyecto de funciones utilizando las herramientas básicas de Azure Functions, el método de Tim de andamiaje y organización del código se traduce a la perfección. La configuración del archivo del proyecto y la estructura del código son fundamentos clave, tanto si se encuentra en un entorno de consola como si está creando una aplicación Azure Functions aislada con el modelo de trabajador aislado.
Instalar los paquetes NuGet necesarios
A partir del minuto 2:33, Tim explica cómo instalar cuatro paquetes NuGet esenciales:
-
Microsoft.Extensiones.Configuración
-
Microsoft.Extensiones.Configuración.Json
-
Microsoft.Extensiones.Configuración.Binder
- Microsoft.Extensiones.Configuración.SecretosDeUsuario
Esto refleja el sistema de configuración de aplicaciones utilizado por Azure Functions, que se basa en los mismos paquetes entre bastidores. Tim hace hincapié en el valor de la modularidad:
En realidad, esto es lo contrario de hinchado", señala, ya que .NET Core evita cargas innecesarias al permitir a los desarrolladores optar por NuGet.
Para una aplicación de función típica, estos paquetes están prerreferenciados o se añaden fácilmente para admitir lógica personalizada para ajustes de configuración, inyección de dependencias o casos de uso avanzados como la compatibilidad con Key Vault y Azure App Configuration.
Añadir y configurar un archivo de configuración JSON
En el minuto 6:12, Tim crea un nuevo archivo llamado appsettings.json, imitando la estructura que se vería en local.settings.json para el desarrollo de Azure Functions. La rellena con pares clave-valor como:
{
"Usuario": {
"Nombre": "Tim",
Apellido: "Corey"
},
"Valor de conteo de inicio": 5
}
En las funciones a nivel local, los desarrolladores utilizan local.settings.json en casi el mismo formato para leer los valores en su lógica de aplicación a través de IConfiguration inyectado. Tim también destaca un paso clave: establecer la opción "Copiar al directorio de salida" del archivo en "Copiar si es más reciente", lo que es crucial para garantizar que la configuración esté disponible en tiempo de ejecución.
Construir manualmente el canal de configuración
Tim procede a escribir el código que establece manualmente una canalización de configuración utilizando:
var builder = nuevo ConfigurationBuilder()
.SetBasePath(Directorio.GetCurrentDirectory())
addJsonFile("appsettings.json", optional: true, reloadOnChange: true);
Aunque el tiempo de ejecución de Azure Functions gestiona esta canalización automáticamente, el desglose de Tim aclara cómo los proyectos de funciones obtienen valores de diferentes fuentes. Su uso de .AddJsonFile() refleja cómo los desarrolladores configuran local.settings.json en su aplicación Azure, con reloadOnChange introduciendo el concepto de actualizar dinámicamente los ajustes de configuración durante el desarrollo.
Lectura de valores con seguridad de tipos
Tim muestra cómo leer configuraciones usando el método GetValue() a las 11:00:
int count = config.ObtenerValor<int> ("ValorContadorIniciar");
Y para las configuraciones anidadas, utiliza
cadena nombre = config.GetValue<string> ("Usuario:Nombre");
Cuando se trabaja con Azure Functions, se aplican estos mismos patrones sintácticos. El uso que hace Tim de claves delimitadas por dos puntos ("User:FirstName") tiene una correspondencia directa en variables de entorno que utilizan la sintaxis del guión bajo doble (__):
Usuario__Nombre=Tim
Esto es especialmente útil cuando se despliega en Azure App Service o se configura a través del portal de Azure, donde se puede anular la configuración en tiempo de ejecución utilizando la configuración de la aplicación o anulaciones basadas en el entorno.
Maneja secretos de forma segura con UserSecrets
A las 15:00, Tim presenta el patrón secrets.json a través de User Secrets, utilizado para almacenar datos confidenciales como claves de API o cadenas de conexión sin exponerlos en el control de código fuente. Muestra cómo adjuntar un almacén de secretos de usuario a tu proyecto utilizando esta línea:
constructor.AddUserSecrets<Program> ();
Hace hincapié en que el orden es importante: los secretos del usuario anulan las fuentes de configuración anteriores, lo que refuerza el principio de que el último gana. Aunque Azure Functions no utiliza secrets.json directamente, en un entorno de producción en la nube se utilizaría Azure Key Vault, opcionalmente con autenticación de identidad gestionada, para lograr las mismas anulaciones seguras.
Tim señala que los secretos en el desarrollo local son un sustituto de cualquier sistema seguro que se utilice en producción:
"Este secrets.json es un sustituto de cualquier sistema seguro que utilices para almacenar tus valores reales, ya sea Key Vault o la configuración del entorno"
Ejecutar y validar configuraciones
Tras configurar appsettings.json y secrets.json, Tim ejecuta el ejemplo y valida que los secretos anulan los valores base. Esto refleja directamente cómo Azure Functions maneja las anulaciones de múltiples fuentes: local.settings.json, Azure App Configuration, variables de entorno o Key Vault.
Tanto si se utiliza Azure Functions Core Tools a través de la línea de comandos como si se despliega a través de Visual Studio, el orden de carga y la estratificación de la configuración de la aplicación se comportan exactamente como Tim indica.
Bestes prácticas para la gestión de la configuración
Tim concluye recomendando mantener los valores de configuración que no cambian a menudo -como los indicadores de características, los ajustes de frecuencia o las configuraciones CORS- en el archivo JSON y colocar los datos confidenciales, como las cadenas de conexión y los secretos, en un almacén seguro.
Esto se alinea con las mejores prácticas modernas para Azure Functions donde:
-
Los desarrolladores utilizan local.settings.json para funciones a nivel local
-
Los equipos utilizan el portal Azure para la configuración de aplicaciones
-
Secretos ir a Key Vault
- Los valores del almacén Azure App Configuration ayudan a separar la configuración del código
Estas fuentes se integran con el tiempo de ejecución mediante inyección de dependencias, sin tocar los binarios de la aplicación.
Reflexiones finales
Aunque el vídeo de Tim trata sobre aplicaciones de consola, todas las técnicas que enseña se extienden sin problemas a las aplicaciones de Azure Functions, desde la creación de archivos de configuración, la lectura de claves, el uso de la identidad gestionada hasta la carga de la configuración a través de la inyección de dependencias. Tanto si se trata de desplegar con Visual Studio, gestionar una cuenta Azure o buscar ejemplos completos de código, sus conocimientos se adaptan directamente a las prácticas reales en la nube.
