Руководство: Использование динамической конфигурации в Python

Поставщик Python для Конфигурация приложений Azure имеет встроенные возможности кэширования и обновления. В этом руководстве показано, как включить динамическую конфигурацию в приложениях Python.

Предварительные требования

Добавление ключевых значений

Добавьте следующее ключевое значение в хранилище Конфигурация приложений Azure. Дополнительные сведения о добавлении значений ключей в хранилище с помощью портал Azure или ИНТЕРФЕЙСА командной строки см. в разделе "Создание значения ключа".

Ключ значение Метка Тип контента
message Всем привет! Оставьте пустым Оставьте пустым
sentinel 1 Оставьте пустым Оставьте пустым

Примечание.

Сторожевой ключ — это ключ, который вы обновляете после того, как завершите изменение всех остальных ключей. Ваше приложение отслеживает сторожевой ключ. При обнаружении изменения приложение обновляет все значения конфигурации. Этот подход помогает обеспечить согласованность конфигурации в приложении и сократить общее количество запросов, сделанных в хранилище Конфигурация приложений Azure, по сравнению с мониторингом всех ключей для изменений.

Консольные приложения

  1. Создайте файл Python с именем app.py и добавьте следующий код:

    Вы используете DefaultAzureCredential для аутентификации в хранилище App Configuration. Следуйте инструкциям, чтобы назначить вашим учетным данным роль App Configuration Data Reader. Перед запуском приложения обязательно предоставьте достаточно времени для распространения разрешения.

    from azure.appconfiguration.provider import load, WatchKey
    from azure.identity import DefaultAzureCredential
    import os
    import time
    
    endpoint = os.environ.get("APPCONFIGURATION_ENDPOINT")
    
    # Connecting to Azure App Configuration using connection string
    # Setting up to refresh when the Sentinel key is changed.
    config = load(
        endpoint=endpoint,
        credential=DefaultAzureCredential(),
        refresh_on=[WatchKey("sentinel")],
        refresh_interval=10, # Default value is 30 seconds, shorted for this sample
    )
    
    print("Update the `message` in your Azure App Configuration store using Azure portal or CLI.")
    print("First, update the `message` value, and then update the `sentinel` key value.")
    
    while (True):
        # Refreshing the configuration setting
        config.refresh()
    
        # Current value of message
        print(config["message"])
    
        # Waiting before the next refresh
        time.sleep(5)
    
  2. Запустите скрипт:

    python app.py
    
  3. Проверьте выходные данные.

    Update the `message` in your Azure App Configuration store using Azure portal or CLI.
    First, update the `message` value, and then update the `sentinel` key value.
    Hello World!
    
  4. Обновите следующие ключевые значения в хранилище Конфигурация приложений Azure.

    Ключ значение Метка Тип контента
    message Hello World Refreshed! Оставьте пустым Оставьте пустым
    sentinel 2 Оставьте пустым Оставьте пустым
  5. После обновления значений и прохождения интервала обновления появляется обновленное значение.

    Hello World Refreshed!
    

Веб-приложения

В следующем примере показано, как обновить существующее веб-приложение для использования обновляемых значений конфигурации. Функцию обратного вызова можно передать в качестве именованного аргумента on_refresh_success функции load. Этот обратный вызов будет вызываться при обнаружении изменения конфигурации на сервере, и его можно использовать для обновления значений конфигурации в приложении.

В разделе app.py настройте Конфигурация приложений Azure для загрузки значений конфигурации. Затем обновите конечные узлы, чтобы они проверяли обновлённые значения конфигурации.

from azure.appconfiguration.provider import load, WatchKey
from azure.identity import DefaultAzureCredential

azure_app_config = None  # declare azure_app_config as a global variable

def on_refresh_success():
   app.config.update(azure_app_config)


global azure_app_config
azure_app_config = load(endpoint=os.environ.get("AZURE_APPCONFIG_ENDPOINT"),
                        credential=DefaultAzureCredential(),
                        refresh_on=[WatchKey("sentinel")],
                        on_refresh_success=on_refresh_success,
                        refresh_interval=10, # Default value is 30 seconds, shortened for this sample
                    )




@app.route("/")
def index():
    global azure_app_config
    # Refresh the configuration from Azure App Configuration service.
    azure_app_config.refresh()

    # Access a configuration setting directly from within Flask configuration
    print("Request for index page received")
    context = {}
    context["message"] = app.config.get("message")
    return render_template("index.html", **context)

Обновите шаблон index.html , чтобы использовать новые значения конфигурации.

<!doctype html>
<head>
  <title>Hello Azure App Configuration - Python Flask Example</title>
</head>
<html>

<body>
  <main>
    <div>
      <h1>{{message}}</h1>
    </div>
  </main>
</body>
</html>

Полный пример проекта можно найти здесь.

При активации этих конечных точек можно выполнить проверку обновления, чтобы обеспечить использование последних значений конфигурации. Проверка может вернуться немедленно, если интервал обновления не прошел или обновление уже выполняется.

После завершения обновления все значения обновляются одновременно, поэтому конфигурация всегда согласована в объекте.

Примечание.

Если интервал обновления не прошёл, обновление не выполняется, и проверка возвращается сразу.

Следующие шаги

В этом руководстве вы настроили приложение Python так, чтобы оно могло динамически обновлять параметры конфигурации из Конфигурация приложений Azure. Чтобы узнать, как использовать управляемую идентификацию Azure для упрощения доступа к Конфигурация приложений Azure, перейдите к следующему руководству.