Llegeix en anglès

Comparteix a través de


Proveedor de configuración de JavaScript

configuration-provider-npm-package

Azure App Configuration es un servicio administrado que ayuda a los desarrolladores a centralizar la configuración de sus aplicaciones de forma sencilla y segura. La biblioteca del proveedor de configuración de JavaScript permite cargar la configuración desde un almacén de Azure App Configuration de forma administrada. Esta biblioteca cliente agrega funcionalidad adicional sobre el SDK de Azure para JavaScript.

Carga de la configuración

El método load exportado en el paquete @azure/app-configuration-provider se usa para cargar la configuración desde Azure App Configuration. El método load permite usar Microsoft Entra ID o una cadena de conexión para conectarse al almacén de App Configuration.

Use DefaultAzureCredential para autenticarse en el almacén de App Configuration. Siga las instrucciones para asignar la credencial al rol Lector de datos de App Configuration.

JavaScript
const { load } = require("@azure/app-configuration-provider");
const { DefaultAzureCredential } = require("@azure/identity");
const endpoint = process.env.AZURE_APPCONFIG_ENDPOINT;
const credential = new DefaultAzureCredential(); // For more information, see https://learn.microsoft.com/azure/developer/javascript/sdk/credential-chains#use-defaultazurecredential-for-flexibility

async function run() {
    // Connect to Azure App Configuration using a token credential and load all key-values with no label.
    const settings = await load(endpoint, credential);
    console.log('settings.get("message"):', settings.get("message"));
}

run();

El método load devuelve una instancia del tipo AzureAppConfiguration que se define de la siguiente manera:

TypeScript
type AzureAppConfiguration = {
    refresh(): Promise<void>;
    onRefresh(listener: () => any, thisArg?: any): Disposable;
} & IGettable & ReadonlyMap<string, any> & IConfigurationObject;

Para más información sobre los métodos refresh y onRefresh, vea la sección Actualización de la configuración.

Consumo de la configuración

El tipo AzureAppConfiguration extiende las interfaces siguientes:

  • IGettable

    TypeScript
    interface IGettable {
        get<T>(key: string): T | undefined;
    }
    

    La interfaz IGettable proporciona el método get para recuperar el valor de un par clave-valor de la estructura de datos con estilo Map.

    TypeScript
    const settings = await load(endpoint, credential);
    const fontSize = settings.get("app:font:size"); // value of the key "app:font:size" from the App Configuration store
    
  • ReadonlyMap

    El tipo AzureAppConfiguration también amplía la interfaz ReadonlyMap, lo que proporciona acceso de solo lectura a pares clave-valor.

  • IConfigurationObject

    TypeScript
    interface IConfigurationObject {
        constructConfigurationObject(options?: ConfigurationObjectConstructionOptions): Record<string, any>;
    }
    

    La interfaz IConfigurationObject proporciona el método constructConfigurationObject para crear un objeto de configuración basado en una estructura de datos de estilo Map y claves jerárquicas. El parámetro opcional ConfigurationObjectConstructionOptions se puede usar para especificar el separador para convertir claves jerárquicas en propiedades de objeto. De manera predeterminada, el separador es ".".

    TypeScript
    interface ConfigurationObjectConstructionOptions {
        separator?: "." | "," | ";" | "-" | "_" | "__" | "/" | ":"; // supported separators
    }
    

    En JavaScript, los objetos o asignaciones se suelen usar como estructuras de datos principales para representar configuraciones. La biblioteca de proveedores de configuración de JavaScript admite los dos enfoques de configuración, lo que proporciona a los desarrolladores la flexibilidad de elegir la opción que mejor se adapte a sus necesidades.

    TypeScript
    const settings = await load(endpoint, credential);
    const settingsObj = settings.constructConfigurationObject({separator: ":"});
    const fontSize1 = settings.get("app:font:size"); // map-style configuration representation
    const fontSize2 = settingsObj.app.font.size; // object-style configuration representation
    

Carga de pares clave-valor específicos mediante selectores

De manera predeterminada, el método load cargará todas las configuraciones sin etiqueta desde el almacén de configuración. Puede configurar el comportamiento del método load mediante el parámetro opcional de tipo AzureAppConfigurationOptions.

Para refinar o expandir las configuraciones cargadas desde el almacén de App Configuration, puede especificar los selectores de clave o etiqueta en la propiedad AzureAppConfigurationOptions.selectors.

TypeScript
const settings = await load(endpoint, credential, {
    selectors: [
        { // load the subset of keys starting with "app1." prefix and "test" label
            keyFilter: "app1.*",
            labelFilter: "test"
        },
        { // load the subset of keys starting with "dev" label"
            labelFilter: "dev*"
        }
    ]
});

Nota

Los pares de clave-valor se cargan en el orden en que aparecen los selectores. Si varios selectores recuperan los pares de clave-valor con la misma clave, el valor del último invalidará cualquier valor cargado antes.

Recorte del prefijo de las claves

Puede recortar el prefijo de las claves si proporciona una lista de prefijos de clave recortados a la propiedad AzureAppConfigurationOptions.trimKeyPrefixes.

TypeScript
const settings = await load(endpoint, credential, {
    selectors: [{
        keyFilter: "app.*"
    }],
    trimKeyPrefixes: ["app."]
});

Referencia de Key Vault

Azure App Configuration admite la referencia a secretos almacenados en Azure Key Vault. En App Configuration, puede crear claves que se asignen a secretos almacenados en Key Vault. Los secretos se almacenan de forma segura en Key Vault, pero se puede acceder a ellos como cualquier otra configuración una vez que se carguen.

La biblioteca de proveedores de configuración recupera las referencias de Key Vault, como hace para cualquier otra clave almacenada en App Configuration. Como el cliente reconoce las claves como referencias de Key Vault, tienen un tipo de contenido único y el cliente se conectará a Key Vault a fin de recuperar sus valores para la aplicación. Debe configurar la propiedad AzureAppConfigurationOptions.KeyVaultOptions con la credencial adecuada para permitir que el proveedor de configuración se conecte a Azure Key Vault.

TypeScript
const credential = new DefaultAzureCredential();
const settings = await load(endpoint, credential, {
    keyVaultOptions: {
        credential: credential
    }
});

También puede proporcionar la instancia de SecretClient directamente a KeyVaultOptions. De este modo, puede personalizar las opciones al crear SecretClient.

TypeScript
const { SecretClient } = require("@azure/keyvault-secrets");

const credential = new DefaultAzureCredential();
const secretClient = new SecretClient(keyVaultUrl, credential, {
    serviceVersion: "7.0",
});
const settings = await load(endpoint, credential, {
    keyVaultOptions: {
        secretClients: [ secretClient ]
    }
});

También puede establecer la propiedad secretResolver para resolver localmente los secretos que no tienen un almacén de claves asociado.

TypeScript
const resolveSecret = (url) => "From Secret Resolver";
const settings = await load(endpoint, credential, {
    keyVaultOptions: {
        secretResolver: resolveSecret
    }
});

Actualización de configuración

La actualización dinámica de las configuraciones le permite extraer sus valores más recientes del almacén de App Configuration sin tener que reiniciar la aplicación. Puede establecer AzureAppConfigurationOptions.refreshOptions para habilitar las opciones de actualización y configurar la actualización. La configuración cargada se actualizará cuando se detecte un cambio de los pares de clave-valor seleccionados en el servidor. De forma predeterminada, se usa un intervalo de actualización de 30 segundos, pero puede invalidarlo con la propiedad refreshIntervalInMs.

TypeScript
const settings = await load(endpoint, credential, {
    refreshOptions: {
        enabled: true,
        refreshIntervalInMs: 15_000
    }
});

La configuración de refreshOptions por sí sola no actualizará automáticamente la configuración. Debe llamar al método refresh en la instancia de AzureAppConfiguration devuelta por el método load para desencadenar una actualización.

TypeScript
// this call is not blocking, the configuration will be updated asynchronously
settings.refresh();

Este diseño evita solicitudes innecesarias a App Configuration cuando la aplicación está inactiva. Debe incluir la llamada refresh en la que se produce la actividad de la aplicación. Esto se conoce como actualización de configuración controlada por actividad. Por ejemplo, puede llamar a refresh al procesar una solicitud entrante o dentro de una iteración en la que se realiza una tarea compleja.

TypeScript
const server = express();
// Use an express middleware to refresh configuration whenever a request comes in
server.use((req, res, next) => {
    settings.refresh();
    next();
})

Incluso si se produce un error en la llamada de la actualización por cualquier motivo, la aplicación seguirá usando la configuración almacenada en caché. Se realizará otro intento cuando se haya superado el intervalo de actualización configurado y la actividad de la aplicación desencadene la llamada a la actualización. Llamar a refresh es una operación no operativa antes de que transcurre el intervalo de actualización configurado, por lo que su impacto en el rendimiento es mínimo incluso si se llama con frecuencia.

Devolución de llamada de actualización personalizada

El método onRefresh permite realizar funciones de devolución de llamada personalizadas que se invocarán cada vez que la configuración local se actualice correctamente con los cambios del almacén de Azure App Configuration. Devuelve un objeto Disposable, que se puede usar para quitar la devolución de llamada registrada

TypeScript
const settings = await load(endpoint, credential, {
    refreshOptions: {
        enabled: true
    }
});
const disposer = settings.onRefresh(() => {
    console.log("Config refreshed.");
});

settings.refresh();
// Once the refresh is successful, the callback function you registered will be executed.
// In this example, the message "Config refreshed" will be printed.

disposer.dispose();

Actualización en la clave de Sentinel (heredada)

Una clave de Sentinel es una clave que se actualiza después de completar el cambio de todas las demás claves. El proveedor de configuración supervisará la clave de Sentinel en lugar de todos los pares de clave-valor seleccionados. Cuando se detecta un cambio, la aplicación actualiza todos los valores de configuración.

TypeScript
const settings = await load(endpoint, credential, {
    refreshOptions: {
        enabled: true,
        watchedSettings: [
            { key: "sentinel" }
        ]
    }
});

Para más información sobre la configuración de actualización, vaya a Uso de la configuración dinámica en JavaScript.

Marca de características

Puede crear marcas de características en Azure App Configuration. De manera predeterminada, el proveedor de configuración no cargará las marcas de características. Puede habilitar la carga y actualización de marcas de características mediante la propiedad AzureAppConfigurationOptions.featureFlagOptions al llamar al método load.

TypeScript
const settings = await load(endpoint, credential, {
    featureFlagOptions: {
        enabled: true,
        selectors: [ { keyFilter: "*", labelFilter: "Prod" } ],
        refresh: {
            enabled: true, // the refresh for feature flags need to be enbaled in addition to key-values
            refreshIntervalInMs: 10_000
        }
    }
});

Nota

Si se habilita featureFlagOptions y no se especifica ningún selector, el proveedor de configuración cargará todas las marcas de características sin etiqueta desde el almacén de App Configuration.

Administración de características

La biblioteca de administración de características proporciona una manera de desarrollar y exponer la funcionalidad de la aplicación en función de las marcas de características. La biblioteca de administración de características está diseñada para funcionar junto con la biblioteca de proveedores de configuración. El proveedor de configuración cargará todas las marcas de características seleccionadas en la configuración de la lista feature_flags de la sección feature_management. La biblioteca de administración de características consumirá y administrará las marcas de características cargadas para la aplicación.

Para más información sobre cómo usar la biblioteca de administración de características de JavaScript, vaya al inicio rápido de características.

Replicación geográfica

Para obtener información sobre el uso de la replicación geográfica, vaya a Habilitación de la replicación geográfica.

Pasos siguientes

Para obtener información sobre cómo usar el proveedor de configuración de JavaScript, continúe con el siguiente tutorial.