Ćwiczenie — implementacja flagi funkcjonalności, aby kontrolować funkcje ASP.NET Core

Ukończone

W tym ćwiczeniu zaimplementuj przełącznik funkcji w celu przełączania banera sprzedaży sezonowej dla twojej aplikacji. Flagi funkcji umożliwiają przełączanie dostępności funkcji bez ponownego wdrażania aplikacji.

Użyjesz Feature Management w bibliotece flag funkcji platformy .NET. Ta biblioteka udostępnia pomocników do implementowania flag funkcji w aplikacji. Biblioteka obsługuje proste przypadki użycia, takie jak instrukcje warunkowe, oraz bardziej zaawansowane scenariusze, na przykład warunkowe dodawanie tras lub filtrów akcji. Ponadto obsługuje filtry funkcji, które umożliwiają włączanie funkcji na podstawie określonych parametrów. Przykłady takich parametrów obejmują przedział czasu, wartości procentowe lub podzbiór użytkowników.

W tej jednostce wykonasz:

  • Utwórz wystąpienie usługi Azure App Configuration.
  • Dodaj flagę funkcjonalności do magazynu App Configuration.
  • Połącz aplikację ze sklepem App Configuration.
  • Zmień aplikację, aby korzystała z flagi funkcji.
  • Zmień stronę produktów, aby wyświetlić baner sprzedaży.
  • Skompiluj i przetestuj aplikację.

Otwieranie środowiska projektowego

Możesz użyć przestrzeni kodu usługi GitHub, która hostuje ćwiczenie, lub wykonać ćwiczenie lokalnie w programie Visual Studio Code.

Aby użyć codespace, utwórz wstępnie skonfigurowaną usługę GitHub Codespace przy użyciu tego linku tworzenia usługi Codespace.

Utworzenie i skonfigurowanie przestrzeni kodu w usłudze GitHub trwa kilka minut. Po zakończeniu zobaczysz pliki kodu dla ćwiczenia. Kod używany w pozostałej części tego modułu znajduje się w katalogu /dotnet-feature-flags.

Aby korzystać z programu Visual Studio Code, sklonuj repozytorium https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative na lokalny komputer. Wtedy:

  1. Zainstaluj wszystkie wymagania systemu , aby uruchomić kontener deweloperski w programie Visual Studio Code.
  2. Upewnij się, że platforma Docker jest uruchomiona.
  3. W nowym oknie programu Visual Studio Code otwórz folder sklonowanego repozytorium
  4. Naciśnij Ctrl+Shift+P, aby otworzyć paletę poleceń.
  5. Wyszukiwanie: >Dev Containers: ponowne kompilowanie i ponowne otwieranie w kontenerze
  6. Wybierz pozycję eShopLite — dotnet-feature-flags z listy rozwijanej. Program Visual Studio Code tworzy kontener programistyczny lokalnie.

Tworzenie wystąpienia usługi App Configuration

Wykonaj następujące kroki, aby utworzyć wystąpienie usługi App Configuration w ramach subskrypcji platformy Azure:

  1. W nowym okienku terminalu zaloguj się do interfejsu wiersza polecenia platformy Azure.

    az login --use-device-code
    
  2. Wyświetl wybraną subskrypcję platformy Azure.

    az account show -o table
    

    Jeśli wybrano niewłaściwą subskrypcję, wybierz poprawną, używając polecenia az account set.

  3. Uruchom następujące polecenie Azure CLI, aby uzyskać listę regionów platformy Azure i skojarzone z nimi nazwy.

    az account list-locations -o table
    

    Znajdź region najbliżej Ciebie i użyj go w następnym kroku, aby zastąpić [Closest Azure region]

  4. Uruchom następujące polecenia interfejsu wiersza polecenia platformy Azure, aby utworzyć wystąpienie usługi App Configuration:

    export LOCATION=[Closest Azure region]
    export RESOURCE_GROUP=rg-eshop
    export CONFIG_NAME=eshop-app-features$SRANDOM    
    

    Musisz zmienić LOCATION na region Azure bliski twojej lokalizacji, na przykład eastus. Jeśli chcesz inną nazwę dla grupy zasobów lub konfiguracji aplikacji, możesz zmienić powyższe wartości.

  5. Uruchom następujące polecenie, aby utworzyć grupę zasobów platformy Azure:

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  6. Uruchom następujące polecenie, aby utworzyć wystąpienie usługi App Configuration:

    az appconfig create --resource-group $RESOURCE_GROUP --name $CONFIG_NAME --location $LOCATION --sku Free
    

    Zostanie wyświetlona odmiana następujących danych wyjściowych:

    {
      "createMode": null,
      "creationDate": "2023-10-31T15:40:10+00:00",
      "disableLocalAuth": false,
      "enablePurgeProtection": false,
      "encryption": {
        "keyVaultProperties": null
      },
      "endpoint": "https://eshop-app-features1168054702.azconfig.io",
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rg-eshop/providers/Microsoft.AppConfiguration/configurationStores/eshop-app-features1168054702",
      "identity": null,
    
  7. Uruchom to polecenie, aby pobrać parametry połączenia dla wystąpienia usługi App Configuration:

    az appconfig credential list --resource-group $RESOURCE_GROUP --name $CONFIG_NAME --query [0].connectionString --output tsv
    

    Ten ciąg poprzedzony Endpoint= reprezentuje parametry połączenia sklepu App Configuration.

  8. Skopiuj parametry połączenia. Użyjesz go za chwilę.

Zapisz ciąg połączenia usługi App Configuration

Teraz dodasz parametry połączenia usługi App Configuration do aplikacji. Wykonaj następujące kroki:

  1. Otwórz plik /dotnet-feature-flags/docker-compose.yml.

  2. Dodaj nową zmienną środowiskową w wierszu 13.

    - ConnectionStrings:AppConfig=[PASTE CONNECTION STRING HERE]
    

    docker-compose.yml będzie przypominać następujący kod YAML:

    environment: 
      - ProductEndpoint=http://backend:8080
      - ConnectionStrings:AppConfig=Endpoint=https://eshop-app-features1168054702.azconfig.io;Id=<ID>;Secret=<Secret value>
    

Poprzedni wiersz reprezentuje parę klucz-wartość, w której ConnectionStrings:AppConfig jest nazwą zmiennej środowiskowej. W projekcie Store dostawca konfiguracji zmiennych środowiskowych odczytuje jego wartość.

Napiwek

Parametry połączenia usługi Azure App Configuration zawierają wpis tajny w postaci zwykłego tekstu. W rzeczywistych aplikacjach rozważ zintegrowanie usługi App Configuration z usługą Azure Key Vault w celu bezpiecznego przechowywania tajemnic. Usługa Key Vault jest poza zakresem tego modułu, ale wskazówki można znaleźć na stronie Tutorial: Use Key Vault references in an ASP.NET Core app(Samouczek: używanie odwołań do usługi Key Vault w aplikacji ASP.NET Core).

Dodanie flagi funkcji do magazynu App Configuration

W usłudze Azure App Configuration utwórz parę klucz-wartość i włącz ją, aby była traktowana jako flaga funkcji. Wykonaj następujące kroki:

  1. Na innej karcie przeglądarki zaloguj się do witryny Azure Portal przy użyciu tego samego konta i katalogu co interfejs wiersza polecenia platformy Azure.

  2. Użyj pola wyszukiwania, aby znaleźć i otworzyć zasób usługi App Configuration poprzedzony prefiksem eshop-app-features.

    Zrzut ekranu wyników wyszukiwania w portalu Azure pokazujący zasób App Configuration z prefiksem

  3. W sekcji Operations wybierz pozycję Feature Manager.

  4. W górnym menu wybierz pozycję + Utwórz.

  5. Zaznacz pole wyboru Włącz flagę funkcji.

  6. W polu tekstowym nazwa flagi funkcji wprowadź SeasonalDiscount.

  7. Wybierz Zastosuj.

    Zrzut ekranu przedstawiający nową flagę funkcji.

    Teraz, gdy flaga funkcji istnieje w magazynie App Configuration, projekt Store wymaga pewnych zmian w celu jego odczytania.

Przeglądanie kodu

Przejrzyj katalogi w okienku eksploratora w środowisku IDE. Należy pamiętać, że istnieją trzy projekty DataEntities, Productsi Store. Projekt Store to aplikacja Blazor. Projekt Products to biblioteka .NET Standard zawierająca usługę produktu. Projekt DataEntities to biblioteka .NET Standard zawierająca model produktu.

Łączenie aplikacji ze sklepem App Configuration

Aby uzyskać dostęp do wartości ze sklepu App Configuration w aplikacji ASP.NET Core, wymagany jest dostawca konfiguracji dla usługi App Configuration.

Zastosuj następujące zmiany w projekcie Store:

  1. W oknie terminalu przejdź do folderu Store:

    cd dotnet-feature-flags/Store
    
  2. Uruchom następujące polecenie, aby zainstalować pakiet NuGet zawierający dostawcę konfiguracji platformy .NET dla usługi App Configuration:

    dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore
    dotnet add package Microsoft.FeatureManagement.AspNetCore
    dotnet add package Microsoft.Extensions.Configuration.AzureAppConfiguration
    
  3. Otwórz plik Store/Program.cs.

  4. Dodaj nowe odwołania do pakietu w górnej części pliku:

    using Microsoft.FeatureManagement;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Configuration.AzureAppConfiguration;
    
  5. Dodaj ten kod poniżej komentarza // Dodaj kod AddAzureAppConfiguration.

    // Retrieve the connection string
    var connectionString = builder.Configuration.GetConnectionString("AppConfig");
    
    // Load configuration from Azure App Configuration
    builder.Configuration.AddAzureAppConfiguration(options => {
      options.Connect(connectionString)
        .UseFeatureFlags();
    });
    
    // Register the Feature Management library's services
    builder.Services.AddFeatureManagement();
    builder.Services.AddAzureAppConfiguration();
    

    W poprzednim fragmencie kodu:

    • Metoda Connect uwierzytelnia się w usłudze App Configuration. Pamiętaj, że parametry połączenia są przekazywane jako zmienna środowiskowa ConnectionStrings:AppConfig.
    • Metoda UseFeatureFlags umożliwia bibliotece zarządzania funkcjami odczytywanie flag funkcji ze sklepu App Configuration.
    • Te dwa wywołania builder.Services rejestrują usługi biblioteki zarządzania funkcjami w kontenerze wstrzykiwania zależności aplikacji.
  6. Na dole pliku, poniżej // Dodaj middleware konfiguracji aplikacji, dodaj ten kod:

    app.UseAzureAppConfiguration();
    

    Powyższy kod dodaje oprogramowanie pośredniczące App Configuration do potoku żądania. Oprogramowanie pośredniczące wyzwala operację odświeżania parametrów zarządzania funkcjami dla każdego przychodzącego żądania. Następnie to dostawca AzureAppConfiguration decyduje, w oparciu o ustawienia odświeżania, kiedy rzeczywiście połączyć się ze sklepem, aby uzyskać wartości.

Włączanie baneru sprzedaży

Aplikacja może teraz odczytać flagę funkcji, ale strona produktów musi zostać zaktualizowana, aby pokazać, że sprzedaż jest włączona. Wykonaj następujące kroki:

  1. Otwórz plik Store/Components/Pages/Products.razor.

  2. W górnej części pliku dodaj następujący kod:

    @using Microsoft.FeatureManagement
    @inject IFeatureManager FeatureManager
    

    Powyższy kod importuje przestrzenie nazw biblioteki zarządzania funkcjami i wprowadza interfejs IFeatureManager do składnika.

  3. W sekcji @code dodaj następującą zmienną, aby przechowywać stan flagi funkcji:

    private bool saleOn = false;  
    
  4. W metodzie OnInitializedAsync dodaj następujący kod:

    saleOn = await FeatureManager.IsEnabledAsync("SeasonalDiscount");
    

    Metoda powinna wyglądać podobnie do następującego kodu:

    protected override async Task OnInitializedAsync()
    {
        saleOn = await FeatureManager.IsEnabledAsync("SeasonalDiscount");
    
        // Simulate asynchronous loading to demonstrate streaming rendering
        products = await ProductService.GetProducts();
    }
    
  5. W wierszu 26 w obszarze komentarza <!-- Add a sales alert for customers --> dodaj następujący kod:

    <!-- Add a sales alert for customers -->
    @if (saleOn)
    {
    <div class="alert alert-success" role="alert">
      Our sale is now on.
    </div>
    }
    

    Powyższy kod wyświetla alert dotyczący sprzedaży, jeśli flaga funkcji jest włączona.

Kompilowanie aplikacji

  1. Upewnij się, że wszystkie zmiany zostały zapisane i znajdują się w katalogu dotnet-feature-flags. W terminalu uruchom następujące polecenie:

    dotnet publish /p:PublishProfile=DefaultContainer 
    
  2. Uruchom aplikację przy użyciu platformy Docker:

    docker compose up
    

Testowanie flagi funkcji

Aby sprawdzić, czy flaga funkcji działa zgodnie z oczekiwaniami w przestrzeni kodu, wykonaj następujące kroki:

  1. Przejdź do karty PORTS, a następnie po prawej stronie adresu lokalnego dla portu Front End wybierz ikonę globu. Przeglądarka otwiera nową kartę na stronie głównej.
  2. Wybierz produkt .

Jeśli używasz programu Visual Studio Code lokalnie, otwórz http://localhost:32000/products.

Zrzut ekranu przedstawiający alert sprzedaży na stronie produktów.

W witrynie Azure Portal możesz włączyć i wyłączyć flagę funkcji oraz odświeżyć stronę produktów, aby zobaczyć flagę w akcji.