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
- Azure-prenumeration – skapa en kostnadsfritt
- Visual Studio med arbetsbelastningen Azure-utveckling
- Azure Functions verktyg, om det inte redan är installerat med Visual Studio.
- Slutför snabbstarten Skapa en Azure Functions-app med Azure App Configuration
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.
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. ParameternrefreshAll
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.
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(); }
Ö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 avIConfigurationRefresher
.private readonly IConfiguration _configuration; private readonly IConfigurationRefresher _configurationRefresher; public Function1(IConfiguration configuration, IConfigurationRefresherProvider refresherProvider) { _configuration = configuration; _configurationRefresher = refresherProvider.Refreshers.First(); }
Uppdatera metoden och signalen
Run
för att uppdatera konfigurationenTryRefreshAsync
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 operatornawait
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
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>'
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.
Kopiera URL:en för funktionen från dina Azure Functions-utdata.
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.
Logga in på Azure-portalen. Välj Alla resurser och välj App Configuration store som du skapade i snabbstarten.
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 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.
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.
- Logga in på Azure Portal och välj Resursgrupper.
- I rutan Filtrera efter namn anger du namnet på resursgruppen.
- I resultatlistan väljer du resursgruppens namn för att se en översikt.
- Välj Ta bort resursgrupp.
- 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.