Procedure consigliate per la configurazione di app Azure

Questo articolo illustra i modelli e le procedure consigliate comuni quando si usa app Azure Configurazione.

Raggruppamenti chiave

Configurazione app offre due opzioni per organizzare le chiavi:

  • Prefissi chiave
  • Etichette

È possibile usare una o entrambe le opzioni per raggruppare le chiavi.

I prefissi chiave sono le parti iniziali delle chiavi. È possibile raggruppare logicamente un set di chiavi usando lo stesso prefisso nei nomi. I prefissi possono contenere più componenti connessi da un delimitatore, ad esempio /, simile a un percorso URL, per formare uno spazio dei nomi. Tali gerarchie sono utili quando si archiviano chiavi per molte applicazioni e microservizi in un archivio Configurazione app.

Un aspetto importante da tenere presente è che le chiavi sono i riferimenti al codice dell'applicazione per recuperare i valori delle impostazioni corrispondenti. Le chiavi non devono essere modificate oppure è necessario modificare il codice ogni volta che si verifica.

Le etichette sono un attributo sulle chiavi. Vengono usati per creare varianti di una chiave. Ad esempio, è possibile assegnare etichette a più versioni di una chiave. Una versione potrebbe essere un'iterazione, un ambiente o altre informazioni contestuali. L'applicazione può richiedere un set di valori chiave completamente diverso specificando un'altra etichetta. Di conseguenza, tutti i riferimenti chiave rimangono invariati nel codice.

Composizioni chiave-valore

Configurazione app considera tutte le chiavi archiviate come entità indipendenti. Configurazione app non tenta di dedurre alcuna relazione tra chiavi o di ereditare i valori delle chiavi in base alla gerarchia. È tuttavia possibile aggregare più set di chiavi usando etichette abbinate allo stack di configurazione appropriato nel codice dell'applicazione.

Di seguito è descritto un esempio. Si supponga di avere un'impostazione denominata Asset1, il cui valore può variare in base all'ambiente di sviluppo. Si crea una chiave denominata "Asset1" con un'etichetta vuota e un'etichetta denominata "Sviluppo". Nella prima etichetta si inserisce il valore predefinito per Asset1 e si inserisce un valore specifico per "Development" in quest'ultimo.

Nel codice si recuperano prima i valori di chiave senza etichette e quindi si recupera lo stesso set di valori chiave una seconda volta con l'etichetta "Sviluppo". Quando si recuperano i valori la seconda volta, i valori precedenti delle chiavi vengono sovrascritti. Il sistema di configurazione di .NET Core consente di "impilare" più set di dati di configurazione tra loro. Se esiste una chiave in più set, viene usato l'ultimo set che lo contiene. Con un framework di programmazione moderno, ad esempio .NET Core, si ottiene gratuitamente questa funzionalità di stacking se si usa un provider di configurazione nativo per accedere a Configurazione app. Il frammento di codice seguente illustra come implementare lo stacking in un'applicazione .NET Core:

// Augment the ConfigurationBuilder with Azure App Configuration
// Pull the connection string from an environment variable
configBuilder.AddAzureAppConfiguration(options => {
    options.Connect(configuration["connection_string"])
           .Select(KeyFilter.Any, LabelFilter.Null)
           .Select(KeyFilter.Any, "Development");
});

Un esempio completo è disponibile in Usare etichette per fornire configurazioni diverse per ambienti diversi.

Riferimenti a dati esterni

Configurazione app è progettato per archiviare tutti i dati di configurazione che normalmente si salvano nei file di configurazione o nelle variabili di ambiente. Tuttavia, alcuni tipi di dati possono essere più adatti per risiedere in altre origini. Ad esempio, archiviare i segreti in Key Vault, i file in Archiviazione di Azure, le informazioni di appartenenza nei gruppi di Microsoft Entra o gli elenchi di clienti in un database.

È comunque possibile sfruttare Configurazione app salvando un riferimento a dati esterni in un valore chiave. È possibile usare il tipo di contenuto per distinguere ogni origine dati. Quando l'applicazione legge un riferimento, carica i dati effettivi dall'origine a cui si fa riferimento, presupponendo che disponga dell'autorizzazione necessaria per l'origine. Se si modifica il percorso dei dati esterni, è sufficiente aggiornare il riferimento in Configurazione app anziché aggiornare e ridistribuire l'intera applicazione.

La funzionalità di riferimento Configurazione app Key Vault è un esempio in questo caso. Consente di aggiornare i segreti necessari per un'applicazione in base alle esigenze, mentre i segreti sottostanti rimangono in Key Vault.

Configurazione app bootstrap

Per accedere a un archivio Configurazione app, è possibile usare il relativo stringa di connessione, disponibile nella portale di Azure. Poiché le stringa di connessione contengono informazioni sulle credenziali, vengono considerate segreti. Questi segreti devono essere archiviati in Azure Key Vault e il codice deve eseguire l'autenticazione in Key Vault per recuperarli.

Un'opzione migliore consiste nell'usare la funzionalità identità gestite in Microsoft Entra ID. Con le identità gestite, è necessario solo l'URL dell'endpoint Configurazione app per avviare l'accesso all'archivio Configurazione app. È possibile incorporare l'URL nel codice dell'applicazione, ad esempio nel file appsettings.json . Per informazioni dettagliate, vedere Usare le identità gestite per accedere alle Configurazione app.

servizio Azure Kubernetes l'accesso a Configurazione app

Per i carichi di lavoro ospitati in servizio Azure Kubernetes (AKS) sono disponibili le opzioni seguenti per accedere alla configurazione di app Azure. Queste opzioni si applicano anche a Kubernetes in generale.

  • Aggiungere app Azure provider Kubernetes di configurazione al cluster del servizio Azure Kubernetes. Il provider Kubernetes viene eseguito come pod nel cluster. Può costruire config Mappe e segreti dai riferimenti chiave-valore e Key Vault nell'archivio Configurazione app. ConfigMap e Secret sono utilizzabili come variabili di ambiente o file montati senza richiedere alcuna modifica al codice dell'applicazione. Se si dispone di più applicazioni in esecuzione nello stesso cluster del servizio Azure Kubernetes, possono accedere tutti alla configurazione generata Mappe e ai segreti, eliminando la necessità di singole richieste di Configurazione app. Il provider Kubernetes supporta anche gli aggiornamenti della configurazione dinamica. Questa è l'opzione consigliata, se possibile.

  • Aggiornare l'applicazione in modo da usare app Azure librerie del provider di configurazione. Le librerie provider sono disponibili in molti framework e linguaggi, ad esempio ASP.NET, .NET, Java Spring, JavaScript/Node.js e Python. Questo approccio consente di accedere completamente alle funzionalità di Configurazione app, tra cui la configurazione dinamica e la gestione delle funzionalità. È possibile controllare in modo granulare i dati da caricare e da quali Configurazione app archiviare per ogni applicazione.

  • Eseguire l'integrazione con la distribuzione di Kubernetes usando Helm. Se non si vuole aggiornare l'applicazione o aggiungere un nuovo pod al cluster del servizio Azure Kubernetes, è possibile trasferire dati da Configurazione app al cluster Kubernetes usando Helm tramite la distribuzione. Questo approccio consente all'applicazione di continuare ad accedere alla configurazione dalle variabili e dai segreti di Kubernetes. È possibile eseguire l'aggiornamento Helm ogni volta che si vuole che l'applicazione includa nuove modifiche alla configurazione.

servizio app o Funzioni di Azure l'accesso a Configurazione app

Usare il provider Configurazione app o le librerie SDK per accedere Configurazione app direttamente nell'applicazione. Questo approccio consente di accedere completamente alle funzionalità di Configurazione app, tra cui la configurazione dinamica e la gestione delle funzionalità. L'applicazione in esecuzione in servizio app o Funzioni di Azure può ottenere l'accesso all'archivio Configurazione app tramite uno dei metodi seguenti:

È anche possibile rendere i dati Configurazione app accessibili all'applicazione come impostazioni dell'applicazione o variabili di ambiente. Con questo approccio, è possibile evitare di modificare il codice dell'applicazione.

Ridurre le richieste effettuate a Configurazione app

Richieste eccessive a Configurazione app possono comportare addebiti per la limitazione o l'eccedenza. Per ridurre il numero di richieste effettuate:

  • Aumentare il timeout dell'aggiornamento, soprattutto se i valori di configurazione non cambiano di frequente. Specificare un nuovo timeout di aggiornamento usando il SetCacheExpiration metodo .

  • Osservare una singola chiave sentinel, invece di controllare le singole chiavi. Aggiornare tutte le configurazioni solo se cambia la chiave sentinel. Per un esempio, vedere Usare la configurazione dinamica in un'app ASP.NET Core.

  • Usare Griglia di eventi di Azure per ricevere notifiche quando la configurazione cambia, anziché eseguire costantemente il polling di eventuali modifiche. Per altre informazioni, vedere Usare Griglia di eventi per Configurazione app notifiche di modifica dei dati.

  • Abilitare la replica geografica dell'archivio Configurazione app e distribuire le richieste tra più repliche. Ad esempio, usare una replica diversa da ogni area geografica per un'applicazione distribuita a livello globale. Ogni replica Configurazione app ha una quota di richiesta separata. Questa configurazione offre un modello per la scalabilità e la resilienza avanzata rispetto alle interruzioni temporanee e a livello di area.

Importazione di dati di configurazione in Configurazione app

Configurazione app offre la possibilità di importare in blocco le impostazioni di configurazione dai file di configurazione correnti usando il portale di Azure o l'interfaccia della riga di comando. È anche possibile usare le stesse opzioni per esportare i valori chiave da Configurazione app, ad esempio tra archivi correlati. Se si vuole configurare una sincronizzazione continua con il repository in GitHub o Azure DevOps, è possibile usare GitHub Action o l'attività push di Azure Pipeline in modo da poter continuare a usare le procedure di controllo del codice sorgente esistenti ottenendo i vantaggi di Configurazione app.

Distribuzione in più aree in Configurazione app

Se l'applicazione viene distribuita in più aree, è consigliabile abilitare la replica geografica dell'archivio Configurazione app. È possibile consentire all'applicazione di connettersi principalmente alla replica corrispondente all'area in cui vengono distribuite le istanze dell'applicazione e consentire il failover alle repliche in altre aree. Questa configurazione riduce al minimo la latenza tra l'applicazione e Configurazione app, distribuisce il carico perché ogni replica ha quote di limitazione separate e migliora la resilienza dell'applicazione contro interruzioni temporanee e a livello di area. Per altre informazioni, vedere Resilienza e ripristino di emergenza .

Creazione di applicazioni con resilienza elevata

Le applicazioni spesso si basano sulla configurazione per iniziare, rendendo critica la disponibilità elevata di app Azure Configuration. Per migliorare la resilienza, le applicazioni devono sfruttare le funzionalità di affidabilità di Configurazione app e prendere in considerazione le misure seguenti in base ai requisiti specifici.

  • Effettuare il provisioning nelle aree con il supporto della zona di disponibilità di Azure. Le zone di disponibilità consentono alle applicazioni di essere resilienti alle interruzioni del data center. Configurazione app offre ridondanza della zona per tutti i clienti senza costi aggiuntivi. È consigliabile creare l'archivio Configurazione app nelle aree con supporto per le zone di disponibilità. È possibile trovare un elenco di aree in cui Configurazione app ha abilitato il supporto della zona di disponibilità.
  • Abilitare la replica geografica e consentire all'applicazione di eseguire il failover tra le repliche. Questa configurazione offre un modello per la scalabilità e la resilienza avanzata in caso di errori temporanei e interruzioni a livello di area. Per altre informazioni, vedere Resilienza e ripristino di emergenza .
  • Distribuire la configurazione con procedure di distribuzione sicure. Le modifiche di configurazione non corrette o accidentali possono causare spesso tempi di inattività dell'applicazione. È consigliabile evitare di apportare modifiche alla configurazione che influisce direttamente sull'ambiente di produzione, ad esempio il portale di Azure quando possibile. Nelle procedure di distribuzione sicura si usa un modello di distribuzione con esposizione progressiva per ridurre al minimo il potenziale raggio di esplosione dei problemi causati dalla distribuzione. Se si adotta SDP, è possibile compilare e testare uno snapshot di configurazione prima di distribuirlo nell'ambiente di produzione. Durante la distribuzione, è possibile aggiornare le istanze dell'applicazione per selezionare progressivamente il nuovo snapshot. Se vengono rilevati problemi, è possibile eseguire il rollback della modifica ridistribuendo lo snapshot LKG (Known Good). Lo snapshot non è modificabile, garantendo la coerenza in tutte le distribuzioni. È possibile usare gli snapshot insieme alla configurazione dinamica. Usare uno snapshot per la configurazione di base e la configurazione dinamica per gli override della configurazione di emergenza e i flag di funzionalità.
  • Includere la configurazione con l'applicazione. Se si vuole assicurarsi che l'applicazione abbia sempre accesso a una copia della configurazione o se si preferisce evitare completamente una dipendenza di runtime da Configurazione app, è possibile eseguire il pull della configurazione da Configurazione app durante la fase di compilazione o di rilascio e includerla con l'applicazione. Per altre informazioni, vedere esempi di integrazione di Configurazione app con la pipeline CI/CD o la distribuzione di Kubernetes.
  • Usare provider di Configurazione app. Le applicazioni svolgono un ruolo fondamentale nel raggiungere una resilienza elevata perché possono tenere conto dei problemi che si verificano durante il runtime, ad esempio problemi di rete e rispondere più rapidamente agli errori. I provider di Configurazione app offrono una gamma di funzionalità di resilienza predefinite, tra cui l'individuazione automatica delle repliche, il failover di replica, i tentativi di avvio con timeout personalizzabili, la memorizzazione nella cache della configurazione e strategie adattive per l'aggiornamento affidabile della configurazione. È consigliabile usare provider di Configurazione app per trarre vantaggio da queste funzionalità. In caso contrario, è consigliabile implementare funzionalità simili nella soluzione personalizzata per ottenere il massimo livello di resilienza.

Applicazioni client in Configurazione app

Quando si usa Configurazione app nelle applicazioni client, assicurarsi di considerare due fattori principali. In primo luogo, se si usa il stringa di connessione in un'applicazione client, si rischia di esporre la chiave di accesso dell'archivio Configurazione app al pubblico. In secondo luogo, la scala tipica di un'applicazione client potrebbe causare richieste eccessive all'archivio Configurazione app, causando addebiti per eccedenza o limitazioni. Per altre informazioni sulla limitazione, vedere le domande frequenti.

Per risolvere questi problemi, è consigliabile usare un servizio proxy tra le applicazioni client e l'archivio Configurazione app. Il servizio proxy può eseguire l'autenticazione sicura con l'archivio Configurazione app senza problemi di sicurezza di perdita di informazioni di autenticazione. È possibile creare un servizio proxy usando una delle librerie del provider Configurazione app, in modo da poter sfruttare le funzionalità predefinite di memorizzazione nella cache e aggiornamento per ottimizzare il volume di richieste inviate a Configurazione app. Per altre informazioni sull'uso dei provider di Configurazione app, vedere gli articoli in Guide introduttive ed Esercitazioni. Il servizio proxy gestisce la configurazione dalla relativa cache alle applicazioni client ed è possibile evitare i due potenziali problemi descritti in questa sezione.

Applicazioni multi-tenant in Configurazione app

Un'applicazione multi-tenant è basata su un'architettura in cui un'istanza condivisa dell'applicazione serve più clienti o tenant. Ad esempio, si potrebbe avere un servizio di posta elettronica che offre agli utenti account separati ed esperienze personalizzate. L'applicazione gestisce in genere configurazioni diverse per ogni tenant. Ecco alcune considerazioni sull'architettura per l'uso di Configurazione app in un'applicazione multi-tenant.

Configurazione come codice

La configurazione come codice è una pratica di gestione dei file di configurazione nel sistema di controllo del codice sorgente, ad esempio un repository Git. Offre vantaggi come la tracciabilità e il processo di approvazione per eventuali modifiche alla configurazione. Se si adotta la configurazione come codice, Configurazione app include strumenti che consentono di gestire i dati di configurazione nei file e di distribuirli come parte del processo di compilazione, rilascio o CI/CD. In questo modo, le applicazioni possono accedere ai dati più recenti dagli archivi Configurazione app.

  • Per GitHub, è possibile abilitare l'azione GitHub di sincronizzazione Configurazione app per il repository. Le modifiche apportate ai file di configurazione vengono sincronizzate con Configurazione app automaticamente ogni volta che viene unita una richiesta pull.
  • Per Azure DevOps, è possibile includere il push di configurazione app Azure, un'attività della pipeline di Azure, nelle pipeline di compilazione o versione per la sincronizzazione dei dati.
  • È anche possibile importare file di configurazione in Configurazione app usando l'interfaccia della riga di comando di Azure come parte del sistema CI/CD. Per altre informazioni, vedere az appconfig kv import.

Questo modello consente di includere passaggi di convalida e test prima di eseguire il commit dei dati in Configurazione app. Se si usano più archivi Configurazione app, è anche possibile eseguire il push dei dati di configurazione in modo incrementale o tutti contemporaneamente.

Passaggi successivi