你当前正在访问 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 建议使用最安全的可用身份验证流。 本过程中介绍的身份验证流程需要非常高的信任度,并携带其他流中不存在的风险。 请仅在无法使用其他更安全的流(例如托管标识)时才使用此流。
先决条件
- 在某一受支持的平台上安装 Visual Studio Code。
- Azure CLI。 可以在 Azure Cloud Shell 中使用它,或者在本地安装它。
- Azure 存储帐户和存储 blob。 如果没有 Azure 存储帐户,请创建一个帐户。
- 本指南假设你了解 Functions 开发人员指南以及如何连接到 Functions 中的服务中所述的概念。
创建 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 将检索其用于本地项目连接的连接字符串。 |
若要检查是否已成功添加绑定,请执行以下操作:
- 打开
BlobStorageInputFunc/function.json
文件,检查是否已在此文件中添加包含type: blob
和direction: in
的新绑定。 - 打开
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 输入。
- 如果系统提示你连接到存储,请选择你在创建 Azure 函数资源时使用的存储帐户。 它供 Azure 函数运行时内部使用,不一定与你用于输入的相同。
- 若要在本地启动函数,请按
<kbd>
F5</kbd>
,或选择左侧“活动”栏中的“运行并调试”图标。 - 若要验证该函数是否可以读取该 blob,请在 Visual Studio Code WORKSPACE 中右键单击该函数的
Execute Function Now...
,然后检查函数响应。 响应消息应包含 blob 文件中的内容。
使用服务连接器创建连接
你刚刚在本地运行了该项目并验证了该函数,本地项目使用连接字符串连接到存储 blob。
现在,你将了解如何配置 Azure 函数和 Azure Blob 存储之间的连接,以便函数在部署到云后可以读取 blob。 在云环境中,我们演示了如何使用系统分配的托管标识进行身份验证。
- 在本地项目中打开
function.json
文件,将bindings
中connection
属性的值更改为MyBlobInputConnection
。 - 运行以下 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 输入绑定是否正常工作。
- 按照教程将函数部署到 Azure。
- 若要验证该函数是否可以读取该 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
”这一步失败)时发生此错误,请检查函数的“应用设置”。
清理资源
如果你不打算继续使用此项目,请删除之前创建的函数应用资源。
后续步骤
阅读以下文章,详细了解服务连接器的概念以及它如何帮助 Azure Functions 连接到其他云服务。