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 suelen ejecutarse en varios contenedores en diversas regiones. La implementación de una solución que separe el código de cada servicio de la configuración facilita la clasificación de los problemas en todos los entornos.
En esta unidad, exploraremos 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:
- Infraestructura de configuración de ASP.NET Core.
- 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 encuentra en uno o varios proveedores de configuración de .NET. Un proveedor de configuración es una abstracción con respecto a un origen de configuración específico como, por ejemplo, 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 diversos orígenes. Con el host de aplicación predeterminado, varios proveedores de configuración se registran automáticamente. 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. Una vez especificado el orden de registro en la lista anterior, un parámetro de línea de comandos UseFeatureManagement
invalida una variable de entorno UseFeatureManagement
. Del mismo modo, una clave UseFeatureManagement
dentro de appsettings.json se puede reemplazar por una clave UseFeatureManagement
almacenada en appsettings.Development.json.
Los nombres de las claves 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 una matriz.
Importante
Algunas plataformas no admiten dos puntos en los nombres de las variables de entorno. Con el fin de garantizar la compatibilidad multiplataforma, se utiliza 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 consideran claves equivalente. Para obtener más información, vea esta sección sobre claves y valores.
Configuración de Docker
En Docker, una abstracción para controlar la configuración como una colección de pares clave-valor es la sección variable de entorno del archivo YAML de un contenedor. El siguiente fragmento de código está extraído del archivo docker-compose.yml
de 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:
- Las variables almacenadas en la sección
environment
del archivo YAML, como se resalta en el fragmento anterior. - se presentan a la aplicación en contenedor como variables de entorno;
- Un mecanismo para conservar los valores de configuración de .NET en las aplicaciones de microservicios.
Las variables de entorno son un mecanismo multiplataforma para proporcionar la configuración del entorno de ejecución a las aplicaciones hospedadas en los contenedores Docker.
Azure App Configuration
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, en concreto para marcas de características. El servicio facilita el proceso de solución de los errores que surgen cuando la configuración se implementa con una aplicación.
App Configuration es un servicio totalmente administrado que cifra los valores de clave en reposo y en tránsito. Los valores de configuración almacenados con este servicio se pueden actualizar en tiempo real sin necesidad de volver a implementar o reiniciar una aplicación.
En una aplicación de 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 Feature Management
La biblioteca Feature Management proporciona API .NET estandarizadas para administrar las 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
. El segundo proporciona aplicaciones auxiliares de etiquetas para usarse en los archivos de Razor de un proyecto de ASP.NET Core. El primero es suficiente cuando las aplicaciones auxiliares de etiquetas no son necesarias o cuando no se usan con un proyecto de ASP.NET Core.
La biblioteca se basa en IConfiguration
. Por esta razón, 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 ambos es posible a través del proveedor de configuración. Al combinar esta biblioteca con Azure App Configuration, se pueden activar y desactivar las características de forma dinámica sin necesidad de implementar una infraestructura compatible.
Integración con Azure App Configuration
Para comprender la integración de Azure App Configuration y de la biblioteca Feature Management, vea el siguiente extracto del archivo Program.cs
de 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.Configuration
de 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:
- Realice la autenticación en el servicio de Azure correspondiente a través de una cadena de conexión que se pase a la llamada de método
Connect
. La cadena de conexión se recupera de la variableconnectionString
. Los orígenes de configuración registrados están se ponen a disposición a través debuilder.Configuration
. - Habilite la compatibilidad con las marcas de características a través de una llamada a
UseFeatureFlags
.
- Realice la autenticación en el servicio de Azure correspondiente a través de una cadena de conexión que se pase a la llamada de método
- El proveedor de Azure App Configuration sustituye a todos los demás proveedores de configuración registrados porque se registran después de los demás.
Sugerencia
En un proyecto de ASP.NET Core, puede acceder a la lista de proveedores registrados si analiza la propiedad configBuilder.Sources
dentro de ConfigureAppConfiguration
.