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

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.WorkerApp Configuration umożliwia automatyczne odświeżanie konfiguracji wywołania przed wykonaniem każdej funkcji.

  1. 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. Parametr refreshAll 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.
  1. 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();
    }
    
  2. 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 klasy IConfigurationRefresher.

    private readonly IConfiguration _configuration;
    private readonly IConfigurationRefresher _configurationRefresher;
    
    public Function1(IConfiguration configuration, IConfigurationRefresherProvider refresherProvider)
    {
        _configuration = configuration;
        _configurationRefresher = refresherProvider.Refreshers.First();
    }
    
  3. Zaktualizuj metodę Run i sygnał, aby odświeżyć konfigurację przy użyciu TryRefreshAsync 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

  1. 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'
    
  2. 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.

  3. Skopiuj adres URL funkcji z danych wyjściowych środowiska uruchomieniowego usługi Azure Functions.

    Debugowanie funkcji w programie VS z przewodnika Szybki start

  4. 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ę.

    Lokalne uruchamianie funkcji z przewodnika Szybki start

  5. Zaloguj się do Azure portal. Wybierz pozycję Wszystkie zasoby i wybierz magazyn App Configuration utworzony w przewodniku Szybki start.

  6. 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
  7. 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ą.

    Lokalne odświeżanie funkcji szybkiego startu

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.

  1. Zaloguj się do Azure Portal i wybierz pozycję Grupy zasobów.
  2. W polu Filtruj według nazwy wprowadź nazwę grupy zasobów.
  3. Na liście wyników wybierz nazwę grupy zasobów, aby wyświetlić przegląd.
  4. Wybierz pozycję Usuń grupę zasobów.
  5. 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.