Cvičení – Implementace přepínače funkcí pro řízení funkcí aplikace ASP.NET Core.

Dokončeno

V tomto cvičení implementujte funkční příznak pro přepnutí sezónního prodejního banneru pro vaši aplikaci. Příznaky funkcí umožňují přepínat dostupnost funkcí bez opětovného nasazení aplikace.

V knihovně příznaků funkcí .NET použijete Správa funkcí. Tato knihovna poskytuje pomůcky k implementaci funkčních přepínačů ve vaší aplikaci. Knihovna podporuje jednoduché případy použití, jako jsou podmíněné příkazy, až po pokročilejší scénáře, jako je podmíněné přidávání směrování nebo filtrů akcí. Kromě toho podporuje filtry funkcí, které umožňují povolit funkce na základě konkrétních parametrů. Mezi příklady těchto parametrů patří čas okna, procenta nebo podmnožina uživatelů.

V této jednotce:

  • Vytvořte instanci Azure App Configuration.
  • Přidejte příznak funkce do obchodu App Configuration Store.
  • Připojte aplikaci ke službě App Configuration Store.
  • Upravte aplikaci tak, aby používala přepínač funkcí.
  • Změňte stránku produktů tak, aby se zobrazil banner prodeje.
  • Sestavte a otestujte aplikaci.

Otevření vývojového prostředí

Můžete použít codespace GitHubu, který je hostitelem cvičení, nebo cvičení dokončit místně v editoru Visual Studio Code.

Chcete-li použít codespace, vytvořte předem nakonfigurovaný GitHub Codespace s tento odkaz pro vytvoření Codespace.

Vytvoření a konfigurace prostoru kódu na GitHubu trvá několik minut. Po dokončení se zobrazí soubory kódu pro cvičení. Kód, který se používá pro zbytek tohoto modulu, je v adresáři /dotnet-feature-flags.

Pokud chcete použít Visual Studio Code, naklonujte úložiště https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative na svůj místní počítač. Potom:

  1. Nainstalujte všechny systémové požadavky pro spuštění vývojářského kontejneru v editoru Visual Studio Code.
  2. Ujistěte se, že je Docker spuštěný.
  3. V novém okně editoru Visual Studio Code otevřete složku klonovaného úložiště.
  4. Stisknutím kláves Ctrl+Shift+P otevřete paletu příkazů.
  5. Hledání: >Dev Containers: Opětovné sestavení a opětovné otevření v kontejneru
  6. V rozevíracím seznamu vyberte eShopLite - dotnet-feature-flags. Visual Studio Code vytvoří vývojový kontejner místně.

Vytvoření instance služby App Configuration

Provedením následujících kroků vytvořte instanci služby App Configuration ve svém předplatném Azure:

  1. V novém podokně terminálu se přihlaste k Azure CLI.

    az login --use-device-code
    
  2. Zobrazení vybraného předplatného Azure

    az account show -o table
    

    Pokud je vybrané nesprávné předplatné, vyberte správné předplatné pomocí příkazu az account set.

  3. Spuštěním následujícího příkazu Azure CLI získejte seznam oblastí Azure a název přidružený k němu:

    az account list-locations -o table
    

    Vyhledejte nejbližší oblast a použijte ji v dalším kroku k nahrazení [Closest Azure region]

  4. Spuštěním následujících příkazů Azure CLI vytvořte instanci služby App Configuration:

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

    Musíte změnit UMÍSTĚNÍ na Azure region blízko vás, například eastus. Pokud chcete změnit jiný název pro vaši skupinu prostředků nebo konfiguraci aplikace, změňte výše uvedené hodnoty.

  5. Spuštěním následujícího příkazu vytvořte skupinu prostředků Azure:

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  6. Spuštěním následujícího příkazu vytvořte instanci App Configuration:

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

    Zobrazí se varianta následujícího výstupu:

    {
      "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. Spuštěním tohoto příkazu načtěte připojovací řetězec pro instanci App Configuration:

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

    Tento řetězec s předponou Endpoint= představuje připojovací řetězec App Configuration Storu.

  8. Zkopírujte připojovací řetězec. Použijete ho za chvíli.

Uložte připojovací řetězec konfigurace aplikace

Teď do aplikace přidáte připojovací řetězec konfigurace aplikace. Proveďte následující kroky:

  1. Otevřete soubor /dotnet-feature-flags/docker-compose.yml.

  2. Přidejte novou proměnnou prostředí na řádku 13.

    - ConnectionStrings:AppConfig=[PASTE CONNECTION STRING HERE]
    

    docker-compose.yml bude vypadat přibližně takto:

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

Předchozí řádek představuje dvojici klíč-hodnota, ve které ConnectionStrings:AppConfig je název systémové proměnné. V projektu Store načte zprostředkovatel konfigurace proměnných prostředí jeho hodnotu.

Spropitné

Připojovací řetězec azure App Configuration obsahuje tajný kód ve formátu prostého textu. V reálných aplikacích zvažte integraci služby App Configuration se službou Azure Key Vault pro zabezpečené ukládání tajných kódů. Key Vault je pro tento modul mimo rozsah, ale pokyny najdete v kurzu: Použití odkazů na Key Vault v aplikaci ASP.NET Core.

Přidej příznak funkce do obchodu s konfigurací aplikace

V Azure App Configuration vytvořte a povolte pár klíč-hodnota, který se bude považovat za příznak funkce. Proveďte následující kroky:

  1. Na jiné kartě prohlížeče se přihlaste k webu Azure Portal se stejným účtem a adresářem jako Azure CLI.

  2. Pomocí vyhledávacího pole vyhledejte a otevřete prostředek konfigurace aplikace s předponou eshop-app-features.

    snímek obrazovky s výsledky hledání na webu Azure Portal zobrazující prostředek konfigurace aplikace s předponou eshop-app-features

  3. V části Operations vyberte správce funkcí.

  4. V horní nabídce vyberte + Vytvořit.

  5. Zaškrtněte políčko povolení funkce pomocí příznaku.

  6. Do textového pole Název příznaku funkce zadejte SeasonalDiscount.

  7. Vyberte Použít.

    snímek obrazovky s příznakem nové přidané funkce.

    Teď, když příznak funkce existuje v úložišti App Configuration, projekt Store vyžaduje určité změny, aby ho mohl přečíst.

Kontrola kódu

Zkontrolujte adresáře v podokně průzkumníka v integrovaném vývojovém prostředí (IDE). Všimněte si, že existují tři projekty DataEntities, Productsa Store. Projekt Store je aplikace Blazor. Projekt Products je knihovna .NET Standard, která obsahuje produktovou službu. Projekt DataEntities je knihovna .NET Standard, která obsahuje model produktu.

Připojení aplikace ke službě App Configuration Store

Pro přístup k hodnotám z úložiště konfigurace aplikace v aplikaci ASP.NET Core je potřeba konfigurační poskytovatel App Configuration.

V projektu Store použijte následující změny:

  1. V okně terminálu přejděte do složky Store:

    cd dotnet-feature-flags/Store
    
  2. Spuštěním následujícího příkazu nainstalujte balíček NuGet obsahující zprostředkovatele konfigurace .NET pro službu App Configuration:

    dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore
    dotnet add package Microsoft.FeatureManagement.AspNetCore
    dotnet add package Microsoft.Extensions.Configuration.AzureAppConfiguration
    
  3. Otevřete soubor Store/Program.cs.

  4. Přidejte nové odkazy na balíčky v horní části souboru:

    using Microsoft.FeatureManagement;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Configuration.AzureAppConfiguration;
    
  5. Přidejte tento kód pod // Přidejte kód AddAzureAppConfiguration komentář.

    // 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();
    

    V předchozím fragmentu kódu:

    • Metoda Connect se ověřuje ve službě App Configuration Store. Vzpomeňte si, že připojovací řetězec se předává jako proměnná prostředí ConnectionStrings:AppConfig.
    • Metoda UseFeatureFlags umožňuje knihovně Správa funkcí číst příznaky funkcí z App Configuration Storu.
    • Dvě builder.Services volání registrují služby knihovny správy funkcí s kontejnerem vkládání závislostí aplikace.
  6. V dolní části souboru // Přidejte middleware konfigurace aplikacepřidejte tento kód:

    app.UseAzureAppConfiguration();
    

    Předchozí kód přidá middleware pro konfiguraci aplikace do kanálu požadavku. Middleware aktivuje operaci aktualizace pro parametry správy funkcí pro každý příchozí požadavek. Pak je na poskytovateli AzureAppConfiguration, aby se rozhodl na základě nastavení obnovení, kdy se má skutečně připojit k datovému skladu a získat hodnoty.

Aktivujte prodejní banner

Vaše aplikace teď může číst příznak funkce, ale stránku produktů je potřeba aktualizovat, aby se ukázalo, že probíhá výprodej. Proveďte následující kroky:

  1. Otevřete soubor Store/Components/Pages/Products.razor.

  2. Do horní části souboru přidejte následující kód:

    @using Microsoft.FeatureManagement
    @inject IFeatureManager FeatureManager
    

    Předchozí kód naimportuje obory názvů knihovny Feature Management a vloží do komponenty rozhraní IFeatureManager.

  3. V části @code přidejte následující proměnnou pro uložení stavu příznaku funkce:

    private bool saleOn = false;  
    
  4. Do OnInitializedAsync metody přidejte následující kód:

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

    Metoda by měla vypadat jako následující kód:

    protected override async Task OnInitializedAsync()
    {
        saleOn = await FeatureManager.IsEnabledAsync("SeasonalDiscount");
    
        // Simulate asynchronous loading to demonstrate streaming rendering
        products = await ProductService.GetProducts();
    }
    
  5. Na řádek 26 pod <!-- Add a sales alert for customers --> komentář přidejte následující kód:

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

    Předchozí kód zobrazí upozornění na prodej, pokud je příznak funkce povolený.

Sestavení aplikace

  1. Ujistěte se, že jste uložili všechny změny a nacházíte se v dotnet-feature-flags adresáři. V terminálu spusťte následující příkaz:

    dotnet publish /p:PublishProfile=DefaultContainer 
    
  2. Spusťte aplikaci pomocí Dockeru:

    docker compose up
    

Otestujte přepínač funkce

Pokud chcete ověřit, že příznak funkce funguje podle očekávání v codespace, proveďte následující kroky:

  1. Přepněte na kartu PORTY a napravo od místní adresy portu Front End vyberte ikonu zeměkoule. Prohlížeč otevře novou kartu na domovské stránce.
  2. Vyberte Produkty.

Pokud používáte Visual Studio Code místně, otevřete http://localhost:32000/products.

snímek obrazovky zobrazující upozornění na prodej na stránce produktů.

Na portálu Azure můžete povolit a zakázat příznak funkce a aktualizovat stránku produktů, aby se zobrazilo, jak příznak funguje.