在本快速入门中,你将使用 Visual Studio Code 生成响应 Blob 存储容器中的事件的应用。 使用模拟器在本地测试代码后,将其部署到 Azure Functions 中弹性消耗计划中运行的新无服务器函数应用。
该项目使用 Visual Studio Code 的 Azure 开发人员 CLI (azd) 扩展来简化在本地初始化和验证项目代码,以及将代码部署到 Azure。 此部署遵循安全且可缩放的 Azure Functions 部署的当前最佳做法。
本文支持适用于 Azure Functions 的 Node.js 编程模型版本 4。
本文支持适用于 Azure Functions 的 Python 编程模型版本 2。
先决条件
拥有有效订阅的 Azure 帐户。 创建账户。
在某个受支持的平台上运行Visual Studio Code。
用于 Visual Studio Code 的 Azure Functions 扩展 。 此扩展需要 Azure Functions Core Tools。 当此工具在本地不可用时,扩展会尝试使用基于包的安装程序进行安装。 还可以通过从命令面板运行
Azure Functions: Install or Update Azure Functions Core Tools来安装或更新 Core Tools 包。 如果未在本地计算机上安装 npm 或 Homebrew,则必须改为手动安装或更新 Core Tools。
Visual Studio Code 的 C# 扩展。
Java 开发工具包版本 8、11、17 或 21 (Linux)。
Apache Maven 版本 3.0 或更高版本。
-
Node.js 18.x 或更高版本。 可以使用
node --version命令检查你的版本。
Azure Functions 支持的 Python 版本。 有关详细信息,请参阅 如何安装 Python。
Visual Studio Code 的 Python 扩展 。
- 适用于 Visual Studio Code 的 Azure 开发人员 CLI 扩展 。
REST 客户端扩展 或用于安全执行 HTTP 请求的等效 REST 工具。
初始化项目
azd init使用命令面板中的命令从模板创建本地 Azure Functions 代码项目。
在 Visual Studio Code 中,打开要在其中创建项目的文件夹或工作区。
按 F1 打开命令面板,搜索并运行命令
Azure Developer CLI (azd): Initialize App (init),然后选择 “选择模板”。初始化当前文件夹或工作区时
azd可能会稍有延迟。
出现提示时,选择 “选择模板”,然后搜索并选择
Azure Functions C# Event Grid Blob Trigger using Azure Developer CLI。在终端中出现提示时,输入唯一的环境名称,例如
blobevents-dotnet。此命令从 模板存储库 拉取项目文件,并初始化当前文件夹或工作区中的项目。
出现提示时,选择 “选择模板”,然后搜索并选择
Azure Functions Python Event Grid Blob Trigger using Azure Developer CLI。在终端中出现提示时,输入唯一的环境名称,例如
blobevents-python。此命令从 模板存储库 拉取项目文件,并初始化当前文件夹或工作区中的项目。
出现提示时,选择 “选择模板”,然后搜索并选择
Azure Functions TypeScript Event Grid Blob Trigger using Azure Developer CLI。出现提示时,输入唯一的环境名称,例如
blobevents-typescript。此命令从 模板存储库 拉取项目文件,并初始化当前文件夹或工作区中的项目。
出现提示时,选择 “选择模板”,然后搜索并选择
Azure Functions Java Event Grid Blob Trigger using Azure Developer CLI。出现提示时,输入唯一的环境名称,例如
blobevents-java。此命令从 模板存储库 拉取项目文件,并初始化当前文件夹或工作区中的项目。
出现提示时,选择 “选择模板”,然后搜索并选择
Azure Functions PowerShell Event Grid Blob Trigger using Azure Developer CLI。出现提示时,输入唯一的环境名称,例如
blobevents-powershell。此命令从 模板存储库 拉取项目文件,并初始化当前文件夹或工作区中的项目。
在 azd,环境维护您应用程序的独特部署上下文,并且您可以定义多个。 它也是在 Azure 中创建的资源组的名称的一部分。
设置本地存储模拟器
在创建和使用 Azure 资源之前,使用 Azurite 模拟器在本地运行代码项目。
如果尚未 安装,请安装 Azurite。
按 F1。 在命令面板中,搜索并运行命令
Azurite: Start以启动本地存储模拟器。在 Azure 区域中,展开 工作区>附加存储帐户>本地模拟器,右键单击(Ctrl 单击 Mac) Blob 容器,选择“ 创建 Blob 容器...”,并在本地模拟器中创建这两个 Blob 存储容器:
-
unprocessed-pdf:触发器监视存储事件的容器。 -
processed-pdf:函数将处理的 Blob 作为输出发送的容器。
-
展开 Blob 容器,右键单击 (Ctrl-click on Mac) unprocessed-pdf,选择“ 上传文件...”,按 Enter 接受根目录,然后从
data项目文件夹上传 PDF 文件。
在本地运行时,可以使用 REST 通过模拟从事件订阅接收消息的函数来触发函数。
在本地运行函数
Visual Studio Code 与 Azure Functions Core 工具 集成,使你能够使用 Azurite 模拟器在本地开发计算机上运行此项目。 环境变量 PDFProcessorSTORAGE 定义存储帐户连接,该连接也设置为 "UseDevelopmentStorage=true" 在本地运行时 local.settings.json 文件中。
从
src终端或命令提示符中的项目文件夹运行以下命令:func startmvn clean package mvn azure-functions:runnpm install func startnpm install npm start当 Functions 主机启动时,它会将触发器的名称和触发器类型写入终端输出。 在 Functions 中,项目根文件夹包含 host.json 文件。
如果 Core Tools 仍在Terminal中运行,打开项目中的
test.http文件,然后选择发送请求以通过向 Blob 事件 Webhook 发送测试 Blob 事件来触发ProcessBlobUpload函数。在进行本地运行时,此步骤模拟从事件订阅接收事件,您应能在日志中看到请求和处理文件信息的记录。 如果不使用 REST 客户端,则必须使用另一个安全 REST 工具调用包含有效负载
test.http的终结点。在 Blob 容器的工作区区域中,展开 已处理的 PDF 并验证函数是否处理了 PDF 文件,并用
processed-前缀复制了它。完成后,在终端窗口中按 Ctrl+C 停止
func.exe主机进程。
查看代码(可选)
可以查看在 ProcessBlobUpload.cs项目文件中定义事件网格 blob 触发器的代码。 该函数演示如何:
- 将
BlobTrigger与Source = BlobTriggerSource.EventGrid一起用于近实时处理 - 绑定到
BlobClient源 Blob 和BlobContainerClient目标 Blob - 处理 Blob 内容并使用流将其复制到另一个容器
可以查看定义 Event Grid Blob 触发器的代码,该代码位于 function_app.py 项目文件 中。 该函数演示如何:
- 将
@app.blob_trigger与source="EventGrid"一起用于近实时处理 - 使用
InputStream参数访问 Blob 内容 - 使用 Azure 存储 SDK 将处理的文件复制到目标容器
您可以在项目文件processBlobUpload.ts中查看定义事件网格 blob 触发器的代码。 该函数演示如何:
- 将
app.storageBlob()与source: 'EventGrid'一起用于近实时处理 - 使用 Node.js Azure 存储 SDK 访问 Blob 内容
- 异步处理文件并将其复制到目标容器
你可以查看定义事件网格 Blob 触发器的代码,这些代码在 ProcessBlobUpload.java 项目文件中。 该函数演示如何:
- 将
@BlobTrigger与source = "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 中的新函数应用。
在 Visual Studio Code 中,按 F1 打开命令面板。 搜索并运行命令
Azure Developer CLI (azd): Sign In with Azure Developer CLI,然后使用 Azure 帐户登录。在项目根目录中,按 F1 打开命令面板。 搜索并运行命令
Azure Developer CLI (azd): Provision and Deploy (up)以创建所需的 Azure 资源并部署代码。在终端窗口中出现提示时,请提供以下所需的部署参数:
Prompt Description 选择要使用的 Azure 订阅 选择要在其中创建资源的订阅。 环境名称 用于维护应用的唯一部署上下文的环境。 Azure 位置 要在其中创建包含新 Azure 资源的资源组的 Azure 区域。 仅显示当前支持 Flex 消耗计划的区域。 该
azd up命令使用 Bicep 配置文件对这些提示的响应来创建和配置这些所需的 Azure 资源,遵循最新的最佳做法:- Flex 消耗计划和函数应用
- 包含 Blob 容器的 Azure 存储帐户
- Application Insights (建议)
- 帐户的访问策略和角色
- 事件网格对于 Blob 事件的订阅
- 使用托管标识(而不是存储的连接字符串)进行服务到服务连接
命令成功完成后,应用在 Azure 中运行,其中事件订阅配置为在将 Blob 添加到
unprocessed-pdf容器时触发函数。记下输出中的
AZURE_STORAGE_ACCOUNT_NAME和AZURE_FUNCTION_APP_NAME。 这些名称分别适用于 Azure 中的存储帐户和函数应用。
验证已部署的函数
在 Visual Studio Code 中,按 F1。 在命令面板中,搜索并运行命令
Azure Storage: Upload Files...。 像以前一样,接受根目录,从data项目文件夹中上传一个或多个 PDF 文件。当出现提示时,从
AZURE_STORAGE_ACCOUNT_NAME选择新存储帐户的名称。 选择 Blob 容器>未处理PDF。按 F1。 在命令面板中,搜索并运行命令
Azure Storage: Open in Explorer。 选择同一存储帐户 >Blob 容器>已处理的 pdf,然后在 新窗口中打开。在文件资源管理器中,确认你上传的 PDF 文件是否已通过函数处理。 输出将写入具有
processed-pdf前缀的processed-容器。
事件网格 Blob 触发器在上传后的几秒钟内处理文件。 与传统的基于轮询的 Blob 触发器相比,此速度演示了此方法的近实时功能。
重新部署代码
azd up根据需要多次运行命令,以便预配 Azure 资源并将代码更新部署到函数应用。
注释
已部署的代码文件始终被最新的部署包覆盖。
对 azd 提示的初始响应和 azd 生成的任何环境变量都本地存储在你的命名环境中。 使用 azd env get-values 命令查看创建 Azure 资源时使用的环境中的所有变量。
清理资源
使用完函数应用和相关资源后,使用此命令从 Azure 中删除函数应用及其相关资源。 此操作有助于避免产生其他费用。
azd down --no-prompt
注释
--no-prompt 选项指示 azd 在未经你确认的情况下删除资源组。
此命令不会影响本地代码项目。