次の方法で共有


クイックスタート: Python アプリに機能フラグを追加する

このクイックスタートでは、Azure App Configuration で機能フラグを作成し、それを使用して Python アプリを動的に制御し、機能管理のエンドツーエンドの実装を作成します。

機能管理のサポートにより、App Configuration の動的構成機能が拡張されます。 このクイックスタートの以下の例は、動的構成チュートリアルで紹介された Python アプリに基づいて構築されています。 続行する前に、まず、動的構成を使用して Python アプリを作成するクイックスタートチュートリアルを完了してください。

このライブラリは、Azure のライブラリに依存しません。 これらは、Python 構成プロバイダーを介して、App Configuration とシームレスに統合されます。

前提条件

機能フラグを追加する

Beta という機能フラグを App Configuration ストアに追加し、[ラベル][説明] を既定値のままにします。 Azure portal または CLI を使用してストアに機能フラグを追加する方法の詳細については、「機能フラグを作成する」を参照してください。 この段階では、[機能フラグを有効にする] チェックボックスをオフにしておく必要があります。

Beta という名前の [機能フラグを有効にする] チェックボックスを示すスクリーンショット。

コンソール アプリケーション

  1. pip install コマンドを使用して機能管理をインストールします。

    pip install featuremanagement
    
  2. app.py という名前の新しい Python ファイルを作成し、次のコードを追加します。

    from featuremanagement import FeatureManager
    from azure.identity import InteractiveBrowserCredential
    from azure.appconfiguration.provider import load
    import os
    from time import sleep
    
    endpoint = os.environ["APP_CONFIGURATION_ENDPOINT"]
    
    # Connecting to Azure App Configuration using an endpoint
    # credential is used to authenticate the client, the InteractiveBrowserCredential is used for this sample. It will open a browser window to authenticate the user. For all credential options see [credential classes](https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/identity/azure-identity#credential-classes).
    # feature_flag_enabled makes it so that the provider will load feature flags from Azure App Configuration
    # feature_flag_refresh_enabled makes it so that the provider will refresh feature flags from Azure App Configuration, when the refresh operation is triggered
    config = load(endpoint=endpoint, credential=InteractiveBrowserCredential(), feature_flag_enabled=True, feature_flag_refresh_enabled=True)
    
    feature_manager = FeatureManager(config)
    
    # Is always false
    print("Beta is ", feature_manager.is_enabled("Beta"))
    
    while not feature_manager.is_enabled("Beta"):
        sleep(5)
        config.refresh()
    
    print("Beta is ", feature_manager.is_enabled("Beta"))
    

アプリケーションを起動すると、ユーザーを認証するためのブラウザー ウィンドウが開きます。 ユーザーが App Configuration ストアにアクセスするには、少なくとも App Configuration Data Reader ロールが必要です。詳細については、App Configuration のロールに関するページを参照してください。

  1. APP_CONFIGURATION_ENDPOINT という名前の環境変数を、App Configuration ストアへのエンドポイントに設定します。 コマンド ラインで次のコマンドを実行してコマンド プロンプトを再起動し、変更が反映されるようにします。

    Windows コマンド プロンプトを使用してアプリをローカルでビルドして実行するには、次のコマンドを実行します。

    setx APP_CONFIGURATION_ENDPOINT "<endpoint-of-your-app-configuration-store>"
    

    変更を有効にするために、コマンド プロンプトを再起動します。 この環境変数の値を出力して、正しく設定されていることを確認します。

  2. Python アプリケーションを実行します。

    python app.py
    
  3. App Configuration ポータルで [機能マネージャー] を選択し、[有効化] 列のトグルを使用して、Beta 機能フラグの状態をオンに変更します。

    キー State
    ベータ オン
  4. 約 30 秒 (プロバイダーの更新間隔) 後、アプリケーションによって次の内容が出力されます。

    Beta is True
    

Web アプリケーション

次の例は、Azure App Configuration と動的更新を使用して機能フラグも使用するように、既存の Web アプリケーションを更新する方法を示しています。 構成値の動的更新を使用する方法を示す詳細な例については、Python での動的な構成に関するページを参照してください。 続行する前に、App Configuration ストアで Beta 機能フラグが有効になっていることを確認してください。

app.py で、機能フラグの更新を有効にして、追加の機能フラグを読み込むように Azure App Configuration の読み込み方法を設定します。

from featuremanagement import FeatureManager

...

global azure_app_config, feature_manager
# Connecting to Azure App Configuration using an endpoint
# credential is used to authenticate the client, the InteractiveBrowserCredential is used for this sample. It will open a browser window to authenticate the user. For all credential options see [credential classes](https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/identity/azure-identity#credential-classes).
# feature_flag_enabled makes it so that the provider will load feature flags from Azure App Configuration
# feature_flag_refresh_enabled makes it so that the provider will refresh feature flags from Azure App Configuration, when the refresh operation is triggered
azure_app_config = load(endpoint=endpoint, credential=InteractiveBrowserCredential(),
                        refresh_on=[WatchKey("sentinel")],
                        on_refresh_success=on_refresh_success,
                        refresh_interval=10, # Default value is 30 seconds, shortened for this sample
                        feature_flag_enabled=True,
                        feature_flag_refresh_enabled=True,
                    )
feature_manager = FeatureManager(config)

また、ルートも更新して、更新された機能フラグを確認できるようにします。

@app.route("/")
def index():
    ...
    context["message"] = azure_app_config.get("message")
    context["beta"] = feature_manager.is_enabled("Beta")
    ...

新しい機能フラグを使用するようにテンプレート index.html を更新します。

...

<body>
  <main>
    <div>
      <h1>{{message}}</h1>
      {% if beta %}
      <h2>Beta is enabled</h2>
      {% endif %}
    </div>
  </main>
</body>

アプリケーションを更新して実行すると、ページにメッセージ Beta is enabled が表示され、機能フラグが動作していることを確認できます。ただし、このメッセージが表示されるのは、App Configuration ストアで機能フラグを有効にしている場合のみです。

機能フラグ Beta が有効であることを示すスクリーンショット。

完全なサンプル プロジェクトはこちらから参照できます。

これらのエンドポイントがトリガーされるたびに、最新の構成値が使用されていることを確認するための更新チェックを実行できます。 更新間隔がまだ経過していない場合、または更新が既に進行中の場合、チェックからすぐに戻ります。

更新が完了すると、すべての値が一度に更新されるため、構成は常にオブジェクト内で一貫しています。

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

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

重要

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

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

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

次のステップ

このクイックスタートでは、新しい App Configuration ストアを作成し、この構成ストアを使用して、機能管理ライブラリを介して Python アプリの機能を管理しました。