快速入门:使用 Azure Functions 响应 Blob 存储事件

在本快速入门中,你将使用 Visual Studio Code 生成响应 Blob 存储容器中的事件的应用。 使用模拟器在本地测试代码后,将其部署到 Azure Functions 中弹性消耗计划中运行的新无服务器函数应用。

该项目使用 Visual Studio Code 的 Azure 开发人员 CLI (azd) 扩展来简化在本地初始化和验证项目代码,以及将代码部署到 Azure。 此部署遵循安全且可缩放的 Azure Functions 部署的当前最佳做法。

本文支持适用于 Azure Functions 的 Node.js 编程模型版本 4。

本文支持适用于 Azure Functions 的 Python 编程模型版本 2。

先决条件

  • Node.js 18.x 或更高版本。 可以使用 node --version 命令检查你的版本。

初始化项目

azd init使用命令面板中的命令从模板创建本地 Azure Functions 代码项目。

  1. 在 Visual Studio Code 中,打开要在其中创建项目的文件夹或工作区。

  2. F1 打开命令面板,搜索并运行命令 Azure Developer CLI (azd): Initialize App (init),然后选择 “选择模板”。

    初始化当前文件夹或工作区时 azd 可能会稍有延迟。

  1. 出现提示时,选择 “选择模板”,然后搜索并选择 Azure Functions C# Event Grid Blob Trigger using Azure Developer CLI

  2. 在终端中出现提示时,输入唯一的环境名称,例如 blobevents-dotnet

    此命令从 模板存储库 拉取项目文件,并初始化当前文件夹或工作区中的项目。

  1. 出现提示时,选择 “选择模板”,然后搜索并选择 Azure Functions Python Event Grid Blob Trigger using Azure Developer CLI

  2. 在终端中出现提示时,输入唯一的环境名称,例如 blobevents-python

    此命令从 模板存储库 拉取项目文件,并初始化当前文件夹或工作区中的项目。

  1. 出现提示时,选择 “选择模板”,然后搜索并选择 Azure Functions TypeScript Event Grid Blob Trigger using Azure Developer CLI

  2. 出现提示时,输入唯一的环境名称,例如 blobevents-typescript

    此命令从 模板存储库 拉取项目文件,并初始化当前文件夹或工作区中的项目。

  1. 出现提示时,选择 “选择模板”,然后搜索并选择 Azure Functions Java Event Grid Blob Trigger using Azure Developer CLI

  2. 出现提示时,输入唯一的环境名称,例如 blobevents-java

    此命令从 模板存储库 拉取项目文件,并初始化当前文件夹或工作区中的项目。

  1. 出现提示时,选择 “选择模板”,然后搜索并选择 Azure Functions PowerShell Event Grid Blob Trigger using Azure Developer CLI

  2. 出现提示时,输入唯一的环境名称,例如 blobevents-powershell

    此命令从 模板存储库 拉取项目文件,并初始化当前文件夹或工作区中的项目。

azd,环境维护您应用程序的独特部署上下文,并且您可以定义多个。 它也是在 Azure 中创建的资源组的名称的一部分。

设置本地存储模拟器

在创建和使用 Azure 资源之前,使用 Azurite 模拟器在本地运行代码项目。

  1. 如果尚未 安装,请安装 Azurite

  2. F1。 在命令面板中,搜索并运行命令 Azurite: Start 以启动本地存储模拟器。

  3. Azure 区域中,展开 工作区>附加存储帐户>本地模拟器,右键单击(Ctrl 单击 Mac) Blob 容器,选择“ 创建 Blob 容器...”,并在本地模拟器中创建这两个 Blob 存储容器:

    • unprocessed-pdf:触发器监视存储事件的容器。
    • processed-pdf:函数将处理的 Blob 作为输出发送的容器。
  4. 展开 Blob 容器,右键单击 (Ctrl-click on Mac) unprocessed-pdf,选择“ 上传文件...”,按 Enter 接受根目录,然后从 data 项目文件夹上传 PDF 文件。

在本地运行时,可以使用 REST 通过模拟从事件订阅接收消息的函数来触发函数。

在本地运行函数

Visual Studio Code 与 Azure Functions Core 工具 集成,使你能够使用 Azurite 模拟器在本地开发计算机上运行此项目。 环境变量 PDFProcessorSTORAGE 定义存储帐户连接,该连接也设置为 "UseDevelopmentStorage=true" 在本地运行时 local.settings.json 文件中。

  1. src 终端或命令提示符中的项目文件夹运行以下命令:

    func start
    
    mvn clean package
    mvn azure-functions:run
    
    npm install
    func start  
    
    npm install
    npm start  
    

    当 Functions 主机启动时,它会将触发器的名称和触发器类型写入终端输出。 在 Functions 中,项目根文件夹包含 host.json 文件。

  2. 如果 Core Tools 仍在Terminal中运行,打开项目中的test.http文件,然后选择发送请求以通过向 Blob 事件 Webhook 发送测试 Blob 事件来触发ProcessBlobUpload函数。

    在进行本地运行时,此步骤模拟从事件订阅接收事件,您应能在日志中看到请求和处理文件信息的记录。 如果不使用 REST 客户端,则必须使用另一个安全 REST 工具调用包含有效负载 test.http的终结点。

  3. 在 Blob 容器的工作区区域中,展开 已处理的 PDF 并验证函数是否处理了 PDF 文件,并用 processed- 前缀复制了它。

  4. 完成后,在终端窗口中按 Ctrl+C 停止 func.exe 主机进程。

查看代码(可选)

可以查看在 ProcessBlobUpload.cs项目文件中定义事件网格 blob 触发器的代码。 该函数演示如何:

  • BlobTriggerSource = BlobTriggerSource.EventGrid一起用于近实时处理
  • 绑定到 BlobClient 源 Blob 和 BlobContainerClient 目标 Blob
  • 处理 Blob 内容并使用流将其复制到另一个容器

可以查看定义 Event Grid Blob 触发器的代码,该代码位于 function_app.py 项目文件 中。 该函数演示如何:

  • @app.blob_triggersource="EventGrid"一起用于近实时处理
  • 使用 InputStream 参数访问 Blob 内容
  • 使用 Azure 存储 SDK 将处理的文件复制到目标容器

您可以在项目文件processBlobUpload.ts中查看定义事件网格 blob 触发器的代码。 该函数演示如何:

  • app.storageBlob()source: 'EventGrid'一起用于近实时处理
  • 使用 Node.js Azure 存储 SDK 访问 Blob 内容
  • 异步处理文件并将其复制到目标容器

你可以查看定义事件网格 Blob 触发器的代码,这些代码在 ProcessBlobUpload.java 项目文件中。 该函数演示如何:

  • @BlobTriggersource = "EventGrid"一起用于近实时处理
  • 使用 BlobInputStream 参数访问 Blob 内容
  • 使用用于 Java 的 Azure 存储 SDK 将已处理的文件复制到目标容器

可以查看在 ProcessBlobUpload/run.ps1 项目文件及相应的 function.json 中定义的事件网格 blob 触发器代码。 该函数演示如何:

  • 在 function.json 中配置 "source": "EventGrid" blob 触发器,以便进行准实时处理
  • 使用 PowerShell Azure 存储 cmdlet 访问 Blob 内容
  • 使用 Azure PowerShell 模块处理文件并将其复制到目标容器

在本地查看并验证函数代码后,即可将项目发布到 Azure。

创建 Azure 资源和部署

使用 azd up 命令在 Flex Consumption 计划中创建函数应用以及其他所需的 Azure 资源,包括事件订阅。 基础结构准备就绪后, azd 还将项目代码部署到 Azure 中的新函数应用。

  1. 在 Visual Studio Code 中,按 F1 打开命令面板。 搜索并运行命令 Azure Developer CLI (azd): Sign In with Azure Developer CLI,然后使用 Azure 帐户登录。

  2. 在项目根目录中,按 F1 打开命令面板。 搜索并运行命令 Azure Developer CLI (azd): Provision and Deploy (up) 以创建所需的 Azure 资源并部署代码。

  3. 在终端窗口中出现提示时,请提供以下所需的部署参数:

    Prompt Description
    选择要使用的 Azure 订阅 选择要在其中创建资源的订阅。
    环境名称 用于维护应用的唯一部署上下文的环境。
    Azure 位置 要在其中创建包含新 Azure 资源的资源组的 Azure 区域。 仅显示当前支持 Flex 消耗计划的区域。

    azd up 命令使用 Bicep 配置文件对这些提示的响应来创建和配置这些所需的 Azure 资源,遵循最新的最佳做法:

    • Flex 消耗计划和函数应用
    • 包含 Blob 容器的 Azure 存储帐户
    • Application Insights (建议)
    • 帐户的访问策略和角色
    • 事件网格对于 Blob 事件的订阅
    • 使用托管标识(而不是存储的连接字符串)进行服务到服务连接

    命令成功完成后,应用在 Azure 中运行,其中事件订阅配置为在将 Blob 添加到 unprocessed-pdf 容器时触发函数。

  4. 记下输出中的 AZURE_STORAGE_ACCOUNT_NAMEAZURE_FUNCTION_APP_NAME。 这些名称分别适用于 Azure 中的存储帐户和函数应用。

验证已部署的函数

  1. 在 Visual Studio Code 中,按 F1。 在命令面板中,搜索并运行命令 Azure Storage: Upload Files...。 像以前一样,接受根目录,从 data 项目文件夹中上传一个或多个 PDF 文件。

  2. 当出现提示时,从 AZURE_STORAGE_ACCOUNT_NAME 选择新存储帐户的名称。 选择 Blob 容器>未处理PDF

  3. F1。 在命令面板中,搜索并运行命令 Azure Storage: Open in Explorer。 选择同一存储帐户 >Blob 容器>已处理的 pdf,然后在 新窗口中打开

  4. 在文件资源管理器中,确认你上传的 PDF 文件是否已通过函数处理。 输出将写入具有processed-pdf前缀的processed-容器。

事件网格 Blob 触发器在上传后的几秒钟内处理文件。 与传统的基于轮询的 Blob 触发器相比,此速度演示了此方法的近实时功能。

重新部署代码

azd up根据需要多次运行命令,以便预配 Azure 资源并将代码更新部署到函数应用。

注释

已部署的代码文件始终被最新的部署包覆盖。

azd 提示的初始响应和 azd 生成的任何环境变量都本地存储在你的命名环境中。 使用 azd env get-values 命令查看创建 Azure 资源时使用的环境中的所有变量。

清理资源

使用完函数应用和相关资源后,使用此命令从 Azure 中删除函数应用及其相关资源。 此操作有助于避免产生其他费用。

azd down --no-prompt

注释

--no-prompt 选项指示 azd 在未经你确认的情况下删除资源组。

此命令不会影响本地代码项目。