Azure Functions 使用API连接对接SharePoint、Outlook、SQL Server方案咨询
- 通用前置准备:
- 优先选择 Python 3.9/3.10/3.11 作为 Function App 运行时版本,这三个版本是当前官方支持的稳定版本,兼容消费计划、弹性Premium计划所有功能
- 所有敏感凭据(租户ID、客户端密钥、SQL连接串等)全部存储在 Function App 的应用程序配置中,禁止硬编码在代码里;本地调试时凭据存入
local.settings.json,该文件默认被加入.gitignore不会意外泄露
对接 SharePoint
- 认证优先使用 MSAL(Microsoft Authentication Library)获取访问令牌,不推荐使用老旧的用户名密码认证方式,同时支持应用权限、委托权限两种场景
- 接口调用可以直接请求 SharePoint REST API,也可以用第三方封装库
Office365-REST-Python-Client,后者已经封装好了列表操作、文件上传下载等常用逻辑,无需自行拼接请求 - 权限配置遵循最小原则:仅给指定站点分配需要的读写权限,不要授予整个租户的全量权限;在 Azure AD 注册应用时配置 SharePoint 应用权限后,记得完成管理员同意授权
import os from office365.sharepoint.client_context import ClientContext # 从应用配置读取凭据 tenant_id = os.environ["SP_TENANT_ID"] client_id = os.environ["SP_CLIENT_ID"] client_secret = os.environ["SP_CLIENT_SECRET"] site_url = os.environ["SP_SITE_URL"] # 鉴权初始化上下文 context = ClientContext(site_url).with_client_credentials(client_id, client_secret, tenant_id) # 操作示例:读取指定列表的所有条目 sp_list = context.web.lists.get_by_title("目标列表名") items = sp_list.items.get().execute_query()
对接 Outlook
- 同样用 MSAL 完成鉴权,调用 Microsoft Graph API 操作 Outlook 邮件、日历、联系人等资源
- 场景适配:如果是操作组织公共邮箱、批量处理邮件,配置应用级的
Mail.ReadWrite、Calendars.ReadWrite等权限;如果是操作用户个人邮箱,使用委托权限配置对应作用域即可 - 可以直接使用官方
msgraph-core库发起请求,无需手动处理鉴权头
import os from msgraph.core import GraphClient from azure.identity import ClientSecretCredential credential = ClientSecretCredential( tenant_id=os.environ["AZURE_TENANT_ID"], client_id=os.environ["AZURE_CLIENT_ID"], client_secret=os.environ["AZURE_CLIENT_SECRET"] ) graph_client = GraphClient(credential=credential, scopes=["https://graph.microsoft.com/.default"]) # 操作示例:获取指定邮箱最新10封邮件 result = graph_client.get('/users/目标邮箱地址/messages?$top=10') mails = result.json()
对接 SQL Server
- 驱动推荐使用官方适配的
pyodbc,性能和兼容性是当前所有Python SQL Server驱动中最好的 - 连接串存入 Function App 应用配置,SQL Server 侧可以开启防火墙允许Azure服务访问,对安全要求高的场景配置私有端点走内网访问,避免公网暴露端口
- 操作时注意复用连接,不要每次请求都新建连接,避免出现连接耗尽问题
import os import pyodbc conn_str = os.environ["SQL_CONNECTION_STRING"] # 初始化连接 conn = pyodbc.connect(conn_str) cursor = conn.cursor() # 操作示例:查询表数据 cursor.execute("SELECT * FROM 目标表名") rows = cursor.fetchall() # 操作完成后关闭资源 cursor.close() conn.close()
部署运行优化建议
- 本地开发完成后,用
requirements.txt声明所有依赖库,包括msal、pyodbc、office365-rest-python-client等,部署时Azure会自动安装对应依赖 - 如果用消费计划,默认执行超时为5分钟,最长可配置为10分钟,超出时长要求的场景换用弹性Premium计划或专用计划
- 建议按业务拆分独立的Function,比如SharePoint数据同步一个Function、Outlook发邮件一个Function、SQL数据清洗一个Function,方便单独调试和扩缩容
内容的提问来源于stack exchange,提问作者Anirudh
相关产品推荐
相关产品推荐

