다음을 통해 공유


빠른 시작: Python 앱에 기능 플래그 추가

이 빠른 시작에서는 Azure App Configuration에서 기능 플래그를 만들고 이를 사용하여 Python 앱을 동적으로 제어하여 기능 관리의 엔드투엔드 구현을 만듭니다.

기능 관리 지원은 App Configuration에서 동적 구성 기능을 확장합니다. 이 빠른 시작 예는 동적 구성 자습서에서 소개된 Python 앱을 기반으로 빌드되었습니다. 계속하기 전에 먼저 빠른 시작자습서를 완료하여 동적 구성을 갖춘 Python 앱을 만듭니다.

이 라이브러리는 어떤 Azure 라이브러리에도 종속성이 없습니다. Python 구성 공급자를 통해 App Configuration과 원활하게 통합됩니다.

필수 구성 요소

기능 플래그 추가

App Configuration 저장소에 베타라는 기능 플래그를 추가하고 레이블설명을 기본값으로 둡니다. Azure Portal 또는 CLI를 사용하여 저장소에 기능 플래그를 추가하는 방법에 대한 자세한 내용은 기능 플래그 만들기로 이동하세요. 이 단계에서는 기능 플래그 사용하도록 설정 체크 박스의 선택을 해제해야 합니다.

베타라는 이름의 기능 플래그를 사용하도록 설정하는 것을 보여 주는 스크린샷.

콘솔 애플리케이션

  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 포털에서 기능 관리자를 선택하고 사용하도록 설정 열의 토글을 사용하여 베타 기능 플래그의 상태를 켜짐으로 변경합니다.

    시스템 상태
    베타 설정
  4. 공급자의 새로 고침 간격인 약 30초 후에 애플리케이션은 다음을 인쇄합니다.

    Beta is True
    

웹 애플리케이션

다음 예에서는 Azure App Configuration에서 동적 새로 고침 기능을 사용하여 기존 웹 애플리케이션을 업데이트하고 기능 플래그도 사용하는 방법을 보여 줍니다. 구성 값에 대한 동적 새로 고침을 사용하는 방법에 대한 더 자세한 예는 Python 동적 구성을 참조하세요. 계속하기 전에 App Configuration 저장소에서 베타 기능 플래그가 사용하도록 설정되어 있는지 확인합니다.

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 저장소에서 사용하도록 설정된 경우에만 해당됩니다.

기능 플래그 베타를 사용하도록 설정한 스크린샷.

여기에서 전체 샘플 프로젝트를 확인할 수 있습니다.

이러한 엔드포인트가 트리거될 때마다 새로 고침 검사를 수행하여 최신 구성 값이 사용되는지 확인할 수 있습니다. 새로 고침 간격이 아직 지나지 않았거나 새로 고침이 이미 진행 중인 경우 검사가 즉시 반환될 수 있습니다.

새로 고침이 완료되면 모든 값이 한 번에 업데이트되므로 구성은 항상 개체 내에서 일관됩니다.

리소스 정리

이 문서에서 만든 리소스를 계속 사용하지 않으려면 여기서 만든 리소스 그룹을 삭제하여 요금이 부과되지 않도록 합니다.

중요합니다

리소스 그룹을 삭제하면 다시 되돌릴 수 없습니다. 리소스 그룹 및 포함된 모든 리소스가 영구적으로 삭제됩니다. 잘못된 리소스 그룹 또는 리소스를 자동으로 삭제하지 않도록 합니다. 유지하려는 다른 리소스가 포함된 리소스 그룹 내에서 이 문서에 대한 리소스를 만든 경우 리소스 그룹을 삭제하는 대신 해당 창에서 각 리소스를 개별적으로 삭제합니다.

  1. Azure Portal에 로그인하고 리소스 그룹을 선택합니다.
  2. 이름으로 필터링 상자에서 리소스 그룹의 이름을 입력합니다.
  3. 결과 목록에서 리소스 그룹 이름을 선택하여 개요를 확인합니다.
  4. 리소스 그룹 삭제를 선택합니다.
  5. 리소스 그룹 삭제를 확인하는 메시지가 표시됩니다. 리소스 그룹의 이름을 입력하여 확인하고 삭제를 선택합니다.

잠시 후, 리소스 그룹 및 모든 해당 리소스가 삭제됩니다.

다음 단계

이 빠른 시작에서는 새로운 App Configuration 저장소를 만들고 이를 사용하여 기능 관리 라이브러리를 통해 Python 앱의 기능을 관리했습니다.