You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure WebApp部署Flask应用:如何确保先执行get_secrets再启动?

解决Azure WebApp部署Flask时get_secrets未执行的问题

问题原因

Azure WebApp部署Flask应用时,默认通过WSGI服务器(如Gunicorn、IIS)直接加载Flask实例,不会触发if __name__ == "__main__"代码块,导致你原来的start_app()函数(以及内部的get_secrets()调用)完全没机会执行。

解决方案

方案1:将get_secrets移至全局作用域执行

把密钥获取逻辑放在Flask实例初始化后的全局代码中,确保无论本地还是生产环境都会执行:

app = Flask(__name__)

def get_secrets():
    try:
        # 示例:从Azure Key Vault或环境变量获取密钥,存入app.config供全局使用
        app.config['DB_PASSWORD'] = os.getenv('DB_PASSWORD')
        app.config['API_KEY'] = os.getenv('API_KEY')
        # 若使用Azure Key Vault,可在此调用azure-keyvault-secrets的SDK获取密钥
        return True
    except Exception as e:
        print(f"密钥获取失败: {str(e)}")
        return False

# 全局执行密钥获取,失败则直接终止应用
successful_secret_retrieval = get_secrets()
if not successful_secret_retrieval:
    raise RuntimeError("无法获取必要密钥,应用启动失败")

@app.route("/my-endpoint", methods=["POST"])
def endpoint():
    # 直接通过app.config使用密钥
    db_pwd = app.config['DB_PASSWORD']
    # 业务逻辑处理
    return "请求处理完成"

def start_app():
    app.run(host="0.0.0.0", debug=False, port=9090)

if __name__ == "__main__":
    start_app()

方案2:通过WSGI入口文件控制启动流程

如果你的项目使用独立的WSGI入口文件(如wsgi.py),在该文件中先执行密钥获取,再加载Flask实例:

# wsgi.py
import os
from flask import Flask

app = Flask(__name__)

def get_secrets():
    try:
        app.config['SECRET_KEY'] = os.getenv('SECRET_KEY')
        return True
    except Exception as e:
        print(f"密钥获取失败: {str(e)}")
        return False

# 先执行密钥获取
successful_secret_retrieval = get_secrets()
if not successful_secret_retrieval:
    raise RuntimeError("密钥获取失败,无法启动应用")

# 导入路由(需放在密钥获取之后,确保路由能访问密钥)
from your_app_module import routes

if __name__ == "__main__":
    app.run()

注意事项

  • 生产环境务必关闭debug=True,避免安全风险。
  • 若使用Azure Key Vault存储密钥,需为WebApp配置系统分配托管标识,并给该标识授予Key Vault的Secret Reader权限。
  • 也可直接将密钥存入WebApp的应用设置(环境变量),通过os.getenv()读取,这种方式无需额外配置权限。

内容的提问来源于stack exchange,提问作者Archit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 09:43:29