Guida introduttiva: Aggiungere flag di funzionalità a un'app di Funzioni di Azure

In questa guida introduttiva si crea un progetto di codice C# di Funzioni di Azure in cui si useranno i flag di funzionalità. Si usa la gestione delle funzionalità del servizio Configurazione app per archiviare centralmente tutti i flag di funzionalità e controllarne gli stati.

Le librerie di Gestione funzionalità di .NET estendono il framework con il supporto per i flag di funzionalità. Queste librerie si basano sul sistema di configurazione di .NET. Si integrano con Configurazione app tramite il provider di configurazione di .NET.

Nota

Questo articolo supporta attualmente solo app per le funzioni In-Process C# eseguite in .NET 6.

Prerequisiti

Aggiungere un flag di funzionalità

Aggiungere un flag di funzionalità denominato Beta all'archivio di Configurazione app e lasciare Etichetta e Descrizione con i relativi valori predefiniti. Per altre informazioni su come aggiungere flag di funzionalità a un archivio usando il portale di Azure o l’interfaccia della riga di comando, andare a Creare una flag di funzionalità.

Abilitare un flag funzionalità denominato Beta

Creare un progetto per le funzioni

Il modello di progetto Funzioni di Azure in Visual Studio crea un progetto di libreria di classi C# che è possibile pubblicare in un'app per le funzioni in Azure. È possibile usare un'app per le funzioni per raggruppare le funzioni in un'unità logica e semplificare la gestione, la distribuzione, il ridimensionamento e la condivisione delle risorse.

  1. Nel menu di Visual Studio selezionare File>Nuovo>Progetto.

  2. In Crea un nuovo progetto immettere funzioni nella casella di ricerca, scegliere il modello Funzioni di Azure e quindi selezionare Avanti.

  3. In Configura il nuovo progetto immettere un nome per il progetto e quindi selezionare Crea. Il nome dell'app per le funzioni deve essere valido come spazio dei nomi C#, quindi non usare caratteri di sottolineatura, trattini o altri caratteri non alfanumerici.

  4. Per le impostazioni di Crea una nuova applicazione Funzioni di Azure usare i valori della tabella seguente:

    Impostazione valore Descrizione
    Versione .NET .NET 6 Questo valore crea un progetto di funzione che viene eseguito in-process con la versione 4.x del runtime di Funzioni di Azure. Per altre informazioni, vedere Panoramica delle versioni del runtime per Funzioni di Azure.
    Modello di funzione Trigger HTTP Con questo valore viene creata una funzione attivata da una richiesta HTTP.
    Account di archiviazione (AzureWebJobsStorage) Emulatore di archiviazione Poiché un’app per le funzioni in Azure richiede un account di archiviazione, ne viene assegnato o creato uno quando si pubblica il progetto in Azure. Un trigger HTTP non usa una stringa di connessione dell'account di archiviazione di Azure. Tutti gli altri tipi di trigger richiedono una stringa di connessione dell'account di archiviazione di Azure valida.
    Livello di autorizzazione Anonimo Viene creata una funzione che può essere attivata da qualsiasi client senza dover fornire una chiave. Questa impostazione di autorizzazione consente di testare più facilmente la nuova funzione. Per altre informazioni sulle chiavi e l'autorizzazione, vedere Chiavi di autorizzazione in Associazioni di webhook e HTTP.

    Screenshot delle impostazioni del progetto di Funzioni di Azure


    Assicurarsi di impostare Livello di autorizzazione su Anonimo. Se si sceglie il livello predefinito Funzione, è necessario fornire la chiave di funzione nelle richieste di accesso all'endpoint della funzione.

  5. Selezionare Crea per creare il progetto di funzione e la funzione attivata da HTTP.

Connettersi a un archivio di Configurazione app

Questo progetto usa l'inserimento di dipendenze in Funzioni di Azure .NET. Aggiunge Configurazione app di Azure come origine di configurazione supplementare in cui vengono archiviati i flag di funzionalità.

  1. Fare clic con il pulsante destro del mouse sul progetto e scegliere Gestisci pacchetti NuGet. Nella scheda Sfoglia cercare e aggiungere i pacchetti NuGet seguenti al progetto.

  2. Aggiungere un nuovo file, Startup.cs, con il codice seguente. Definisce una classe denominata Startup che implementa la classe astratta FunctionsStartup. Viene usato un attributo di assembly per specificare il nome del tipo usato durante l'avvio di Funzioni di Azure.

    using System;
    using Microsoft.Azure.Functions.Extensions.DependencyInjection;
    using Microsoft.Extensions.Configuration;
    using Microsoft.FeatureManagement;
    
    [assembly: FunctionsStartup(typeof(FunctionApp.Startup))]
    
    namespace FunctionApp
    {
        class Startup : FunctionsStartup
        {
            public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
            {
            }
    
            public override void Configure(IFunctionsHostBuilder builder)
            {
            }
        }
    }
    
  3. Aggiornare il metodo ConfigureAppConfiguration e aggiungere il provider di Configurazione app di Azure come origine di configurazione supplementare chiamando AddAzureAppConfiguration().

    Il metodo UseFeatureFlags() indica al provider di caricare i flag di funzionalità. Tutti i flag di funzionalità hanno una scadenza della cache predefinita di 30 secondi prima di ricontrollare le modifiche. L'intervallo di scadenza può essere aggiornato impostando la proprietà FeatureFlagsOptions.CacheExpirationInterval passata al metodo UseFeatureFlags.

    public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
    {
        builder.ConfigurationBuilder.AddAzureAppConfiguration(options =>
        {
            options.Connect(Environment.GetEnvironmentVariable("ConnectionString"))
                   .Select("_")
                   .UseFeatureFlags();
        });
    }
    

    Suggerimento

    Per evitare che nell'applicazione vengano caricate configurazioni diverse dai flag di funzionalità, è possibile chiamare Select("_") per caricare solo una chiave fittizia inesistente "_". Per impostazione predefinita, se non viene chiamato un metodo Select, vengono caricate tutte le coppie chiave-valore di configurazione presenti nell'archivio di Configurazione app.

  4. Aggiornare il metodo Configure per rendere disponibili i servizi di Configurazione app di Azure e di gestione delle funzionalità tramite l'inserimento di dipendenze.

    public override void Configure(IFunctionsHostBuilder builder)
    {
        builder.Services.AddAzureAppConfiguration();
        builder.Services.AddFeatureManagement();
    }
    
  5. Aprire Function1.cs e aggiungere gli spazi dei nomi seguenti.

    using System.Linq;
    using Microsoft.FeatureManagement;
    using Microsoft.Extensions.Configuration.AzureAppConfiguration;
    

    Aggiungere un costruttore usato per ottenere le istanze di _featureManagerSnapshot e IConfigurationRefresherProvider tramite l'inserimento di dipendenze. Da IConfigurationRefresherProviderè possibile ottenere l'istanza di IConfigurationRefresher.

    private readonly IFeatureManagerSnapshot _featureManagerSnapshot;
    private readonly IConfigurationRefresher _configurationRefresher;
    
    public Function1(IFeatureManagerSnapshot featureManagerSnapshot, IConfigurationRefresherProvider refresherProvider)
    {
        _featureManagerSnapshot = featureManagerSnapshot;
        _configurationRefresher = refresherProvider.Refreshers.First();
    }
    
  6. Aggiornare il metodo Run per cambiare il valore del messaggio visualizzato in base allo stato del flag di funzionalità.

    Il metodo TryRefreshAsync viene chiamato all'inizio della chiamata a Funzioni per aggiornare i flag di funzionalità. Questa operazione non verrà eseguita se non viene raggiunta la finestra temporale di scadenza della cache. Rimuovere l'operatore await se si preferisce che i flag di funzionalità vengano aggiornati senza bloccare la chiamata a Funzioni corrente. In tal caso, le successive chiamate a Funzioni riceveranno il valore aggiornato.

    [FunctionName("Function1")]
    public async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
        ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");
    
        await _configurationRefresher.TryRefreshAsync();
    
        string message = await _featureManagerSnapshot.IsEnabledAsync("Beta")
                ? "The Feature Flag 'Beta' is turned ON"
                : "The Feature Flag 'Beta' is turned OFF";
    
        return (ActionResult)new OkObjectResult(message);
    }
    

Testare la funzione in locale

  1. Impostare una variabile di ambiente denominata ConnectionString, il cui valore è la stringa di connessione recuperata in precedenza nell'archivio di Configurazione app in Chiavi di accesso. Se si usa il prompt dei comandi di Windows, eseguire il comando seguente e riavviare il prompt per rendere effettiva la modifica:

        setx ConnectionString "connection-string-of-your-app-configuration-store"
    

    Se si usa Windows PowerShell, eseguire il comando seguente:

        $Env:ConnectionString = "connection-string-of-your-app-configuration-store"
    

    Se si usa macOS o Linux, eseguire il comando seguente:

        export ConnectionString='connection-string-of-your-app-configuration-store'
    
  2. Premere F5 per testare la funzione. Se viene visualizzata, accettare la richiesta di Visual Studio di scaricare e installare gli strumenti dell'interfaccia della riga di comando Azure Functions Core Tools. Potrebbe essere necessario anche abilitare un'eccezione del firewall per consentire agli strumenti di gestire le richieste HTTP.

  3. Copiare l'URL della funzione dall'output di runtime di Funzioni di Azure.

    Guida introduttiva: debug di funzioni in VS

  4. Incollare l'URL per la richiesta HTTP nella barra degli indirizzi del browser. L'immagine seguente mostra la risposta che indica che il flag di funzionalità Beta è disabilitato.

    Flag di funzionalità disabilitato

  5. Accedere al portale di Azure. Selezionare Tutte le risorse e quindi l'archivio di Configurazione app creato.

  6. Selezionare Gestione funzionalità e cambiare lo stato della chiave Beta impostandolo su .

  7. Aggiornare alcune volte il browser. Quando passa l'intervallo di tempo dell'aggiornamento, la pagina cambierà per indicare che il flag di funzionalità Beta è attivato, come illustrato nell'immagine seguente.

    Flag di funzionalità abilitato

Nota

Il codice di esempio usato in questa esercitazione può essere scaricato dal repository GitHub di Configurazione app di Azure.

Pulire le risorse

Se non si vuole continuare a usare le risorse create in questo articolo, eliminare il gruppo di risorse creato qui per evitare addebiti.

Importante

L'eliminazione di un gruppo di risorse è irreversibile. Il gruppo di risorse e tutte le risorse in esso contenute vengono eliminati in modo permanente. Assicurarsi di non eliminare accidentalmente il gruppo di risorse o le risorse sbagliate. Se le risorse per questo articolo sono state create in un gruppo di risorse che contiene altre risorse che si vogliono mantenere, eliminare ogni risorsa singolarmente dal rispettivo riquadro anziché eliminare il gruppo di risorse.

  1. Accedere al portale di Azure e selezionare Gruppi di risorse.
  2. Nella casella Filtra per nome immettere il nome del gruppo di risorse.
  3. Nell'elenco dei risultati selezionare il nome del gruppo di risorse per visualizzare una panoramica.
  4. Selezionare Elimina gruppo di risorse.
  5. Verrà chiesto di confermare l'eliminazione del gruppo di risorse. Immettere il nome del gruppo di risorse per confermare e selezionare Elimina.

Dopo qualche istante, il gruppo di risorse e tutte le risorse che contiene vengono eliminati.

Passaggi successivi

In questo argomento della guida introduttiva è stato creato un flag di funzionalità che è stato usato con Funzioni di Azure.

Per abilitare la funzionalità di gestione delle funzionalità per altri tipi di app, continuare con le esercitazioni seguenti.

Per altre informazioni sulla gestione dei flag di funzionalità in Configurazione app di Azure, continuare con la seguente esercitazione.

Per il rundown completo della funzionalità della libreria di gestione delle funzionalità .NET, continuare con il documento seguente.