教程:在 Python 中使用动态配置

Azure 应用程序配置 Python 提供程序包括内置缓存和刷新功能。 本教程介绍如何在 Python 应用程序中启用动态配置。

先决条件

添加键值

将以下键值添加到 Azure 应用程序配置存储。 有关如何使用 Azure 门户或 CLI 将键值添加到存储区的详细信息,请转到创建键值

密钥 Label 内容类型
message Hello World! 留空 留空
sentinel 1 留空 留空

注意

Sentinel 键是完成所有其他键的更改后更新的键。 应用会监视 sentinel 键。 检测到更改时,应用会刷新所有配置值。 与监视所有键以了解更改情况相比,此方法有助于确保应用程序中配置的一致性,并减少对 Azure 应用程序配置存储发出的请求总数。

控制台应用程序

  1. 创建名为 app.py 的新 Python 文件并添加以下代码:

    from azure.appconfiguration.provider import load, WatchKey
    import os
    import time
    
    connection_string = os.environ.get("APPCONFIGURATION_CONNECTION_STRING")
    
    # Connecting to Azure App Configuration using connection string
    # Setting up to refresh when the Sentinel key is changed.
    config = load(
        connection_string=connection_string,
        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 应用程序配置存储。

    密钥 Label 内容类型
    message Hello World 已刷新! 留空 留空
    sentinel 2 留空 留空
  5. 更新值后,更新后的值将在刷新间隔传递时输出。

    Hello World Refreshed!
    

Web 应用程序

以下示例演示如何更新现有 Web 应用程序以使用可刷新的配置值。 可以向 load 函数的 on_refresh_success 关键字参数提供回调。 在服务器上检测到配置更改时,将会调用此回调,并且还可用于更新应用程序中的配置值。

app.py 中,设置 Azure 应用程序配置以加载配置值。 然后更新终结点以查看更新后的配置值。

from azure.appconfiguration.provider import load, WatchKey

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(connection_string=os.environ.get("AZURE_APPCONFIG_CONNECTION_STRING")
                        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 应用程序配置的访问,请继续学习下一教程。