Samouczek: używanie konfiguracji dynamicznej w aplikacji Azure Functions
Dostawca konfiguracji platformy App Configuration .NET obsługuje buforowanie i odświeżanie konfiguracji dynamicznie sterowane działaniem aplikacji. W tym samouczku pokazano, jak zaimplementować dynamiczne aktualizacje konfiguracji w swoim kodzie. Opiera się ona na aplikacji Azure Functions wprowadzonej w przewodnikach Szybki start. Zanim przejdziesz dalej, najpierw zakończ tworzenie aplikacji usługi Azure Functions za pomocą Azure App Configuration.
Ten samouczek zawiera informacje na temat wykonywania następujących czynności:
- Skonfiguruj aplikację Azure Functions, aby zaktualizować jej konfigurację w odpowiedzi na zmiany w magazynie App Configuration.
- Wstrzykiwanie najnowszej konfiguracji do wywołań Azure Functions.
Wymagania wstępne
- Subskrypcja platformy Azure — utwórz jedną bezpłatnie
- Program Visual Studio z obciążeniem programowania na platformie Azure
- Azure Functions narzędzi, jeśli nie jest on jeszcze zainstalowany w programie Visual Studio.
- Zakończ przewodnik Szybki start Tworzenie aplikacji usługi Azure Functions przy użyciu Azure App Configuration
Ponowne ładowanie danych z usługi App Configuration
Azure Functions obsługują uruchamianie procesu w procesie lub izolowanym procesie. Główną różnicą w App Configuration użycia między dwoma trybami jest sposób odświeżania konfiguracji. W trybie przetwarzania należy wykonać wywołanie w każdej funkcji, aby odświeżyć konfigurację. W trybie izolowanego procesu istnieje obsługa oprogramowania pośredniczącego. Oprogramowanie pośredniczące Microsoft.Azure.AppConfiguration.Functions.Worker
App Configuration umożliwia automatyczne odświeżanie konfiguracji wywołania przed wykonaniem każdej funkcji.
Zaktualizuj kod łączący się z App Configuration i dodaj warunki odświeżania danych.
Otwórz plik Startup.cs i zaktualizuj metodę
ConfigureAppConfiguration
.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)); }); }
Metoda
ConfigureRefresh
rejestruje ustawienie, które ma być sprawdzane pod kątem zmian za każdym razem, gdy odświeżanie zostanie wyzwolone w aplikacji. ParametrrefreshAll
instruuje dostawcę App Configuration, aby ponownie załadował całą konfigurację za każdym razem, gdy zostanie wykryta zmiana w zarejestrowanym ustawieniu.Wszystkie ustawienia zarejestrowane do odświeżania mają domyślne wygaśnięcie pamięci podręcznej 30 sekund przed podjęciem próby nowego odświeżenia. Można ją zaktualizować, wywołując metodę
AzureAppConfigurationRefreshOptions.SetCacheExpiration
.Porada
Podczas aktualizowania wielu wartości klucz-wartości w App Configuration zwykle nie chcesz, aby aplikacja ponownie załadowała konfigurację przed wprowadzeniem wszystkich zmian. Klucz sentinel można zarejestrować i zaktualizować go tylko po zakończeniu wszystkich innych zmian konfiguracji. Pomaga to zapewnić spójność konfiguracji w aplikacji.
Możesz również wykonać następujące czynności, aby zminimalizować ryzyko niespójności:
- Projektowanie aplikacji tak, aby można było tolerować w przypadku niespójności konfiguracji przejściowej
- Rozgrzej aplikację przed wprowadzeniem jej w tryb online (żądania obsługi)
- Przenoś konfigurację domyślną w aplikacji i użyj jej, gdy walidacja konfiguracji zakończy się niepowodzeniem
- Wybierz strategię aktualizacji konfiguracji, która minimalizuje wpływ na aplikację, na przykład o niskim czasie ruchu.
Zaktualizuj metodę
Configure
w celu udostępnienia usług Azure App Configuration za pomocą iniekcji zależności.public override void Configure(IFunctionsHostBuilder builder) { builder.Services.AddAzureAppConfiguration(); }
Otwórz plik Function1.cs i dodaj następujące przestrzenie nazw.
using System.Linq; using Microsoft.Extensions.Configuration.AzureAppConfiguration;
Zaktualizuj konstruktor, aby uzyskać wystąpienie
IConfigurationRefresherProvider
iniekcji zależności, z którego można uzyskać wystąpienie klasyIConfigurationRefresher
.private readonly IConfiguration _configuration; private readonly IConfigurationRefresher _configurationRefresher; public Function1(IConfiguration configuration, IConfigurationRefresherProvider refresherProvider) { _configuration = configuration; _configurationRefresher = refresherProvider.Refreshers.First(); }
Zaktualizuj metodę
Run
i sygnał, aby odświeżyć konfigurację przy użyciuTryRefreshAsync
metody na początku wywołania usługi Functions. Jeśli nie zostanie osiągnięte okno czasu wygaśnięcia pamięci podręcznej, będzie to no-op. Usuń operatora,await
jeśli wolisz odświeżyć konfigurację bez blokowania bieżącego wywołania usługi Functions. W takim przypadku późniejsze wywołania usługi Functions otrzymają zaktualizowaną wartość.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."); }
Lokalne testowanie funkcji
Ustaw zmienną środowiskową o nazwie ConnectionString i ustaw ją na klucz dostępu do magazynu konfiguracji aplikacji. Jeśli używasz wiersza polecenia systemu Windows, uruchom następujące polecenie i uruchom ponownie wiersz polecenia, aby zezwolić na wprowadzenie zmiany:
setx ConnectionString "<connection-string-of-your-app-configuration-store>"
Jeśli używasz Windows PowerShell, uruchom następujące polecenie:
$Env:ConnectionString = "<connection-string-of-your-app-configuration-store>"
Jeśli używasz systemu macOS lub Linux, uruchom następujące polecenie:
export ConnectionString='<connection-string-of-your-app-configuration-store>'
Aby przetestować funkcję, naciśnij klawisz F5. Jeśli zostanie wyświetlony monit, zaakceptuj żądanie programu Visual Studio, aby pobrać i zainstalować narzędzia Azure Functions Core (CLI). Może być również konieczne włączenie wyjątku zapory, aby narzędzia mogły obsługiwać żądania HTTP.
Skopiuj adres URL funkcji z danych wyjściowych środowiska uruchomieniowego usługi Azure Functions.
Wklej adres URL żądania HTTP w pasku adresu przeglądarki. Na poniższej ilustracji przedstawiono odpowiedź w przeglądarce na lokalne żądanie GET zwrócone przez funkcję.
Zaloguj się do Azure portal. Wybierz pozycję Wszystkie zasoby i wybierz magazyn App Configuration utworzony w przewodniku Szybki start.
Wybierz pozycję Eksplorator konfiguracji i zaktualizuj wartość następującego klucza:
Klucz Wartość TestApp:Settings:Message Dane z Azure App Configuration — zaktualizowano Następnie utwórz klucz sentinel lub zmodyfikuj jego wartość, jeśli już istnieje, na przykład
Klucz Wartość TestApp:Settings:Sentinel v1 Odśwież przeglądarkę kilka razy. Gdy ustawienie buforowane wygaśnie po 30 sekundach, na stronie zostanie wyświetlona odpowiedź wywołania usługi Functions ze zaktualizowaną wartością.
Uwaga
Przykładowy kod używany w tym samouczku można pobrać z repozytorium App Configuration GitHub.
Czyszczenie zasobów
Jeśli nie chcesz kontynuować korzystania z zasobów utworzonych w tym artykule, usuń utworzoną tutaj grupę zasobów, aby uniknąć naliczania opłat.
Ważne
Usunięcie grupy zasobów jest nieodwracalne. Grupa zasobów i wszystkie zasoby w niej są trwale usuwane. Upewnij się, że nie usunięto przypadkowo nieprawidłowej grupy zasobów ani zasobów. Jeśli zasoby dla tego artykułu zostały utworzone w grupie zasobów zawierającej inne zasoby, które chcesz zachować, usuń każdy zasób indywidualnie z odpowiedniego okienka zamiast usuwania grupy zasobów.
- Zaloguj się do Azure Portal i wybierz pozycję Grupy zasobów.
- W polu Filtruj według nazwy wprowadź nazwę grupy zasobów.
- Na liście wyników wybierz nazwę grupy zasobów, aby wyświetlić przegląd.
- Wybierz pozycję Usuń grupę zasobów.
- Zobaczysz prośbę o potwierdzenie usunięcia grupy zasobów. Wprowadź nazwę grupy zasobów, aby potwierdzić, a następnie wybierz pozycję Usuń.
Po kilku chwilach grupa zasobów i wszystkie jej zasoby zostaną usunięte.
Następne kroki
W tym samouczku włączono aplikację Azure Functions, aby dynamicznie odświeżyć ustawienia konfiguracji z App Configuration. Aby dowiedzieć się, jak używać tożsamości zarządzanej platformy Azure w celu usprawnienia dostępu do App Configuration, przejdź do następnego samouczka.