你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在本教程中,将Python函数配置为将Azure 表存储用作输出绑定。 然后,将函数部署到Azure Functions并使用服务连接器将Azure Functions应用与表存储连接。
使用Visual Studio Code完成以下任务:
- 创建Python函数项目。
- 添加表存储输出函数绑定。
- 在本地运行函数。
- 将函数部署到Azure。
- 使用服务连接器在Azure Functions应用和表存储之间创建连接。
服务连接器源服务Azure Functions,目标服务Azure 表存储。 函数绑定使用包含存储表的 HTTP 触发器作为输出。 本地和云身份验证类型为连接字符串。
先决条件
- 基本了解 Azure Functions 和 如何在 Azure Functions 中连接到服务。
- 你拥有 Azure 资源写入权限的 Azure 订阅,且位于支持服务连接器的 Azure 区域中。 免费创建Azure帐户。
- Azure订阅中的 Azure 存储 Account,以及存储帐户中名为
testTable的表。 -
Visual Studio Code,并安装了以下扩展:
- Python
- Azure CLI 工具
-
Azure Functions配置为允许编程模型 V1,如下所示:
- 在 Visual Studio Code 中,选择 <
Settings 图标旁边的Azure Functions 扩展,然后选择Settings 。 - 在 设置 界面上,选中 Azure Functions:允许选择编程模型 旁边的复选框。
- 关闭 “设置” 屏幕。
- 在 Visual Studio Code 中,选择 <
创建函数项目
在Visual Studio Code中,使用 HTTP 触发器创建Python函数项目。
- 按 F1 打开命令面板,然后搜索并选择命令Azure Functions:创建新Project。
- 对于“选择将包含函数项目的文件夹”,请选择“浏览”,然后创建一个新文件夹或选择一个空文件夹作为项目工作区。 不要选择已是某个工作区的一部分的项目文件夹。
- 对于 选择项目类型,请选择 Python。
- 对于 选择Python编程模型,请选择 Model V1。
- 对于 选择Python解释器以创建虚拟环境,请选择 Manually 输入Python解释器或完整路径并输入Python可执行文件的完整路径。
- 对于 为项目的第一个函数选择模板,请选择 HTTP 触发器。
- 对于 提供函数名称,请输入 TableStorageOutputFunc。
- 对于 授权级别,请选择“ 匿名”。
- 若要 选择打开项目的方式,请选择 当前窗口中的“打开”。
有关详细信息,请参阅 创建函数代码并使用 Visual Studio Code 将函数代码部署到Azure。
添加存储表输出绑定
以下过程编辑项目中 的function.json 和 local.settings.json 文件,为函数创建表输出绑定。
- 右键单击函数文件夹中 的function.json 文件,然后从上下文菜单中选择 “添加绑定 ”。
- 在命令面板中,对于 “选择绑定方向”,请选择 “退出”。
- 对于“选择方向为 "out" 的绑定”,请选择“Azure 表存储”。
- 对于 用于在代码中标识此绑定的名称,请输入 outMessage。
- 对于要 写入数据的存储帐户中的表名称,请输入 testTable。
- 对于“从 "local.settings.json" 中选择包含存储帐户连接字符串的应用设置”,请选择“创建新的本地应用设置”。
- 对于 选择订阅,请选择 Azure 订阅。
- 对于 选择用于开发的存储帐户类型,请选择为远程存储使用Azure 存储。
- 对于 选择存储帐户,请选择要用于输出的Azure 存储帐户。
检查添加的绑定
打开 TableStorageOutputFunc/function.json 文件,并确保将表输出绑定正确添加到文件中。 如果任何值不同,请将其编辑为以下值:
{ "type": "table", "direction": "out", "name": "outMessage", "tableName": "testtable", "connection": "<your-storage-account-name>_STORAGE" }打开 local.settings.json 文件,并确保此文件中包含以下键值对:
<your-storage-account-name>_STORAGE: <your-storage-account-connection-string>
编辑Python代码
打开 TableStorageOutputFunc/__init__.py 文件,并将其内容替换为以下代码:
import logging
import uuid
import json
import azure.functions as func
def main(req: func.HttpRequest, outMessage: func.Out[str]) -> func.HttpResponse:
rowKey = str(uuid.uuid4())
data = {
"Name": "Output binding message",
"PartitionKey": "message",
"RowKey": rowKey
}
outMessage.set(json.dumps(data))
return func.HttpResponse(f"Message created with the rowKey: {rowKey}")
在本地运行函数
若要在本地运行函数,请按 F5。 如果系统提示连接到存储帐户,请选择Azure 存储帐户。 此值用于 Azure Functions 运行时,可以但不必与你用于函数输出的存储帐户相同。
在函数运行时,请通过右键单击活动栏的工作区视图中的 TableStorageOutputFunc 函数并选择“立即执行函数”来验证它是否可以写入表存储表。 检查函数响应,确保它包含 rowKey 写入表的值。
将函数部署到 Azure
创建Azure Functions应用并将函数部署到Azure。
- 在项目中 function.json 文件中,将
connection属性bindings的值更改为AZURE_STORAGETABLE_CONNECTIONSTRING。 - 按 F1 打开命令面板,然后搜索并选择命令Azure Functions:部署到 Function App。
- 对于 选择订阅,请选择 Azure 订阅。
- 对于 “选择函数应用”,请选择“ 创建新函数应用”。
- 对于 选择新资源的位置,请选择Azure Functions应用的Azure区域,最好选择与存储帐户相同的区域。
- 对于 输入新函数应用的名称,可以输入与本地函数 TableStorageOutputFunc 相同的名称。
- 对于 选择运行时堆栈,请选择 Python 3.10。
- 对于 “选择资源身份验证类型”,请选择“ 机密”。
Important
使用机密的连接字符串身份验证流需要对应用程序高度信任,并且存在其他流中不存在的风险。 仅在无法使用其他更安全的流(例如托管标识)时才应使用此流。
使用服务连接器创建连接
创建 Functions 应用后,可以使用服务连接器将应用连接到表存储表,以便应用可以轻松地将输出写入存储帐户。 以下命令创建一个服务连接器资源,用于在函数的应用设置中配置 AZURE_STORAGETABLE_CONNECTIONSTRING 变量。
函数绑定机制利用此应用设置来连接到存储账户,从而使函数能够写入存储表。 有关详细信息,请参阅 How Service Connector 可帮助Azure Functions连接到服务。
若要创建连接,可以在 Visual Studio Code 中运行以下 Azure CLI 命令,或使用 Azure Cloud Shell 或 local Azure CLI。 按如下所示替换占位符值:
<function-resource-id>:/subscriptions/<your-subscription>/resourceGroups/<function-resource-group>/providers/Microsoft.Web/sites/<function-name><storage-resource-id>:/subscriptions/<your-subscription>/resourceGroups/<storage-resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>/tableServices/default
az functionapp connection create storage-table --source-id "<function-resource-id>" --target-id "<storage-resource-id>" --secret
故障排除
如果收到与存储主机相关的错误,例如 No such host is known (<account-name>.table.core.windows.net:443),请确保用于连接表存储的连接字符串包含表终结点。 如果没有,请转到 Azure 存储 页,从 Security + networking 下的 Access 密钥 中复制连接字符串,并替换该值。
如果在本地运行时发生此错误,请检查 local.settings.json 文件。 如果将函数部署到Azure时出错,请检查 Functions 应用的应用设置。
清理资源
如果不再需要为本教程创建的Azure资源,可以将其删除。
在 Azure 门户中,打开 Functions 应用或存储帐户资源,然后从顶部菜单栏中选择 Delete。 输入资源名称,然后选择“ 删除”。
在Azure CLI中,运行以下一个或两个命令,将占位符替换为你自己的信息。
az functionapp delete --name <functionapp-name> --resource-group <functionapp-resource-group> az storage account delete --name <storageaccount-name> --resource-group <storageaccount-resource-group>