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

如何在Azure中运行带依赖包的Python脚本并连接Azure SQL数据库?

Azure Function访问Azure SQL的配置方案及替代部署选项

一、非Premium Azure Function访问Azure SQL的防火墙解决办法

不用升级到Premium计划,有几种低成本方案:

  • 开启Azure服务访问权限:在Azure SQL服务器的防火墙设置中,勾选「允许Azure服务和资源访问此服务器」。该选项会允许所有Azure内部服务访问SQL,结合你使用的AD服务主体认证,安全性可以得到保障。
  • VNet集成方案:给Azure Function配置VNet集成,将其加入与SQL服务器同VNet或对等VNet,然后在SQL防火墙中添加该VNet的地址范围。这种方式比Premium计划成本低,适合低频次运行的场景。
  • 确认AD服务主体权限:确保你代码中使用的服务主体已被授予Azure SQL的访问权限(比如添加db_datawriter、db_datareader角色),这是token认证能正常工作的前提。

二、优化依赖包管理与部署效率

解决本地修改后重复发布的低效问题:

  • 远程构建部署:将代码托管到GitHub/GitLab等仓库,在Azure Function的部署中心选择从仓库部署,并开启远程构建。Azure会自动读取requirements.txt安装依赖,无需本地打包。
  • 在线编辑器修改:直接在Azure Portal的Function代码编辑器中修改代码和requirements.txt,保存后Azure会自动安装依赖,适合小范围调整。
  • 自动化CI/CD:配置Azure DevOps Pipeline或GitHub Actions,实现代码提交后自动部署到Azure Function,完全替代手动发布流程。

三、连接代码在Azure Function中失效的排查与修复

你提供的本地正常但云端失效的代码,可从以下几点优化:

  1. 替换弃用的ADAL库:ADAL已被官方弃用,改用azure-identity库更稳定,且token处理更简洁。
  2. 环境变量替代硬编码:将authority_url、applicationID、secret等敏感信息放到Azure Function的「应用设置」中,用os.getenv()读取,避免硬编码错误。
  3. 简化token处理逻辑:新版pyodbc支持直接传入token字符串的字节形式,无需手动构建复杂的byte结构。

修复后的示例代码:

import pyodbc
import os
from azure.identity import ClientSecretCredential

# 从应用设置读取配置
tenant_id = os.getenv("TENANT_ID")
client_id = os.getenv("CLIENT_ID")
client_secret = os.getenv("CLIENT_SECRET")
server = os.getenv("SQL_SERVER")
database = os.getenv("SQL_DATABASE")

# 获取认证token
credential = ClientSecretCredential(tenant_id, client_id, client_secret)
token = credential.get_token("https://database.windows.net/.default")

# 构建连接字符串并连接
conn_str = f"Driver={{ODBC Driver 18 for SQL Server}};SERVER={server};DATABASE={database};Encrypt=yes"
dbEngine = pyodbc.connect(conn_str, attrs_before={1256: token.token.encode("utf-8")})

另外需确保requirements.txt中包含依赖:

pyodbc
azure-identity

四、替代实现方案

如果Azure Function的方案仍不符合需求,可考虑以下选项:

  • Azure Logic Apps:无需编写Python代码,直接用内置连接器调用API并写入Azure SQL,支持定时触发和手动触发,自带依赖管理,零代码部署。
  • Azure Container Apps Jobs:将Python脚本打包为Docker镜像,部署为Container Apps Job,支持定时和手动触发,成本极低(按运行时长计费),依赖包预先封装在镜像中,修改代码后重新构建镜像即可。
  • Azure Automation Runbook:使用Python Runbook,支持定时和手动触发,可安装第三方包,适合低频次的数据同步任务,运维成本低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:43:17