FastAPI部署至Azure Web App后访问环境变量的方法及本地开发管理方案咨询
嗨,我来帮你搞定这个问题!把FastAPI部署到Azure Web App后,不管是线上访问环境变量,还是本地开发时管理这些变量,都有很顺畅的方案,结合你现有的代码我给你一步步说清楚:
一、Azure Web App线上环境访问环境变量
完全没问题,Azure会把你配置的应用设置自动注入到应用的系统环境中,你只需要这么做:
在Azure门户设置环境变量
登录Azure门户,找到你的Web App,进入「配置」→「应用程序设置」,点击「新建应用程序设置」,添加你需要的键值对(比如AZURE_CLIENT_ID、AZURE_TENANT_ID这类),保存后记得重启Web App让设置生效。在FastAPI里优雅读取(结合你的Pydantic Settings)
你已经在用Pydantic的Settings类了,这刚好是管理配置最推荐的方式!只需要修改你的Settings类,让它直接从环境变量读取字段:# 注意:现在Pydantic推荐用pydantic-settings库的BaseSettings,如果你还没装,先执行 `pip install pydantic-settings` from pydantic_settings import BaseSettings from pydantic import AnyHttpUrl class Settings(BaseSettings): # 字段名对应Azure里设置的环境变量键名 azure_client_id: str azure_tenant_id: str azure_scopes: str # 比如设置成"api://xxx/access_as_user" backend_cors_origins: list[AnyHttpUrl] = [] class Config: env_file = ".env" # 本地开发时读取这个文件,后面会说 settings = Settings()之后在你的代码里,就可以直接用
settings.azure_client_id、settings.azure_tenant_id来访问这些变量了,比如你的azure_scheme可以改成:azure_scheme = SingleTenantAzureAuthorizationCodeBearer( app_client_id=settings.azure_client_id, tenant_id=settings.azure_tenant_id, scopes=settings.azure_scopes, )如果你偶尔需要直接读取单个环境变量,也可以用
os.getenv("YOUR_VAR_NAME"),但用Settings类更结构化,还能自动做类型校验,推荐优先用前者。
二、本地开发时的环境变量管理
本地开发时总不能每次启动都手动设置系统环境变量,我们用.env文件来统一管理:
创建.env文件
在你的项目根目录创建一个.env文件,内容是键值对格式,和Azure上的变量名保持一致:AZURE_CLIENT_ID=你的本地测试用客户端ID AZURE_TENANT_ID=你的租户ID AZURE_SCOPES=api://你的测试API/access_as_user BACKEND_CORS_ORIGINS=["http://localhost:3000", "http://localhost:8000"]让Settings读取.env文件
刚才的Settings类里已经加了env_file = ".env",Pydantic会自动优先读取系统环境变量,找不到的话再从.env文件里读。这样本地开发时用.env的配置,部署到Azure后会自动用Azure上的环境变量,完美兼容!重要提醒
一定要把.env文件加到.gitignore里,别提交到代码仓库,避免把敏感信息(比如客户端ID、租户ID)泄露出去。
这样不管是线上Azure环境还是本地开发,环境变量的管理都清晰又安全啦!
备注:内容来源于stack exchange,提问作者Thomas Segato

