Zelfstudie: Dynamische configuratie gebruiken in een Azure Functions-app

De .NET-configuratieprovider van App Configuration ondersteunt het dynamisch cachen en vernieuwen van een configuratie op basis van toepassingsactiviteit. In deze zelfstudie leert hoe u dynamische configuratie-updates kunt implementeren in uw code. We maken gebruik van de Azure Functions-app die is geïntroduceerd in de quickstarts. Voordat u verdergaat, moet u eerst de quickstart Een Azure Functions-app maken met Azure App Configuration voltooien als u dat nog niet hebt gedaan.

In deze zelfstudie leert u het volgende:

  • Uw Azure Functions-app instellen voor het bijwerken van de configuratie als reactie op wijzigingen in een archief van App Configuration.
  • De nieuwste configuratie injecteren in uw Azure Functions-aanroepen.

Vereisten

Gegevens opnieuw laden vanuit app-configuratie

Azure Functions ondersteuning voor het uitvoeren van een in-proces of geïsoleerd proces. Het belangrijkste verschil in App Configuration gebruik tussen de twee modi is hoe de configuratie wordt vernieuwd. In de modus In-process moet u in elke functie een aanroep uitvoeren om de configuratie te vernieuwen. In de geïsoleerde procesmodus is er ondersteuning voor middleware. De App Configuration middleware, Microsoft.Azure.AppConfiguration.Functions.Worker, schakelt de aanroep in om de configuratie automatisch te vernieuwen voordat elke functie wordt uitgevoerd.

  1. Werk de code bij die verbinding maakt met App Configuration en voeg de voorwaarden voor het vernieuwen van gegevens toe.

    Open Startup.cs en werk de methode ConfigureAppConfiguration bij.

    public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
    {
        builder.ConfigurationBuilder.AddAzureAppConfiguration(options =>
        {
            options.Connect(Environment.GetEnvironmentVariable("ConnectionString"))
                    // Load all keys that start with `TestApp:` and have no label
                    .Select("TestApp:*")
                    // Configure to reload configuration if the registered sentinel key is modified
                    .ConfigureRefresh(refreshOptions =>
                        refreshOptions.Register("TestApp:Settings:Sentinel", refreshAll: true));
        });
    }
    

    Met de ConfigureRefresh methode wordt een instelling geregistreerd die moet worden gecontroleerd op wijzigingen wanneer een vernieuwing in de toepassing wordt geactiveerd. Met de parameter refreshAll wordt de App Configuration-provider geïnstrueerd de volledige configuratie opnieuw te laden wanneer een wijziging wordt gedetecteerd in de geregistreerde instelling.

    Alle instellingen die zijn geregistreerd voor vernieuwen, hebben een standaardcacheverlooptijd van 30 seconden voordat een nieuwe vernieuwing wordt geprobeerd. Het kan worden bijgewerkt door de methode AzureAppConfigurationRefreshOptions.SetCacheExpiration aan te roepen.

    Tip

    Wanneer u meerdere sleutelwaarden in App Configuration bijwerkt, wilt u normaal gesproken niet dat de configuratie van uw toepassing opnieuw wordt geladen voordat alle wijzigingen zijn aangebracht. U kunt een Sentinel-sleutel registreren en deze alleen bijwerken wanneer alle andere configuratiewijzigingen zijn voltooid. Dit helpt de consistentie van de configuratie in uw toepassing te garanderen.

    U kunt ook het volgende doen om het risico op inconsistenties te minimaliseren:

    • Uw toepassing zo ontwerpen dat deze geschikt is voor inconsistentie van tijdelijke configuraties
    • Uw toepassing opwarmen voordat u deze online brengt (aanvragen verwerken)
    • Draag de standaardconfiguratie in uw toepassing en gebruik deze wanneer de configuratievalidatie mislukt
    • Kies een strategie voor configuratie-updates die de impact op uw toepassing minimaliseert, bijvoorbeeld een lage tijdsinstelling voor verkeer.
  1. Werk de methode Configure bij om Azure App Configuration-services beschikbaar te maken via afhankelijkheidsinjectie.

    public override void Configure(IFunctionsHostBuilder builder)
    {
        builder.Services.AddAzureAppConfiguration();
    }
    
  2. Open Function1.cs en voeg de volgende naamruimten toe.

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

    Werk de constructor bij om het exemplaar van IConfigurationRefresherProvider te verkrijgen via afhankelijkheidsinjectie, van waaruit u het exemplaar van IConfigurationRefresher kunt verkrijgen.

    private readonly IConfiguration _configuration;
    private readonly IConfigurationRefresher _configurationRefresher;
    
    public Function1(IConfiguration configuration, IConfigurationRefresherProvider refresherProvider)
    {
        _configuration = configuration;
        _configurationRefresher = refresherProvider.Refreshers.First();
    }
    
  3. Werk de methode Run bij en geef aan het begin van de Functions-aanroep aan dat de configuratie moet worden bijgewerkt met de methode TryRefreshAsync. Er gebeurt niets (no-op) als de vervaltijd van de cache niet wordt bereikt. Verwijder de operator await als u de configuratie liever wilt vernieuwen zonder dat de huidige aanroep van Functions wordt geblokkeerd. In dat geval krijgen latere aanroepen van Functions een bijgewerkte waarde.

    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 keyName = "TestApp:Settings:Message";
        string message = _configuration[keyName];
    
        return message != null
            ? (ActionResult)new OkObjectResult(message)
            : new BadRequestObjectResult($"Please create a key-value with the key '{keyName}' in App Configuration.");
    }
    

De functie lokaal testen

  1. Stel een omgevingsvariabele met de naam ConnectionString in en stel deze in op de toegangssleutel van het App Configuration-archief. Als u de Windows-opdrachtprompt gebruikt, voert u de volgende opdracht uit en start u de opdrachtprompt opnieuw om de wijziging door te voeren:

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

    Als u Windows PowerShell gebruikt, voert u de volgende opdracht uit:

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

    Als u macOS of Linux gebruikt, voert u de volgende opdracht uit:

    export ConnectionString='connection-string-of-your-app-configuration-store'
    
  2. Druk op F5 om de functie testen. Accepteer desgevraagd de aanvraag van Visual Studio om Azure Functions Core-hulpprogramma's (CLI) te downloaden en installeren. Mogelijk moet u ook een firewall-uitzondering inschakelen, zodat de hulpprogramma's HTTP-aanvragen kunnen afhandelen.

  3. Kopieer de URL van uw functie vanuit de uitvoer van de Azure Functions-runtime.

    Quickstart over foutopsporing in functies in Visual Studio

  4. Plak de URL van de HTTP-aanvraag in de adresbalk van uw browser. In de afbeelding hieronder ziet u de reactie in de browser op de lokale GET-aanvraag die door de functie wordt geretourneerd.

    Quickstart over lokaal opstarten functies

  5. Meld u aan bij de Azure-portal. Selecteer Alle resources en selecteer het App Configuration-archief dat u in de quickstart hebt gemaakt.

  6. Selecteer Configuratieverkenner en werk de waarde van de volgende sleutel bij:

    Sleutel Waarde
    TestApp:Settings:Message Gegevens van Azure App Configuration - bijgewerkt

    Maak vervolgens de Sentinel-sleutel of wijzig de waarde ervan als deze al bestaat, bijvoorbeeld,

    Sleutel Waarde
    TestApp:Settings:Sentinel v1
  7. Vernieuw de browser een paar keer. Wanneer de cache-instelling na 30 seconden verloopt, ziet u op de pagina de reactie van de Functions-aanroep met de bijgewerkte waarde.

    Functions-app lokaal bijwerken

Notitie

De voorbeeldcode in deze zelfstudie kan worden gedownload van de App Configuration-opslagplaats op GitHub.

Resources opschonen

Als u de resources die in dit artikel zijn gemaakt niet wilt blijven gebruiken, verwijdert u de resourcegroep die u hier hebt gemaakt om kosten te voorkomen.

Belangrijk

Het verwijderen van een resourcegroep kan niet ongedaan worden gemaakt. De resourcegroep en alle resources daarin worden permanent verwijderd. Zorg ervoor dat u niet per ongeluk de verkeerde resourcegroep of resources verwijdert. Als u de resources voor dit artikel in een resourcegroep hebt gemaakt die andere resources bevat die u wilt behouden, moet u elke resource afzonderlijk verwijderen uit het deelvenster in plaats van dat u de resourcegroep verwijdert.

  1. Meld u aan bij de Azure-portal en selecteer Resourcegroepen.
  2. Voer de naam van de resourcegroep in het vak Filteren op naam in.
  3. Selecteer in de resultatenlijst de resourcegroepnaam om een overzicht te bekijken.
  4. Selecteer Resourcegroep verwijderen.
  5. U wordt gevraagd om het verwijderen van de resourcegroep te bevestigen. Voer de naam van de resourcegroep in ter bevestiging en selecteer Verwijderen.

Na enkele ogenblikken worden de resourcegroep en alle bijbehorende resources verwijderd.

Volgende stappen

In deze zelfstudie hebt u uw Azure Functions-app ingesteld voor het dynamisch vernieuwen van configuratie-instellingen vanuit App Configuration. Als u wilt weten hoe u een door Azure beheerde identiteit kunt gebruiken om de toegang tot App Configuration te stroomlijnen, gaat u verder met de volgende zelfstudie.