Revisión de conceptos de configuración de aplicaciones
La creación de microservicios para un entorno distribuido presenta un desafío significativo. Los microservicios hospedados en la nube a menudo se ejecutan en varios contenedores en varias regiones. La implementación de una solución que separa el código de cada servicio de la configuración facilita la evaluación de prioridades de los problemas en todos los entornos.
En esta unidad, explore cómo integrar las características de configuración de ASP.NET Core y Docker con Azure App Configuration para abordar este desafío de forma eficaz.
Revisará lo siguiente:
- ASP.NET infraestructura de configuración principal.
- Abstracción de la configuración de Kubernetes: ConfigMap.
- Servicio Azure App Configuration.
- Biblioteca de administración de características de .NET.
- Componentes de marca de característica implementados en la aplicación.
configuración de ASP.NET Core
La configuración de un proyecto de ASP.NET Core se incluye en uno o varios proveedores de configuración de .NET. Un proveedor de configuración es una abstracción sobre un origen de configuración específico, como un archivo JSON. Los valores del origen de configuración se representan como una colección de pares clave-valor.
Una aplicación ASP.NET Core puede registrar varios proveedores de configuración para leer la configuración de varios orígenes. Con el host de aplicación predeterminado, se registran automáticamente varios proveedores de configuración. Los siguientes orígenes de configuración están disponibles en el orden indicado:
- Archivo JSON (appsettings.json)
- Archivo JSON (appsettings.{environment}.json)
- Secretos de usuario
- Variables de entorno
- Línea de comandos
Cada proveedor de configuración puede aportar su propio valor de clave. Además, cualquier proveedor puede invalidar un valor de un proveedor que se registró en la cadena antes que él mismo. Dado el orden de registro de la lista anterior, un UseFeatureManagement parámetro de línea de comandos invalida una UseFeatureManagement variable de entorno. Del mismo modo, una clave UseFeatureManagement dentro de appsettings.json puede ser invalidada mediante una clave UseFeatureManagement almacenada en appsettings.Development.json.
Los nombres de clave de configuración pueden describir una jerarquía. Por ejemplo, la notación eShop:Store:SeasonalSale hace referencia a la característica SeasonalSale dentro del microservicio Store de la aplicación eShop . Esta estructura también puede asignar valores de configuración a un gráfico de objetos o a una matriz.
Importante
Algunas plataformas no admiten dos puntos en los nombres de variables de entorno. Para garantizar la compatibilidad multiplataforma, se usa un carácter de subrayado doble (__) en lugar de dos puntos (:) para delimitar las claves. Por ejemplo, eShop__Store__SeasonalSale es la notación equivalente multiplataforma para eShop:Store:SeasonalSale.
ASP.NET Core usa configurationBinder para asignar valores de configuración a objetos y matrices. La asignación a nombres de clave se realiza sin distinción de mayúsculas ni minúsculas. Por ejemplo, ConnectionString y connectionstring se tratan como claves equivalentes. Para obtener más información, consulte claves y valores.
Configuración de Docker
En Docker, una abstracción para manejar la configuración como una colección de pares clave-valor es la sección de variables de entorno del archivo YAML de un contenedor. El fragmento de código siguiente es un extracto del archivo de docker-compose.yml la aplicación:
services:
frontend:
image: storeimage
build:
context: .
dockerfile: DockerfileStore
environment:
- ProductEndpoint=http://backend:8080
- ConnectionStrings:AppConfig=Endpoint=https://eshop-app-features.azconfig.io;Id=<ID>;Secret=<SECRET>
ports:
- "32000:8080"
depends_on:
- backend
El fragmento de código de archivo define:
- Variables almacenadas en la
environmentsección del archivo YAML, como se resalta en el fragmento de código anterior. - Se presenta a la aplicación en contenedor como variables de entorno.
- Mecanismo para conservar los valores de configuración de .NET en aplicaciones de microservicios.
Las variables de entorno son un mecanismo multiplataforma para proporcionar la configuración en tiempo de ejecución a las aplicaciones hospedadas en los contenedores de Docker.
Azure App Configuration (Configuración de aplicaciones de Azure)
Un servicio de configuración centralizado es especialmente útil en las aplicaciones de microservicios y en otras aplicaciones distribuidas. En este módulo se presenta Azure App Configuration como servicio para administrar de forma centralizada los valores de configuración, específicamente para las marcas de características. El servicio facilita la solución de problemas de errores que surgen cuando se implementa la configuración con una aplicación.
App Configuration es un servicio totalmente administrado que cifra los valores de clave tanto en reposo como en tránsito. Los valores de configuración almacenados con él se pueden actualizar en tiempo real sin necesidad de volver a implementar o reiniciar una aplicación.
En una aplicación ASP.NET Core, Azure App Configuration se registra como proveedor de configuración. Aparte del registro del proveedor, la aplicación no conoce el almacén de App Configuration. Los valores de configuración se pueden recuperar de este servicio mediante la abstracción de la configuración de .NET; es decir, la interfaz IConfiguration.
Biblioteca de gestión de funciones
La biblioteca administración de características proporciona API de .NET estandarizadas para administrar marcas de características dentro de las aplicaciones. La biblioteca se distribuye a través de NuGet en forma de dos paquetes diferentes denominados Microsoft.FeatureManagement y Microsoft.FeatureManagement.AspNetCore. Este último paquete proporciona asistentes de etiquetas para su uso en los archivos de Razor de un proyecto de ASP.NET Core. El paquete anterior es suficiente cuando los asistentes de etiquetas no son necesarios o cuando no se usan con un proyecto de ASP.NET Core.
La biblioteca está construida sobre IConfiguration. Por este motivo, es compatible con cualquier proveedor de configuración de .NET, incluido el proveedor de Azure App Configuration. Dado que la biblioteca está desacoplada de Azure App Configuration, la integración de los dos se hace posible a través del proveedor de configuración. La combinación de esta biblioteca con Azure App Configuration permite alternar dinámicamente las características sin implementar la infraestructura auxiliar.
Integración con Azure App Configuration
Para comprender la integración de Azure App Configuration y la biblioteca de administración de características, consulte el siguiente extracto del archivo de Program.cs un proyecto de ASP.NET Core:
string connectionString = builder.Configuration.GetConnectionString("AppConfig");
// Load configuration from Azure App Configuration
builder.Configuration.AddAzureAppConfiguration(options => {
options.Connect(connectionString)
.UseFeatureFlags();
});
En el fragmento de código anterior:
- Se llama al método
builder.Configurationde la aplicación para registrar un proveedor de configuración para el almacén de Azure App Configuration. El proveedor de configuración se registra a través de una llamada aAddAzureAppConfiguration. - El comportamiento del proveedor de Azure App Configuration se configura con las siguientes opciones:
- Autentíquese en el servicio de Azure correspondiente utilizando una cadena de conexión que se pasa en la llamada al método
Connect. La cadena de conexión se recupera de laconnectionStringvariable . Las fuentes de configuración registradas están disponibles a través debuilder.Configuration. - Habilite la compatibilidad con las marcas de características a través de una llamada a
UseFeatureFlags.
- Autentíquese en el servicio de Azure correspondiente utilizando una cadena de conexión que se pasa en la llamada al método
- El proveedor de Azure App Configuration reemplaza a todos los demás proveedores de configuración registrados porque está registrado después de cualquier otro.
Sugerencia
En un proyecto de ASP.NET Core, puede acceder a la lista de proveedores registrados mediante el análisis de la configBuilder.Sources propiedad dentro de ConfigureAppConfiguration.