Självstudie: Använda dynamisk konfiguration i en Azure Functions app

Den App Configuration .NET-konfigurationsprovidern stöder cachelagring och uppdatering av konfiguration dynamiskt driven av programaktivitet. Den här självstudien visar hur du kan implementera dynamiska konfigurationsuppdateringar i koden. Den bygger på den Azure Functions som introducerades i snabbstarterna. Innan du fortsätter slutför du Skapa en Azure Functions-app med Azure App Configuration först.

I den här guiden får du lära dig att:

  • Konfigurera din Azure Functions att uppdatera konfigurationen som svar på ändringar i ett App Configuration store.
  • Mata in den senaste konfigurationen i dina Azure Functions-anrop.

Förutsättningar

Läsa in data på nytt från App Configuration

  1. Öppna Startup.cs och uppdatera ConfigureAppConfiguration metoden .

    Metoden registrerar en inställning som ska kontrolleras för ändringar när en uppdatering utlöses i programmet, vilket du gör i det senare steget när ConfigureRefresh du lägger till _configurationRefresher.TryRefreshAsync() . Parametern instruerar App Configuration providern att läsa in hela konfigurationen på nytt när en ändring refreshAll identifieras i den registrerade inställningen.

    Alla inställningar som registrerats för uppdatering har en standardförfallotid på 30 sekunder. Den kan uppdateras genom att anropa AzureAppConfigurationRefreshOptions.SetCacheExpiration metoden .

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

    Tips

    När du uppdaterar flera nyckelvärden i App Configuration vill du normalt inte att programmet ska läsa in konfigurationen på nytt innan alla ändringar görs. Du kan registrera en sentinel-nyckel och bara uppdatera den när alla andra konfigurationsändringar har slutförts. Detta hjälper till att säkerställa konsekvensen för konfigurationen i ditt program.

  2. Uppdatera metoden Configure för att göra Azure App Configuration tjänster tillgängliga via beroendeinjektion.

    public override void Configure(IFunctionsHostBuilder builder)
    {
        builder.Services.AddAzureAppConfiguration();
    }
    
  3. Öppna Function1.cs och lägg till följande namnområden.

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

    Uppdatera konstruktorn för att hämta instansen IConfigurationRefresherProvider av via beroendeinjektion, från vilken du kan hämta instansen av IConfigurationRefresher .

    private readonly IConfiguration _configuration;
    private readonly IConfigurationRefresher _configurationRefresher;
    
    public Function1(IConfiguration configuration, IConfigurationRefresherProvider refresherProvider)
    {
        _configuration = configuration;
        _configurationRefresher = refresherProvider.Refreshers.First();
    }
    
  4. Uppdatera metoden Run och signalen för att uppdatera konfigurationen med hjälp av metoden i början av TryRefreshAsync Functions-anropet. Det blir en no-op om förfallotiden för cachen inte har nåtts. Ta bort await operatorn om du föredrar att konfigurationen uppdateras utan att blockera det aktuella Functions-anropet. I så fall får senare Functions-anrop det uppdaterade värdet.

    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.");
    }
    

Testa funktionen lokalt

  1. Ange en miljövariabel med namnet ConnectionString och ställ in den på åtkomstnyckeln till ditt appkonfigurationsarkiv. Om du använder Windows kör du följande kommando och startar om kommandotolken så att ändringen börjar gälla:

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

    Om du använder Windows PowerShell kör du följande kommando:

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

    Om du använder macOS eller Linux kör du följande kommando:

    export ConnectionString='connection-string-of-your-app-configuration-store'
    
  2. Tryck på F5 för att testa funktionen. Om du uppmanas till det godkänner du begäran Visual Studio att ladda ned och installera Azure Functions Core-verktyg (CLI). Du kan också behöva aktivera ett brandväggsfel så att verktygen kan hantera HTTP-begäranden.

  3. Kopiera URL:en för funktionen från dina Azure Functions-utdata.

    Snabbstart för funktionsfelsökning i VS

  4. Klistra in webbadressen för HTTP-begäran i webbläsarens adressfält. Följande bild visar svaret på den lokala GET-begäran som returnerades av funktionen i webbläsaren.

    Snabbstart för lokal funktionsstart

  5. Logga in på Azure-portalen. Välj Alla resurser och välj App Configuration som du skapade i snabbstarten.

  6. Välj Configuration Explorer och uppdatera värdet för följande nyckel:

    Tangent Värde
    TestApp:Settings:Message Data från Azure App Configuration – uppdaterad

    Skapa sedan sentinel-nyckeln eller ändra dess värde om den redan finns, till exempel

    Tangent Värde
    TestApp:Inställningar:Sentinel v1
  7. Uppdatera webbläsaren några gånger. När den cachelagrade inställningen upphör att gälla efter 30 sekunder visar sidan svaret från Functions-anropet med det uppdaterade värdet.

    Snabbstart – Funktionsuppdatering lokalt

Anteckning

Exempelkoden som används i den här självstudien kan laddas ned från App Configuration GitHub lagringsplatsen.

Rensa resurser

Om du inte vill fortsätta använda resurserna som skapats i den här artikeln tar du bort resurs gruppen som du skapade här för att undvika avgifter.

Viktigt

Att ta bort en resursgrupp kan inte ångras. Resurs gruppen och alla resurser i den tas bort permanent. Var noga så att du inte tar bort fel resursgrupp eller resurser av misstag. Om du har skapat resurserna för den här artikeln i en resurs grupp som innehåller andra resurser som du vill behålla, tar du bort varje resurs separat från dess respektive fönster i stället för att ta bort resurs gruppen.

  1. Logga in på Azure Portaloch välj resurs grupper.
  2. I rutan Filtrera efter namn anger du namnet på din resurs grupp.
  3. I listan resultat väljer du resurs gruppens namn för att se en översikt.
  4. Välj Ta bort resursgrupp.
  5. Du blir ombedd att bekräfta borttagningen av resursgruppen. Ange namnet på resurs gruppen som ska bekräftas och välj ta bort.

Efter en liten stund tas resurs gruppen och alla dess resurser bort.

Nästa steg

I den här självstudien har du aktiverat Azure Functions för att dynamiskt uppdatera konfigurationsinställningarna från App Configuration. Om du vill lära dig hur du använder en hanterad azure-identitet för att effektivisera åtkomsten App Configuration kan du fortsätta till nästa självstudie.