Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Mueva la información de configuración fuera del paquete de implementación de la aplicación a una ubicación centralizada. Este enfoque proporciona una administración y control más fáciles de los datos de configuración y para compartir datos de configuración entre aplicaciones e instancias de aplicación.
Contexto y problema
La mayoría de los entornos de tiempo de ejecución de la aplicación incluyen información de configuración en archivos que se implementan con la aplicación. En algunos casos, puede editar estos archivos para cambiar el comportamiento de la aplicación después de implementar la aplicación. Sin embargo, los cambios de configuración requieren que vuelva a implementar la aplicación. La reimplementación suele dar lugar a un tiempo de inactividad inaceptable y a otra sobrecarga administrativa.
Los archivos de configuración local también limitan la configuración a una sola aplicación. En algunos escenarios, es posible que quiera compartir opciones de configuración en varias aplicaciones. Algunos ejemplos son las cadenas de conexión de base de datos, la información del tema de la interfaz de usuario y las direcciones URL de las colas y el almacenamiento que usa un conjunto relacionado de aplicaciones.
La administración de cambios en las configuraciones locales en varias instancias en ejecución de la aplicación es difícil. Este desafío puede dar lugar a instancias que usan diferentes opciones de configuración mientras se implementa la actualización.
Las actualizaciones de las aplicaciones y los componentes también pueden requerir cambios en los esquemas de configuración. Muchos sistemas de configuración no admiten versiones diferentes de información de configuración.
Solución
Almacene la información de configuración en el almacenamiento externo y proporcione una interfaz que puede usar para leer y actualizar de forma rápida y eficaz las opciones de configuración. El tipo de almacén externo depende del entorno de hospedaje y tiempo de ejecución de la aplicación. En un escenario hospedado en la nube, el almacenamiento externo suele ser un servicio de almacenamiento basado en la nube o un servicio de configuración dedicado. También puede ser una base de datos hospedada u otro sistema personalizado.
El almacén de respaldo que elija para obtener información de configuración debe tener una interfaz que proporcione acceso coherente y fácil de usar. Debe exponer la información en un formato estructurado y escrito correctamente. La implementación también podría necesitar autorizar el acceso de los usuarios para proteger los datos de configuración. Es posible que tenga que ser lo suficientemente flexible como para almacenar varias versiones de la configuración, como desarrollo, ensayo y producción, incluidas varias versiones de versión de cada configuración.
Muchos sistemas de configuración integrados leen los datos cuando se inicia la aplicación y, a continuación, almacenan en caché los datos en memoria para proporcionar acceso rápido y minimizar el impacto en el rendimiento de la aplicación. Según el tipo de almacén de respaldo que use y la latencia de este almacén, es posible que desee implementar un mecanismo de almacenamiento en caché dentro del almacén de configuración externo. Para obtener más información, consulte Guía de almacenamiento en caché. En el diagrama siguiente se muestra información general sobre el patrón almacén de configuración externo con una caché local opcional.
Problemas y consideraciones
Tenga en cuenta los siguientes puntos a medida que decida cómo implementar este patrón:
Elija un almacén de respaldo que proporcione un rendimiento aceptable, alta disponibilidad y solidez. Asegúrese de que puede realizar una copia de seguridad en el proceso de administración y mantenimiento de la aplicación. En una aplicación hospedada en la nube, use un mecanismo de almacenamiento en la nube o un servicio de plataforma de configuración dedicado para cumplir estos requisitos.
Diseñe el esquema del almacén de respaldo para permitir la flexibilidad en los tipos de información que puede contener. Asegúrese de que proporciona funcionalidades para todos los requisitos de configuración, como datos tipados, colecciones de configuraciones, varias versiones de configuración y cualquier otra característica que requieran las aplicaciones. El esquema debe ser fácil de ampliar para admitir más configuraciones cuando cambien los requisitos.
Tenga en cuenta las funcionalidades físicas del almacén de respaldo, cómo se relacionan con la forma en que almacena información de configuración y los efectos en el rendimiento. Por ejemplo, el almacenamiento de un documento XML que contiene información de configuración requiere la interfaz de configuración o la aplicación para analizar el documento para leer la configuración individual. El análisis complica la forma de actualizar la configuración, pero el almacenamiento en caché de la configuración puede ayudar a compensar el rendimiento de lectura más lento.
Tenga en cuenta cómo la interfaz de configuración permite controlar el ámbito y la herencia de las opciones de configuración. Por ejemplo, puede que tenga que definir el ámbito de las opciones de configuración en los niveles de organización, aplicación y máquina. Es posible que la interfaz de configuración tenga que delegar el control sobre el acceso a distintos ámbitos y evitar o permitir que las aplicaciones individuales invaliden la configuración.
Asegúrese de que la interfaz de configuración pueda exponer los datos de configuración en los formatos necesarios, como valores tipados, colecciones, pares clave-valor y bolsas de propiedades.
Tenga en cuenta cómo se comporta la interfaz del almacén de configuración cuando la configuración contiene errores o no existe en el almacén de respaldo. Es posible que tenga que restaurar la configuración predeterminada y registrar errores. Tenga en cuenta también la distinción entre mayúsculas y minúsculas de las claves o nombres de configuración, cómo almacenar y controlar datos binarios y cómo controlar valores NULL o vacíos.
Considere cómo proteger los datos de configuración y conceder acceso solo a los usuarios y aplicaciones adecuados. La interfaz del almacén de configuración suele proporcionar esta característica, pero también debe asegurarse de que los usuarios y las aplicaciones no puedan acceder directamente a los datos del almacén de respaldo sin los permisos adecuados. Asegúrese de una separación estricta entre los permisos necesarios para leer y escribir datos de configuración. Tenga en cuenta también si necesita cifrar algunas o todas las opciones de configuración y cómo implementar este cifrado en la interfaz del almacén de configuración.
También debe activar el registro de auditoría para registrar quién lee o modifica los valores de configuración y cuándo se producen estas acciones. Aplique los mismos requisitos de auditoría a las copias de reserva locales de los datos de configuración.
Separe los valores de configuración no sensibles de los secretos. Mantenga la configuración rutinaria, como las banderas de características y los puntos de conexión, en los ajustes de configuración. Almacene secretos, como cadenas de conexión, claves de API, certificados y contraseñas, en un sistema de administración de secretos dedicado que proporcione cifrado y acceso controlado.
Las configuraciones almacenadas de forma centralizada, que cambian el comportamiento de la aplicación durante el tiempo de ejecución, son cruciales. Implemente, actualice y administre estos mediante los mismos mecanismos que se usan para implementar código de aplicación. Por ejemplo, debe realizar cambios que puedan afectar a más de una aplicación mediante un enfoque de implementación totalmente probado y preconfigurado para asegurarse de que el cambio se adapte a todas las aplicaciones que usan esta configuración. Si un administrador edita una configuración para actualizar una aplicación, podría afectar negativamente a otras aplicaciones que usan la misma configuración. Productos como Azure App Configuration ayudan a mitigar este riesgo a través de funcionalidades integradas, como el historial de revisiones, la recuperación a un momento dado (PITR), las instantáneas inmutables y los patrones de lanzamiento progresivos.
Si una aplicación almacena en caché la información de configuración, debe alertar a la aplicación cuando cambie la configuración. Puede implementar una directiva de expiración para los datos de configuración almacenados en caché para que esta información se actualice automáticamente periódicamente. La aplicación ve los cambios e los implementa.
Los datos de configuración almacenados en caché pueden ayudar a solucionar problemas de conectividad transitorios que experimenta el almacén de configuración externo en tiempo de ejecución de la aplicación, pero este enfoque normalmente no resuelve el problema si el almacén externo está inactivo cuando se inicia la aplicación. Asegúrese de que la canalización de implementación de aplicaciones puede proporcionar el último conjunto conocido de valores de configuración en un archivo de configuración que se usará cuando la aplicación no pueda recuperar valores activos en el inicio.
Cuándo usar este patrón
Use este patrón en los siguientes supuestos:
Debe compartir opciones de configuración en varias aplicaciones o instancias o aplicar una configuración estándar en ellas.
El sistema de configuración estándar no admite todos los tipos de configuración necesarios, como imágenes o estructuras de datos complejas.
Necesita un almacén complementario para algunas opciones de configuración, al tiempo que permite que las aplicaciones invaliden algunos o todos los valores almacenados centralmente.
Debe simplificar la administración en varias aplicaciones y, opcionalmente, supervisar el uso de la configuración mediante la grabación del acceso al almacén de configuración.
Este patrón podría no ser adecuado cuando:
- La configuración es sencilla, local a una aplicación y solo cambia durante los ciclos de versión normales. En este caso, un almacén de configuración externo puede agregar complejidad operativa innecesaria.
Diseño de cargas de trabajo
Evalúe cómo usar el patrón de almacén de configuración externo en un diseño de carga de trabajo para abordar los objetivos y principios descritos en los pilares de Azure Well-Architected Framework. En la tabla siguiente se proporciona una guía sobre cómo este patrón apoya los objetivos de cada pilar.
| Fundamento | Cómo apoya este patrón los objetivos de los pilares |
|---|---|
| La excelencia operativa ayuda a ofrecer calidad de carga de trabajo a través de procesos estandarizados y cohesión de equipos. | Esta separación de la configuración de la aplicación del código de aplicación admite la configuración específica del entorno y aplica el control de versiones a los valores de configuración. Los almacenes de configuración externos también son un lugar común para gestionar las banderas de características para implementar prácticas de implementación seguras. - OE:10 Diseño de automatización - OE:11 Procedimientos de implementación seguros |
Si este patrón introduce concesiones dentro de un pilar, considérelas en relación con los objetivos de los otros pilares.
Example
En los ejemplos siguientes se muestra cómo implementar el patrón almacén de configuración externo en Azure. En el primer ejemplo se usan App Configuration y bibliotecas cliente. En el segundo ejemplo se usa un almacén de respaldo personalizado para escenarios que requieren una implementación especializada.
App Configuration
La mayoría de las aplicaciones pueden usar App Configuration en lugar de un almacén de configuración personalizado. App Configuration admite pares clave-valor a los que puede aplicar espacios de nombres. App Configuration también admite instantáneas inmutables de configuración para poder inspeccionar, revertir o implementar progresivamente los cambios de configuración sin riesgo para las instancias en ejecución.
Utilice referencias de instantáneas para permitir que las aplicaciones cambien entre instantáneas en tiempo de ejecución sin cambios de código ni nuevo despliegue. Puede exportar valores de configuración para que una copia se envíe con la aplicación como copia de seguridad para usarla si el servicio no es accesible cuando se inicia la aplicación.
En App Configuration, las claves y los valores son cadenas Unicode y cada par clave-valor tiene metadatos opcionales, como variantes basadas en etiquetas y tipo de contenido. Use el tipo de contenido para describir cómo debe interpretar la aplicación un valor, como en JSON o en un tipo integrado de App Configuration. App Configuration también mantiene un historial de revisiones con PITR, que le ayuda a revisar y recuperar pares clave-valor anteriores.
Para lograr resistencia, aprovisione el almacén en una región que admita zonas de disponibilidad y active la replicación geográfica para que pueda configurar las aplicaciones para leer desde la réplica más cercana y cambiar entre los puntos de conexión de réplica durante las interrupciones regionales. Utilice referencias de Azure Key Vault para mantener los secretos en Key Vault y hacer referencia a ellos desde App Configuration, en lugar de almacenar credenciales directamente en el almacén de configuración. Use managed identity and Azure role-based access control (Azure RBAC) en lugar de cadenas de conexión para autenticar aplicaciones en App Configuration.
Para las cargas de trabajo que se ejecutan en Azure Kubernetes Service (AKS), el Proveedor de Configuración de Aplicaciones para Kubernetes puede generar ConfigMaps y Secrets directamente desde tu almacén de configuración sin requerir cambios de código en tus contenedores de carga de trabajo. También puede usar App Configuration para administrar las marcas de características, incluida la implementación dirigida y la experimentación basada en variantes, en las prácticas de implementación seguras.
Para el aislamiento de red, use private endpoints for App Configuration para que el tráfico de cliente permanezca en direcciones IP privadas a través de Azure Private Link. Después de configurar el acceso privado, puede desactivar el acceso público para reducir la exposición del punto de conexión público. En las implementaciones con replicación geográfica, un único punto de conexión privado puede llegar a todas las réplicas, pero para lograr una mayor resistencia regional, puede aprovisionar puntos de conexión privados para cada región de réplica y configurar el sistema de nombres de dominio (DNS) en consecuencia.
Un diagrama que muestra un ejemplo de implementación del patrón de Almacén de Configuración Externo con App Configuration como nodo central que se conecta a varios servicios de Azure y sistemas de almacenamiento.
En la parte superior del diagrama, una flecha apunta desde una función de Azure a App Configuration. En el lado izquierdo del diagrama, una flecha conecta el entorno de Azure Container Apps y AKS y apunta a App Configuration. En el lado derecho del diagrama, una flecha conecta una máquina virtual (VM) Azure y Azure App Service a App Configuration. Una flecha apunta de App Configuration a Key Vault en la parte inferior del diagrama. La arquitectura muestra cómo App Configuration actúa como un servicio de administración de configuración centralizado al que varios servicios de proceso Azure pueden acceder para recuperar la configuración de la aplicación, al tiempo que mantiene secretos confidenciales en Key Vault y los hace referencia a través de App Configuration.
Bibliotecas de cliente
Las bibliotecas cliente proporcionan muchas de las características anteriores. Las bibliotecas cliente se integran con el entorno de ejecución de la aplicación para ayudar a capturar y almacenar en caché valores, actualizar valores cuando cambian y controlar interrupciones transitorias en App Configuration.
| Tiempo de ejecución | Biblioteca de cliente | Notas | Inicio rápido |
|---|---|---|---|
| .NET | Microsoft.Extensions.Configuration.AzureAppConfiguration | Proveedor para Microsoft.Extensions.Configuration |
Inicio rápido de .NET |
| ASP.NET Core | Microsoft.Azure.AppConfiguration.AspNetCore | Agrega middleware de actualización controlada por solicitudes para ASP.NET Core | Quickstart para ASP.NET Core |
| Azure Functions en .NET | Microsoft.Azure.AppConfiguration.Functions.Worker | Proveedor para el modelo de trabajador aislado que usa Program.cs |
Guía de inicio rápido para Azure Functions |
| .NET Framework | Microsoft.Configuration.ConfigurationBuilders.AzureAppConfiguration | Generador de configuración para System.Configuration |
Guía rápida para .NET Framework |
| Java Spring | com.azure.spring azure-spring-cloud-appconfiguration-config > | Admite el acceso a Spring Framework a través de ConfigurationProperties |
Guía rápida para Java Spring |
| Python | azure-proveedor-de-configuración-de-aplicaciones | Biblioteca proveedora que proporciona actualización dinámica y referencias de Key Vault | Inicio rápido de Python |
| JavaScript y Node.js | @azure/app-configuration-provider | Biblioteca de proveedores que ofrece soporte para actualización dinámica y soporte de referencia para Key Vault. | Inicio rápido de JavaScript |
También están disponibles las siguientes App Configuration sync GitHub Action y tareas de Azure Pipelines integradas:
Ejemplo de almacén de respaldo personalizado
En una aplicación que Azure aloja, puede utilizar Azure Storage para almacenar externamente información de configuración. Este enfoque proporciona resistencia y alto rendimiento. De forma predeterminada, Storage replica los datos tres veces dentro de un único centro de datos. Para lograr redundancia geográfica entre regiones, puede configurar la replicación geográfica con capacidades de conmutación por error manual. Azure Table Storage proporciona un almacén de clave-valor que puede usar un esquema flexible para los valores. Azure Blob Storage proporciona un almacén jerárquico basado en contenedores que puede contener cualquier tipo de datos en blobs con nombre individual.
Al implementar este patrón, debe abstraer Blob Storage y exponer sus configuraciones dentro de sus aplicaciones. También debe comprobar si hay actualizaciones en tiempo de ejecución y decidir cómo responder a esas actualizaciones.
En el ejemplo siguiente se muestra cómo puede usar un almacén de configuración sencillo y Blob Storage para almacenar y exponer información de configuración. Una clase BlobSettingsStore abstrae Blob Storage para almacenar información de configuración. Implementa una interfaz sencilla ISettingsStore .
public interface ISettingsStore
{
Task<ETag> GetVersionAsync();
Task<Dictionary<string, string>> FindAllAsync();
}
Esta interfaz define métodos para recuperar las opciones de configuración que contiene el almacén de configuración e incluye un número de versión que puede usar para detectar modificaciones recientes de la configuración. Una BlobSettingsStore clase puede usar la propiedad del ETag blob para implementar el versionado. La ETag propiedad se actualiza automáticamente cada vez que se escribe un blob.
Nota:
Por diseño, esta ilustración sencilla expone todas las opciones de configuración como valores de cadena en lugar de valores con tipo.
Una ExternalConfigurationManager clase proporciona un contenedor alrededor de una BlobSettingsStore instancia. Una aplicación puede usar esta clase para recuperar información de configuración. Esta clase puede usar un mecanismo de notificación de cambios, como Microsoft Extensiones reactivas, para publicar actualizaciones de configuración mientras se ejecuta el sistema. También implementa el patrón Cache-Aside para las configuraciones, proporcionando una mejor resiliencia y rendimiento.
En el ejemplo siguiente se muestra cómo implementar una ExternalConfigurationManager clase.
static void Main(string[] args)
{
// Start monitoring configuration changes.
ExternalConfiguration.Instance.StartMonitor();
// Get a setting.
var setting = ExternalConfiguration.Instance.GetAppSetting("someSettingKey");
…
}
Pasos siguientes
- ejemplos de configuración de App
- Integración de App Configuration con implementaciones de Kubernetes mediante Helm
- Administración de banderas de funciones en App Configuration
- Guía de almacenamiento en caché
- Procedimientos recomendados de App Configuration