Schnellstart: Hinzufügen von Featureflags zu einer Azure Functions-App

In dieser Schnellstartanleitung erstellen Sie ein C#-Codeprojekt in Azure Functions und verwenden darin Featureflags. Sie nutzen die Featureverwaltung von Azure App Configuration zum zentralen Speichern Ihrer gesamten Featureflags und zum Steuern der zugehörigen Zustände.

Die .NET-Bibliotheken für die Featureverwaltung erweitern das Framework um Unterstützung für Featureflags. Diese Bibliotheken bauen auf dem .NET-Konfigurationssystem auf. Über ihren .NET-Konfigurationsanbieter lassen sie sich in App Configuration integrieren.

Hinweis

Dieser Artikel unterstützt derzeit nur In-Process-Funktions-Apps in C#, die auf .NET 6 ausgeführt werden.

Voraussetzungen

Hinzufügen eines Featureflags

Fügen Sie dem App Configuration-Speicher ein Featureflag mit dem Namen Beta hinzu, und behalten Sie die Standardwerte für Bezeichnung und Beschreibung bei. Weitere Informationen zum Hinzufügen von Featureflags zu einem Speicher mithilfe des Azure-Portals oder der CLI finden Sie unter Erstellen eines Featureflags.

Aktivieren eines Featureflags namens„Beta“

Erstellen eines Functions-Projekts

Mit der Azure Functions-Projektvorlage in Visual Studio wird ein Bibliotheksprojekt der Klasse C# erstellt, das Sie in einer Funktions-App in Azure veröffentlichen können. Sie können mit einer Funktions-App Funktionen zu logischen Einheiten gruppieren. Dies erleichtert die Verwaltung, Bereitstellung, Skalierung und Freigabe von Ressourcen.

  1. Wählen Sie im Visual Studio-Menü Datei>Neu>Projekt aus.

  2. Geben Sie unter Neues Projekt erstellen den Suchbegriff functions in das Suchfeld ein, und wählen Sie die Vorlage Azure Functions und anschließend Weiter aus.

  3. Geben Sie unter Neues Projekt konfigurieren im Feld Projektname einen Namen für Ihr Projekt ein, und wählen Sie anschließend Erstellen aus. Der Name der Funktions-App muss als C#-Namespace gültig sein, verwenden Sie daher keine Unterstriche, Bindestriche oder andere nicht alphanumerische Zeichen.

  4. Verwenden Sie für die Einstellungen zum Erstellen einer neuen Azure Functions-Anwendung die Werte in der folgenden Tabelle:

    Einstellung Wert Beschreibung
    .NET-Version .NET 6 Dieser Wert erstellt ein Funktionsprojekt, das prozessintern mit Version 4.x der Azure Functions-Runtime ausgeführt wird. Weitere Informationen finden Sie unter Einstellen von Runtimeversionen von Azure Functions als Ziel.
    Funktionsvorlage HTTP-Trigger Mit diesem Wert wird eine Funktion erstellt, die durch eine HTTP-Anforderung ausgelöst wird.
    Speicherkonto (AzureWebJobsStorage) Speicheremulator Da für eine Funktions-App in Azure ein Speicherkonto erforderlich ist, wird ein Speicherkonto zugewiesen oder erstellt, wenn Sie Ihr Projekt in Azure veröffentlichen. Von HTTP-Triggern wird keine Azure Storage-Kontoverbindungszeichenfolge verwendet. Für alle anderen Triggertypen ist dagegen eine gültige Azure Storage-Kontoverbindungszeichenfolge erforderlich.
    Autorisierungsstufe Anonym Die erstellte Funktion kann von jedem Client ausgelöst werden, ohne dass ein Schlüssel angegeben werden muss. Diese Autorisierungseinstellung erleichtert Ihnen das Testen Ihrer neuen Funktion. Weitere Informationen zu Schlüsseln und zur Autorisierung finden Sie unter Autorisierungsschlüssel sowie in der Übersicht über HTTP-Trigger und -Bindungen in Azure Functions.

    Screenshot der Azure Functions-Projekteinstellungen


    Stellen Sie sicher, dass Autorisierungsstufe auf Anonym festgelegt ist. Bei Verwendung der Standardebene Funktion muss in Anforderungen für den Zugriff auf den Funktionsendpunkt der Funktionsschlüssel angegeben werden.

  5. Wählen Sie Erstellen aus, um das Funktionsprojekt und die HTTP-Triggerfunktion zu erstellen.

Herstellen einer Verbindung mit einem App Configuration-Speicher

Bei diesem Projekt wird die Abhängigkeitsinjektion in Azure Functions (.NET) genutzt. Hierbei wird Azure App Configuration als zusätzliche Konfigurationsquelle hinzugefügt, in der Ihre Featureflags gespeichert werden.

  1. Klicken Sie mit der rechten Maustaste auf Ihr Projekt, und wählen Sie NuGet-Pakete verwalten aus. Suchen Sie auf der Registerkarte Durchsuchen nach den folgenden NuGet-Paketen, und fügen Sie sie Ihrem Projekt hinzu.

  2. Fügen Sie die neue Datei Startup.cs mit dem folgenden Code hinzu. Hierbei wird eine Klasse mit dem Namen Startup definiert, mit der die abstrakte Klasse FunctionsStartup implementiert wird. Es wird ein assembly-Attribut verwendet, um den Typnamen anzugeben, der beim Starten von Azure Functions genutzt wird.

    using System;
    using Microsoft.Azure.Functions.Extensions.DependencyInjection;
    using Microsoft.Extensions.Configuration;
    using Microsoft.FeatureManagement;
    
    [assembly: FunctionsStartup(typeof(FunctionApp.Startup))]
    
    namespace FunctionApp
    {
        class Startup : FunctionsStartup
        {
            public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
            {
            }
    
            public override void Configure(IFunctionsHostBuilder builder)
            {
            }
        }
    }
    
  3. Aktualisieren Sie die ConfigureAppConfiguration-Methode, und fügen Sie den Azure App Configuration-Anbieter als zusätzliche Konfigurationsquelle hinzu, indem Sie AddAzureAppConfiguration() aufrufen.

    Mit der UseFeatureFlags()-Methode wird der Anbieter aufgefordert, Featureflags zu laden. Alle Featureflags verfügen über eine Standardablaufdauer von 30 Sekunden für den Cache, bevor erneut eine Überprüfung auf Änderungen durchgeführt wird. Das Ablaufintervall kann aktualisiert werden, indem die FeatureFlagsOptions.CacheExpirationInterval-Eigenschaft festgelegt wird, die an die UseFeatureFlags-Methode übergeben wird.

    public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
    {
        builder.ConfigurationBuilder.AddAzureAppConfiguration(options =>
        {
            options.Connect(Environment.GetEnvironmentVariable("ConnectionString"))
                   .Select("_")
                   .UseFeatureFlags();
        });
    }
    

    Tipp

    Wenn Sie nicht möchten, dass eine andere Konfiguration als Featureflags in Ihre Anwendung geladen wird, können Sie Select("_") nur einen nicht vorhandenen Dummyschlüssel laden "_" aufrufen. Standardmäßig werden alle Konfigurationsschlüsselwerte aus Ihrem App Configuration-Speicher geladen, wenn keine Select-Methode aufgerufen wird.

  4. Aktualisieren Sie die Configure-Methode, um Azure App Configuration-Dienste und den Feature-Manager per Abhängigkeitsinjektion verfügbar zu machen.

    public override void Configure(IFunctionsHostBuilder builder)
    {
        builder.Services.AddAzureAppConfiguration();
        builder.Services.AddFeatureManagement();
    }
    
  5. Öffnen Sie Function1.cs, und fügen Sie die folgenden Namespaces hinzu.

    using System.Linq;
    using Microsoft.FeatureManagement;
    using Microsoft.Extensions.Configuration.AzureAppConfiguration;
    

    Fügen Sie einen Konstruktor hinzu, der verwendet wird, um Instanzen von _featureManagerSnapshot und IConfigurationRefresherProvider per Abhängigkeitsinjektion abzurufen. Über IConfigurationRefresherProvider können Sie die Instanz von IConfigurationRefresher abrufen.

    private readonly IFeatureManagerSnapshot _featureManagerSnapshot;
    private readonly IConfigurationRefresher _configurationRefresher;
    
    public Function1(IFeatureManagerSnapshot featureManagerSnapshot, IConfigurationRefresherProvider refresherProvider)
    {
        _featureManagerSnapshot = featureManagerSnapshot;
        _configurationRefresher = refresherProvider.Refreshers.First();
    }
    
  6. Aktualisieren Sie die Run-Methode, um den Wert der angezeigten Meldung abhängig vom Status des Featureflags zu ändern.

    Die TryRefreshAsync-Methode wird am Anfang des Functions-Aufrufs aufgerufen, um Featureflags zu aktualisieren. Dies ist ein No-Op-Zustand, wenn das Zeitfenster für den Cacheablauf nicht erreicht wird. Entfernen Sie den Operator await, wenn Sie es vorziehen, dass die Featureflags aktualisiert werden, ohne den aktuellen Functions-Aufruf zu blockieren. In diesem Fall erhalten spätere Functions-Aufrufe den aktualisierten Wert.

    [FunctionName("Function1")]
    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 message = await _featureManagerSnapshot.IsEnabledAsync("Beta")
                ? "The Feature Flag 'Beta' is turned ON"
                : "The Feature Flag 'Beta' is turned OFF";
    
        return (ActionResult)new OkObjectResult(message);
    }
    

Lokales Testen der Funktion

  1. Legen Sie eine Umgebungsvariable mit dem Namen ConnectionString fest. Der Wert ist hierbei die Verbindungszeichenfolge, die Sie zuvor in Ihrem App Configuration-Speicher unter Zugriffsschlüssel abgerufen haben. Führen Sie bei Verwendung einer Windows-Eingabeaufforderung den folgenden Befehl aus, und starten Sie die Eingabeaufforderung neu, damit die Änderung wirksam wird:

        setx ConnectionString "connection-string-of-your-app-configuration-store"
    

    Führen Sie bei Verwendung von Windows PowerShell den folgenden Befehl aus:

        $Env:ConnectionString = "connection-string-of-your-app-configuration-store"
    

    Führen Sie bei Verwendung von macOS oder Linux den folgenden Befehl aus:

        export ConnectionString='connection-string-of-your-app-configuration-store'
    
  2. Drücken Sie F5, um Ihre Funktion zu testen. Akzeptieren Sie die entsprechende Aufforderung von Visual Studio zum Herunterladen und Installieren der Azure Functions Core (CLI) -Tools. Sie müssen möglicherweise auch eine Firewallausnahme aktivieren, damit die Tools HTTP-Anforderungen verarbeiten können.

  3. Kopieren Sie die URL Ihrer Funktion aus der Azure Functions-Laufzeitausgabe.

    Schnellstart: Debuggen von Funktionen in VS

  4. Fügen Sie die URL zu der HTTP-Anforderung in die Adressleiste Ihres Browsers ein. Die folgende Abbildung zeigt die Antwort, die angibt, dass das Featureflag Beta deaktiviert ist.

    Featureflag für Schnellstartfunktion deaktiviert

  5. Melden Sie sich beim Azure-Portal an. Wählen Sie Alle Ressourcen und dann den App Configuration-Speicher aus, den Sie erstellt haben.

  6. Wählen Sie Feature-Manager aus, und ändern Sie den Zustand des Beta-Schlüssels in Ein.

  7. Aktualisieren Sie den Browser mehrmals. Wenn das Zeitfenster für das Aktualisierungsintervall übergeben wird, ändert sich die Seite, um anzugeben, dass das Featureflag Beta aktiviert ist, wie in der Abbildung unten dargestellt.

    Featureflag für Schnellstartfunktion aktiviert

Hinweis

Der in diesem Tutorial verwendete Beispielcode kann aus dem GitHub-Repository für Azure App Configuration heruntergeladen werden.

Bereinigen von Ressourcen

Wenn Sie die in diesem Artikel erstellten Ressourcen nicht mehr verwenden möchten, löschen Sie die erstellte Ressourcengruppe, um Kosten zu vermeiden.

Wichtig

Das Löschen einer Ressourcengruppe kann nicht rückgängig gemacht werden. Die Ressourcengruppe und alle darin enthaltenen Ressourcen werden unwiderruflich gelöscht. Achten Sie daher darauf, dass Sie nicht versehentlich die falsche Ressourcengruppe oder die falschen Ressourcen löschen. Falls Sie die Ressourcen für diesen Artikel in einer Ressourcengruppe erstellt haben, die andere beizubehaltende Ressourcen enthält, löschen Sie die Ressourcen einzeln über den entsprechenden Bereich, statt die Ressourcengruppe zu löschen.

  1. Melden Sie sich beim Azure-Portal an, und klicken Sie auf Ressourcengruppen.
  2. Geben Sie im Feld Nach Name filtern den Namen Ihrer Ressourcengruppe ein.
  3. Wählen Sie in der Ergebnisliste den Ressourcengruppennamen aus, um eine Übersicht anzuzeigen.
  4. Wählen Sie die Option Ressourcengruppe löschen.
  5. Sie werden aufgefordert, das Löschen der Ressourcengruppe zu bestätigen. Geben Sie zur Bestätigung den Namen Ihrer Ressourcengruppe ein, und klicken Sie auf Löschen.

Daraufhin werden die Ressourcengruppe und alle darin enthaltenen Ressourcen gelöscht.

Nächste Schritte

In dieser Schnellstartanleitung haben Sie ein Featureflag erstellt und mit einer Azure Functions-App über die Microsoft.FeatureManagement-Bibliothek verwendet.