你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:为 Python 函数配置 Azure 表存储输出

在本教程中,将Python函数配置为将Azure 表存储用作输出绑定。 然后,将函数部署到Azure Functions并使用服务连接器将Azure Functions应用与表存储连接。

使用Visual Studio Code完成以下任务:

  • 创建Python函数项目。
  • 添加表存储输出函数绑定。
  • 在本地运行函数。
  • 将函数部署到Azure。
  • 使用服务连接器在Azure Functions应用和表存储之间创建连接。

服务连接器源服务Azure Functions,目标服务Azure 表存储。 函数绑定使用包含存储表的 HTTP 触发器作为输出。 本地和云身份验证类型为连接字符串。

先决条件

创建函数项目

在Visual Studio Code中,使用 HTTP 触发器创建Python函数项目。

  1. F1 打开命令面板,然后搜索并选择命令Azure Functions:创建新Project
  2. 对于“选择将包含函数项目的文件夹”,请选择“浏览”,然后创建一个新文件夹或选择一个空文件夹作为项目工作区。 不要选择已是某个工作区的一部分的项目文件夹。
  3. 对于 选择项目类型,请选择 Python
  4. 对于 选择Python编程模型,请选择 Model V1
  5. 对于 选择Python解释器以创建虚拟环境,请选择 Manually 输入Python解释器或完整路径并输入Python可执行文件的完整路径。
  6. 对于 为项目的第一个函数选择模板,请选择 HTTP 触发器
  7. 对于 提供函数名称,请输入 TableStorageOutputFunc
  8. 对于 授权级别,请选择“ 匿名”。
  9. 若要 选择打开项目的方式,请选择 当前窗口中的“打开”。

有关详细信息,请参阅 创建函数代码并使用 Visual Studio Code 将函数代码部署到Azure。

添加存储表输出绑定

以下过程编辑项目中 的function.jsonlocal.settings.json 文件,为函数创建表输出绑定。

  1. 右键单击函数文件夹中 的function.json 文件,然后从上下文菜单中选择 “添加绑定 ”。
  2. 在命令面板中,对于 “选择绑定方向”,请选择 “退出”。
  3. 对于“选择方向为 "out" 的绑定”,请选择“Azure 表存储”
  4. 对于 用于在代码中标识此绑定的名称,请输入 outMessage
  5. 对于要 写入数据的存储帐户中的表名称,请输入 testTable
  6. 对于“从 "local.settings.json" 中选择包含存储帐户连接字符串的应用设置”,请选择“创建新的本地应用设置”
  7. 对于 选择订阅,请选择 Azure 订阅。
  8. 对于 选择用于开发的存储帐户类型,请选择为远程存储使用Azure 存储
  9. 对于 选择存储帐户,请选择要用于输出的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。

  1. 在项目中 function.json 文件中,将 connection 属性 bindings 的值更改为 AZURE_STORAGETABLE_CONNECTIONSTRING
  2. F1 打开命令面板,然后搜索并选择命令Azure Functions:部署到 Function App
  3. 对于 选择订阅,请选择 Azure 订阅。
  4. 对于 “选择函数应用”,请选择“ 创建新函数应用”。
  5. 对于 选择新资源的位置,请选择Azure Functions应用的Azure区域,最好选择与存储帐户相同的区域。
  6. 对于 输入新函数应用的名称,可以输入与本地函数 TableStorageOutputFunc 相同的名称。
  7. 对于 选择运行时堆栈,请选择 Python 3.10
  8. 对于 “选择资源身份验证类型”,请选择“ 机密”。

Important

使用机密的连接字符串身份验证流需要对应用程序高度信任,并且存在其他流中不存在的风险。 仅在无法使用其他更安全的流(例如托管标识)时才应使用此流。

使用服务连接器创建连接

创建 Functions 应用后,可以使用服务连接器将应用连接到表存储表,以便应用可以轻松地将输出写入存储帐户。 以下命令创建一个服务连接器资源,用于在函数的应用设置中配置 AZURE_STORAGETABLE_CONNECTIONSTRING 变量。

函数绑定机制利用此应用设置来连接到存储账户,从而使函数能够写入存储表。 有关详细信息,请参阅 How Service Connector 可帮助Azure Functions连接到服务

若要创建连接,可以在 Visual Studio Code 中运行以下 Azure CLI 命令,或使用 Azure Cloud Shelllocal 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>