Dela via


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

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

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

  • Konfigurera din Azure Functions-app för att uppdatera konfigurationen som svar på ändringar i en 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

Azure Functions stöd för pågående eller isolerad process. Den största skillnaden i App Configuration användning mellan de två lägena är hur konfigurationen uppdateras. I processläge måste du göra ett anrop i varje funktion för att uppdatera konfigurationen. I läget isolerad process finns stöd för mellanprogram. Med App Configuration mellanprogram, Microsoft.Azure.AppConfiguration.Functions.Worker, kan anropet uppdatera konfigurationen automatiskt innan varje funktion körs.

  1. Uppdatera koden som ansluter till App Configuration och lägg till datauppdateringsvillkor.

    Öppna Startup.cs och uppdatera ConfigureAppConfiguration metoden.

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

    Metoden ConfigureRefresh registrerar en inställning som ska kontrolleras för ändringar när en uppdatering utlöses i programmet. Parametern refreshAll instruerar App Configuration-providern att läsa in hela konfigurationen igen när en ändring identifieras i den registrerade inställningen.

    Alla inställningar som registrerats för uppdatering har en standardtid på 30 sekunder innan en ny uppdatering görs. Den kan uppdateras genom att anropa AzureAppConfigurationRefreshOptions.SetCacheExpiration metoden.

    Tips

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

    Du kan också göra följande för att minimera risken för inkonsekvenser:

    • Utforma ditt program så att det är acceptabelt för tillfälliga inkonsekvenser i konfigurationen
    • Värm upp ditt program innan du hämtar det online (betjänar begäranden)
    • Använd standardkonfigurationen i ditt program och använd den när konfigurationsverifieringen misslyckas
    • Välj en strategi för konfigurationsuppdatering som minimerar påverkan på ditt program, till exempel en låg trafiktidsinställning.
  1. Configure Uppdatera metoden för att göra Azure App Configuration tjänster tillgängliga via beroendeinmatning.

    public override void Configure(IFunctionsHostBuilder builder)
    {
        builder.Services.AddAzureAppConfiguration();
    }
    
  2. Ö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 av IConfigurationRefresherProvider via beroendeinmatning, 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();
    }
    
  3. Uppdatera metoden och signalen Run för att uppdatera konfigurationen TryRefreshAsync med hjälp av metoden i början av Functions-anropet. Det blir en no-op om tidsgränsen för cachens förfallotid inte nås. Ta bort operatorn await om du föredrar att konfigurationen uppdateras utan att blockera det aktuella Functions-anropet. I så fall uppdateras senare Functions-anrop.

    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 appkonfigurationsarkivet. Om du använder Windows-kommandotolken kör du följande kommando och startar om kommandotolken för att tillåta 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 att göra det godkänner du begäran från Visual Studio om att ladda ned och installera cli-verktyg (Azure Functions Core). 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 i webbläsaren på den lokala GET-begäran som returneras av funktionen.

    Snabbstart för lokal funktionsstart

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

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

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

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

    Tangent Värde
    TestApp:Settings: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 uppdaterat värde.

    Snabbstart Funktionsuppdatering lokalt

Anteckning

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

Rensa resurser

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

Viktigt

Att ta bort en resursgrupp kan inte ångras. Resursgruppen och alla resurser i den tas bort permanent. Se till att du inte tar bort fel resursgrupp eller resurser av misstag. Om du har skapat resurserna för den här artikeln i en resursgrupp som innehåller andra resurser som du vill behålla tar du bort varje resurs individuellt från respektive fönster i stället för att ta bort resursgruppen.

  1. Logga in på Azure Portal och välj Resursgrupper.
  2. I rutan Filtrera efter namn anger du namnet på resursgruppen.
  3. I resultatlistan väljer du resursgruppens 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å resursgruppen för att bekräfta och välj Ta bort.

Efter en liten stund tas resursgruppen och alla dess resurser bort.

Nästa steg

I den här självstudien har du aktiverat din Azure Functions-app 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 till App Configuration fortsätter du till nästa självstudie.