次の方法で共有


クイック スタート: Azure Kubernetes Service のワークロードに機能フラグを追加する

このクイック スタートでは、Azure App Configuration で機能フラグを作成し、それを使用して、AKS で実行されている ASP.NET Core アプリで新しい Web ページの可視性を動的に制御します。再起動や再デプロイは必要ありません。

[前提条件]

ドキュメントに従って、Azure Kubernetes Service で動的構成を使用します。

機能フラグを作成する

App Configuration ストアに Beta という機能フラグを追加し、 ラベル説明 を既定値のままにします。 Azure portal または CLI を使用してストアに機能フラグを追加する方法の詳細については、「 機能フラグの作成」を参照してください。

Beta という名前の機能フラグの作成を示すスクリーンショット。

機能フラグを使用する

このセクションでは、シンプルな ASP.NET Web アプリケーションで機能フラグを使用し、Azure Kubernetes Service (AKS) で実行します。

  1. クイック スタートで作成したプロジェクトのディレクトリに移動し、次のコマンドを実行して、Microsoft.FeatureManagement.AspNetCore NuGet パッケージ バージョン 3.2.0 以降への参照を追加します。

    dotnet add package Microsoft.FeatureManagement.AspNetCore
    
  2. program.csを開き、AddFeatureManagementを呼び出して、アプリのサービス コレクションに機能管理を追加します。

    // Existing code in Program.cs
    // ... ...
    
    // Add a JSON configuration source 
    builder.Configuration.AddJsonFile("config/mysettings.json", reloadOnChange: true, optional: false); 
    
    // Add feature management to the container of services.
    builder.Services.AddFeatureManagement();
    
    var app = builder.Build();
    
    // The rest of existing code in program.cs
    // ... ...
    

    ファイルが存在しない場合は、ファイルの先頭に using Microsoft.FeatureManagement; を追加します。

  3. Pages ディレクトリの下に Beta という名前の新しい空の Razor ページを追加します。 これには、 Beta.cshtml と Beta.cshtml.cs の 2 つのファイルが含 まれています

    Beta.cshtml を開き、次のマークアップで更新します。

    @page
    @model MyWebApp.Pages.BetaModel
    @{
        ViewData["Title"] = "Beta Page";
    }
    
    <h1>This is the beta website.</h1>
    

    Beta.cshtml.csを開き、FeatureGate属性を BetaModel クラスに追加します。 FeatureGate属性を使用すると、ベータ機能フラグが有効になっている場合にのみベータ ページにアクセスできるようになります。 ベータ機能フラグが有効になっていない場合、ページは 404 Not Found を返します。

    using Microsoft.AspNetCore.Mvc.RazorPages;
    using Microsoft.FeatureManagement.Mvc;
    
    namespace MyWebApp.Pages
    {
        [FeatureGate("Beta")]
        public class BetaModel : PageModel
        {
            public void OnGet()
            {
            }
        }
    }   
    
  4. Pages/_ViewImports.cshtml を開き、@addTagHelper ディレクティブを使用して機能マネージャー タグ ヘルパーを登録します。

    @addTagHelper *, Microsoft.FeatureManagement.AspNetCore
    

    上記のコードを使用すると、 <feature> タグ ヘルパーをプロジェクトの .cshtml ファイルで使用できます。

  5. Pages\Shared ディレクトリで _Layout.cshtml を開きます。 下の強調表示された行に示すように、[ホーム] と [プライバシー] ナビゲーション バーの項目の間に新しい<feature> タグを挿入します。

    <div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
        <ul class="navbar-nav flex-grow-1">
            <li class="nav-item">
                <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
            </li>
            <feature name="Beta">
                <li class="nav-item">
                    <a class="nav-link text-dark" asp-area="" asp-page="/Beta">Beta</a>
                </li>
            </feature>
            <li class="nav-item">
                <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
            </li>
        </ul>
    </div>
    

    <feature>タグを使用すると、ベータ機能フラグが有効になっている場合にのみベータメニュー項目が表示されます。

  6. アプリケーションをコンテナー化 し、 イメージを Azure Container Registry にプッシュします

  7. アプリケーションをデプロイします。 ブラウザーを更新すると、Web ページは次のようになります。

    機能フラグなしで configMap を使用した後の Kubernetes Provider を示すスクリーンショット。

Kubernetes プロバイダーを使用して機能フラグを読み込む

  1. Deployment ディレクトリにある appConfigurationProvider.yaml ファイルを次の内容で更新します。

    apiVersion: azconfig.io/v1
    kind: AzureAppConfigurationProvider
    metadata:
      name: appconfigurationprovider-sample
    spec:
      endpoint: <your-app-configuration-store-endpoint>
      target:
        configMapName: configmap-created-by-appconfig-provider
        configMapData: 
          type: json
          key: mysettings.json
      auth:
        workloadIdentity:
          managedIdentityClientId: <your-managed-identity-client-id>
      featureFlag:
        selectors:
          - keyFilter: 'Beta'
        refresh:
          enabled: true
    

    ヒント

    featureFlag セクションでselectorsが指定されていない場合、Kubernetes プロバイダーは App Configuration ストアから機能フラグを読み込みます。 機能フラグの既定の更新間隔は、 featureFlag.refresh 有効にすると 30 秒です。 この動作は、featureFlag.refresh.interval パラメーターを使用してカスタマイズできます。

  2. 次のコマンドを実行して変更を適用します。

    kubectl apply -f ./Deployment -n appconfig-demo
    
  3. App Configuration ストアで ベータ 機能フラグを更新します。 [有効] の下にあるチェック ボックスをオンにして、フラグを 有効にします

  4. ブラウザーを複数回更新すると、ConfigMap が 30 秒以内に更新されると、更新されたコンテンツが表示されるようになります。

    機能フラグが有効になっている configMap を使用した後の Kubernetes プロバイダーを示すスクリーンショット。

  5. [ベータ] メニューを選択します。 動的に有効にしたベータ版 Web サイトが表示されます。

    configMap を使用した後のベータ ページ Kubernetes Provider を示すスクリーンショット。

リソースをクリーンアップする

AKS クラスターを保持する場合は、AKS クラスターから App Configuration Kubernetes プロバイダーをアンインストールします。

helm uninstall azureappconfiguration.kubernetesprovider --namespace azappconfig-system

この記事で作成したリソースを継続して使用しない場合は、ここで作成したリソース グループを削除して課金されないようにしてください。

Important

リソース グループを削除すると、元に戻すことができません。 リソース グループとそのすべてのリソースは完全に削除されます。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。 この記事のリソースを、保持したい他のリソースを含むリソース グループ内に作成した場合は、リソース グループを削除する代わりに、各リソースをそれぞれのペインから個別に削除します。

  1. Azure portal にサインインし、 [リソース グループ] を選択します。
  2. [名前でフィルター] ボックスにリソース グループの名前を入力します。
  3. 結果一覧でリソース グループ名を選択し、概要を表示します。
  4. [リソース グループの削除] を選択します。
  5. リソース グループの削除の確認を求めるメッセージが表示されます。 確認のためにリソース グループの名前を入力し、 [削除] を選択します。

しばらくすると、リソース グループとそのすべてのリソースが削除されます。

次のステップ

このクイック スタートでは次の作業を行います。

  • Azure Kubernetes Service (AKS) で実行されている ASP.NET Core アプリに機能管理機能を追加しました。
  • App Configuration Kubernetes プロバイダーを使用して、AKS クラスターを App Configuration ストアに接続しました。
  • App Configuration ストアからキー値と機能フラグを含む ConfigMap を作成しました。
  • アプリケーション コードを変更せずに、App Configuration ストアから動的構成でアプリケーションを実行しました。

Azure App Configuration Kubernetes プロバイダーの詳細については、 Azure App Configuration Kubernetes プロバイダーリファレンスを参照してください

機能管理機能の詳細については、次のチュートリアルに進んでください。