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

教程:将 Azure Blob 存储用作输入的 Python 函数

在本教程中,你将了解如何通过完成以下任务来配置将 Azure Blob 存储用作输入的 Python 函数:

  • 使用 Visual Studio Code 创建 Python 函数项目。
  • 更改代码以添加存储 blob 输入函数绑定。
  • 使用 Visual Studio Code 在本地运行函数。
  • 使用 Azure CLI 通过服务连接器在 Azure 函数和存储 Blob 之间创建连接。
  • 使用 Visual Studio 部署函数。

本教程中函数项目组件的概述:

项目组件 选择/解决方案
源服务 Azure 函数
目标服务 Azure 存储 Blob
函数绑定 HTTP 触发器,存储 Blob 用作输入
本地项目身份验证类型 连接字符串
云函数身份验证类型 系统分配的托管标识

警告

Microsoft 建议使用最安全的可用身份验证流。 本过程中介绍的身份验证流程需要非常高的信任度,并携带其他流中不存在的风险。 请仅在无法使用其他更安全的流(例如托管标识)时才使用此流。

先决条件

创建 Python 函数项目

按照有关创建本地 Azure Functions 项目的教程操作,并在提示处提供以下信息:

Prompt 选择
选择一种语言 选择 Python。 (v1 编程语言模型)
选择 Python 解释器来创建虚拟环境 选择首选 Python 解释器。 如果某个选项未显示,请键入 Python 二进制文件的完整路径。
为项目的第一个函数选择模板 选择 HTTP trigger
提供函数名称 输入 BlobStorageInputFunc
授权级别 选择 Anonymous,这将允许任何人调用你的函数终结点。 

你已创建一个带有 HTTP 触发器的 Python 函数项目。

添加 Blob 存储输入绑定

绑定属性是在给定函数的 function.json 文件中定义的。 若要创建绑定,请右键单击(在 macOS 上,请按住 Ctrl 并单击)function 文件夹中的 function.json 文件,然后选择“添加绑定...”。 请按照提示为新绑定定义以下绑定属性:

Prompt 说明
选择绑定方向 in 该绑定是输入绑定。
选择具有方向的绑定... Azure Blob Storage 该绑定是 Azure 存储 blob 绑定。
用于在代码中标识此绑定的名称 inputBlob 用于标识代码中引用的绑定参数的名称。
将从中读取 blob 的存储帐户中的路径 testcontainer/test.txt 函数将其读取为输入的 blob 路径。 准备一个名为 test.txt 的文件,文件内容为 Hello, World!。 创建名为 testcontainer 的容器,然后将文件上传到该容器中。
从 local.setting.json 中选择设置 Create new local app settings 选择函数将其读取为输入的存储帐户。 Visual Studio Code 将检索其用于本地项目连接的连接字符串。

若要检查是否已成功添加绑定,请执行以下操作:

  1. 打开 BlobStorageInputFunc/function.json 文件,检查是否已在此文件中添加包含 type: blobdirection: in 的新绑定。
  2. 打开 local.settings.json 文件,检查是否已在此文件中添加包含存储帐户连接字符串的新键值对 <your-storage-account-name>_STORAGE: <your-storage-account-connection-string>

添加绑定后,将 BlobStorageInputFunc/__init__.py 替换为此处的 Python 文件,以将函数代码更新为使用该绑定。

import logging
import azure.functions as func

def main(req: func.HttpRequest, inputBlob: bytes) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')
    return func.HttpResponse('The triggered function executed successfully. And read blob content: {}'.format(inputBlob))

在本地运行函数

按照教程在本地运行函数并验证 blob 输入。

  1. 如果系统提示你连接到存储,请选择你在创建 Azure 函数资源时使用的存储帐户。 它供 Azure 函数运行时内部使用,不一定与你用于输入的相同。
  2. 若要在本地启动函数,请按 <kbd>F5 </kbd>,或选择左侧“活动”栏中的“运行并调试”图标。
  3. 若要验证该函数是否可以读取该 blob,请在 Visual Studio Code WORKSPACE 中右键单击该函数的 Execute Function Now...,然后检查函数响应。 响应消息应包含 blob 文件中的内容。

使用服务连接器创建连接

你刚刚在本地运行了该项目并验证了该函数,本地项目使用连接字符串连接到存储 blob。

现在,你将了解如何配置 Azure 函数和 Azure Blob 存储之间的连接,以便函数在部署到云后可以读取 blob。 在云环境中,我们演示了如何使用系统分配的托管标识进行身份验证。

  1. 在本地项目中打开 function.json 文件,将 bindingsconnection 属性的值更改为 MyBlobInputConnection
  2. 运行以下 Azure CLI 命令,以便在 Azure 函数与 Azure 存储之间创建连接。
az functionapp connection create storage-blob --source-id "<your-function-resource-id>" --target-id "<your-storage-blob-resource-id>" --system-identity --customized-keys AZURE_STORAGEBLOB_RESOURCEENDPOINT=MyBlobInputConnection__serviceUri
  • --source-id 格式:/subscriptions/{subscription}/resourceGroups/{source_resource_group}/providers/Microsoft.Web/sites/{site}
  • --target-id 格式:/subscriptions/{subscription}/resourceGroups/{target_resource_group}/providers/Microsoft.Storage/storageAccounts/{account}/blobServices/default

你已使用服务连接器和系统分配的托管标识在 Azure 函数和 Azure Blob 存储之间创建了连接。

服务连接器在函数的应用设置中配置了一个 MyBlobInputConnection__serviceUri 变量,函数绑定运行时使用该变量连接到存储,以便函数可以从 blob 存储读取数据。 你可以更详细地了解服务连接器如何帮助 Azure Functions 连接到服务

将函数部署到 Azure

现在可以将函数部署到 Azure,并验证存储 blob 输入绑定是否正常工作。

  1. 按照教程将函数部署到 Azure。
  2. 若要验证该函数是否可以读取该 blob,请在 Visual Studio Code RESOURCES 视图中右键单击该函数的 Execute Function Now...,然后检查函数响应。 响应消息应包含 blob 文件中的内容。

疑难解答

如果发生与存储主机相关的任何错误(如 No such host is known (<account-name>.blob.core.windows.net:443)),则需要检查用于连接到 Azure 存储的连接字符串是否包含 blob 终结点。 如果不包含,请转到 Azure 门户中的 Azure 存储,从 Access keys 边栏选项卡中复制连接字符串,并替换值。

如果在本地启动项目时发生此错误,请检查 local.settings.json 文件。

如果在将函数部署到云(在这种情况下,函数部署通常会在“Syncing triggers”这一步失败)时发生此错误,请检查函数的“应用设置”。

清理资源

如果你不打算继续使用此项目,请删除之前创建的函数应用资源。

  1. 在 Azure 门户中,打开函数应用资源并选择“删除”。
  2. 输入应用名称,然后选择“删除”进行确认。

后续步骤

阅读以下文章,详细了解服务连接器的概念以及它如何帮助 Azure Functions 连接到其他云服务。