Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
23m 53s
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. Si bien el enfoque está en aplicaciones de consola, sus conceptos se aplican directamente al desarrollo y manejo de configuraciones de aplicaciones de funciones en Azure Functions apps, especialmente al trabajar localmente, configurar un archivo de proyecto o desplegar a App Service.
En este artículo, lo desglosaremos todo utilizando la estructura de Tim y trasladaremos sus lecciones al desarrollo moderno de 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.
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.
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.
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.
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 de Azure, con reloadOnChange introduciendo el concepto de configuraciones de desarrollo que se refrescan dinámicamente.
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.
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"
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.
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.
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.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy