快速入门:使用 Azure Functions 响应 Azure SQL 数据库更改

在本快速入门中,你将使用 Visual Studio Code 生成一个应用,以响应 Azure SQL 数据库表中的更改。 在本地测试代码后,将其部署到 Azure Functions 中弹性消耗计划中运行的新无服务器函数应用。

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

重要

本文目前仅在 C#、Python 和 TypeScript 中受支持。 若要完成快速入门,请在文章顶部选择其中一种受支持的语言。

先决条件

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

初始化项目

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

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

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

  3. 出现提示时,搜索并选择 Azure Functions with SQL Triggers and Bindings

  4. 出现提示时,输入唯一的环境名称,例如 sqldbchanges

此命令从 模板存储库 拉取项目文件,并初始化当前文件夹或工作区中的项目。 在 azd 中,环境用于维护应用的唯一部署上下文,你可以定义多个环境。 它也是在 Azure 中创建的资源组的名称的一部分。

此命令从 模板存储库 拉取项目文件,并初始化当前文件夹或工作区中的项目。 在 azd 中,环境用于维护应用的唯一部署上下文,你可以定义多个环境。 它也是在 Azure 中创建的资源组的名称的一部分。

此命令从 模板存储库 拉取项目文件,并初始化当前文件夹或工作区中的项目。 在 azd 中,环境用于维护应用的唯一部署上下文,你可以定义多个环境。 它也是在 Azure 中创建的资源组的名称的一部分。

必须先在 Azure 中创建资源,然后才能在本地运行应用。

创建 Azure 资源

此项目配置为使用 azd provision 命令在 Flex Consumption 计划中创建函数应用,以及遵循当前最佳做法的其他必需 Azure 资源。

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

  2. F1 打开命令面板,搜索并运行命令 Azure Developer CLI (azd): Provision Azure resources (provision) 以创建所需的 Azure 资源。

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

    Prompt Description
    选择要使用的 Azure 订阅 选择要在其中创建资源的订阅。
    位置 部署参数 要在其中创建包含新 Azure 资源的资源组的 Azure 区域。 仅显示当前支持 Flex 消耗计划的区域。
    vnetEnabled 部署参数 虽然模板支持在虚拟网络中创建资源,但为了简化部署和测试,请选择 False

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

  • Flex 消耗计划和函数应用
  • Azure SQL 数据库(默认名称:ToDo)
  • Azure 存储(必需)和 Application Insights(推荐)
  • 帐户的访问策略和角色
  • 使用托管标识(而不是存储的连接字符串)的服务到服务连接

预配后挂钩还会生成本地运行所需的 local.settings.json 文件。 此文件包含连接到 Azure 中的数据库所需的设置。

查看代码(可选)

此示例定义了两个函数:

函数名称 代码文件 触发器类型 Description
httptrigger-sql-output sql_output_http_trigger.cs HTTP 触发器 接受格式正确的 JSON 有效负载,并使用 SQL 输出绑定将对象作为行 ToDo 插入表中。
ToDoTrigger sql_trigger.cs SQL 触发器 ToDo表中监听行级别的更改,并返回一个表示已更改行的对象。

类型 ToDoItemToDoItem.cs中定义。

函数名称 代码文件 触发器类型 Description
http_trigger_sql_output function_app.py HTTP 触发器 接受格式正确的 JSON 有效负载,并使用 SQL 输出绑定将对象作为行 ToDo 插入表中。
httptrigger-sql-output sql_trigger_todo SQL 触发器 ToDo表中监听行级别的更改,并返回一个表示已更改行的对象。

类型 ToDoItemtodo_item.py中定义。

函数名称 代码文件 触发器类型 Description
httpTriggerSqlOutput sql_output_http_trigger.ts HTTP 触发器 接受格式正确的 JSON 有效负载,并使用 SQL 输出绑定将对象作为行 ToDo 插入表中。
sqlTriggerToDo sql_trigger.ts SQL 触发器 ToDo表中监听行级别的更改,并返回一个表示已更改行的对象。

类型 ToDoItemToDoItem.ts中定义。

这两个函数都使用应用级 AZURE_SQL_CONNECTION_STRING_KEY_* 环境变量,这些环境变量使用 Microsoft Entra ID 身份验证定义与 Azure SQL 数据库实例的基于标识的连接。 这些环境变量会在azd provision操作过程中,在 Azure(函数应用设置)和本地(local.settings.json)中为您创建。

连接到 SQL 数据库

可以使用 Visual Studio Code 的 SQL Server (mssql) 扩展连接到新数据库。 此扩展有助于在 ToDo 表中进行更新以运行 SQL 触发器函数。

  1. F1 并在命令面板中搜索并运行命令 MS SQL: Add Connection

  2. “连接”对话框中,将 输入类型 更改为 “浏览 Azure ”,然后设置以下剩余选项:

    选项 Choose Description
    服务器 SQL Server 实例 默认情况下,会显示可供 Azure 帐户访问的所有服务器。 使用 订阅资源组位置 来帮助筛选服务器列表。
    数据库 ToDo 在预配过程中创建的数据库。
    身份验证类型 Microsoft Entra ID 如果尚未登录,请选择“ 登录 ”并登录到 Azure 帐户。
    租户 ID 特定帐户租户。 如果您的帐户有多个租户,请选择与您的订阅相对应的正确租户。
  3. 选择 “连接 ”以连接到数据库。 连接使用本地用户帐户,该帐户在托管服务器中被授予管理员权限,并映射到 dbo 数据库中。

  4. SQL Server 视图中,找到并展开 Connections,然后在 SQL Server 资源管理器中找到并展开您的新服务器。 展开 并验证 ToDo 该表是否存在。 如果不存在,可能需要再次运行 azd provision 并检查错误。

在本地运行函数

Visual Studio Code 与 Azure Functions Core 工具 集成,可在发布到 Azure 中的新函数应用之前在本地开发计算机上运行此项目。

  1. F1 并在命令面板中搜索并运行命令 Azurite: Start

  2. 若要在本地启动函数,请按 F5 或左侧活动栏中的 “运行和调试 ”图标。

    “终端”面板将显示 Core Tools 的输出。 应用在 终端 面板中启动,可以看到在本地运行的函数的名称。

运行应用后,可以验证和调试这两个函数触发器。

用于验证写入 SQL 输出绑定的 HTTP 触发器函数:

  1. 复制此 JSON 对象,您也可以在test.http项目文件中找到它。

     {
      "id": "11111111-1111-1111-1111-111111111111",
      "order": 1,
      "title": "Test Todo Item",
      "url": "https://example.com",
      "completed": false
    }
    

    此数据表示当您调用 HTTP 接口时,在您的 SQL 数据库中插入的一行。 输出绑定将数据对象转换为数据库中的INSERT操作。

  2. 运行应用后,在工作区下的 Azure 视图中展开本地项目>Functions

  3. 右键单击 HTTP 函数(或 Ctrl+单击 macOS), 选择“立即执行”函数,粘贴复制的 JSON 数据,然后按 Enter

    该函数处理 HTTP 请求并将项写入连接的 SQL 数据库,并返回已创建的对象。

  4. 返回 SQL Server 资源管理器,右键单击 ToDo 表(或 Ctrl+单击 macOS),然后选择 “选择前 1000 名”。 执行查询时,它将返回插入的或更新的行。

  5. 重复步骤 3,并使用相同的 ID 重新发送相同的数据对象。 这一次,输出绑定执行UPDATE操作,而不是执行INSERT,并修改数据库中的现有行。

完成后,在终端中键入 Ctrl+C 以停止核心工具进程。

部署到 Azure 云

可以从 Visual Studio Code 运行 azd deploy 命令,将项目代码部署到 Azure 中已预配的资源。

  1. F1 打开命令面板,搜索并运行命令 Azure Developer CLI (azd): Deploy to Azure (deploy)

    命令 azd deploy 将代码打包并部署到部署容器。 然后,应用将启动并在已部署的包中运行。

  2. 命令成功完成后,应用在 Azure 中运行。 记下该值 Endpoint ,该值是 Azure 中运行的函数应用的 URL。

在 Azure 上调用函数

  1. 在 Visual Studio Code 中,按 F1 并在命令面板中搜索并运行命令 Azure: Open in portal,选择 Function app并选择新应用。 如有必要,请使用 Azure 帐户登录。

  2. 在左窗格中选择 “日志流 ”,该流连接到应用的 Application Insights 日志。

  3. 返回到 Visual Studio Code 以在 Azure 中运行这两个函数。

  1. F1 打开命令面板,搜索并运行命令 Azure Functions: Execute Function Now...

  2. 在列表中搜索并选择您的远程函数应用,然后选择 HTTP 触发器函数。

  3. 如前所述,将 JSON 对象数据粘贴到 Enter 有效负载正文 中,然后按 Enter

     {
      "id": "11111111-1111-1111-1111-111111111111",
      "order": 1,
      "title": "Test Todo Item",
      "url": "https://example.com",
      "completed": false
    }
    

    若要执行INSERT而不是执行UPDATE,请将id替换为新的 GUID 值。

  4. 返回到门户并在日志窗口中查看执行输出。

清理资源

使用完函数应用和相关资源后,可以使用此命令从 Azure 中删除函数应用及其相关资源,并避免产生任何进一步的成本:

azd down --no-prompt

注释

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

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