创建由 Azure Cosmos DB 触发的函数

了解如何在 Azure 门户中创建一个将在 Azure Cosmos DB 中添加或更改数据时触发的函数。 若要了解有关 Azure Cosmos DB 的详细信息,请参阅 Azure Cosmos DB:使用 Azure Functions 的无服务器数据库计算

注意

仅 JavaScript、PowerShell、Python 和 C# 脚本函数支持门户内编辑。 仅当在消耗计划中运行并使用 Python v1 编程模型时,才支持 Python 门户内编辑。
目前,仅支持对在门户中创建或最后修改的函数进行门户内编辑。 从门户外部将代码部署到函数应用时,不能再在门户中编辑该函数应用的任何代码。 在这种情况下,只需继续使用本地开发。 对于已编译的 C# 函数、Java 函数和其他 Python 函数,可在门户中创建函数应用,但还必须在本地创建函数代码项目,然后将其发布到 Azure。

先决条件

完成本教程:

  • 如果没有 Azure 订阅,可在开始前创建一个试用帐户

注意

仅支持将 Azure Cosmos DB 绑定与 Azure Cosmos DB for NoSQL 配合使用。 从扩展 5.x 开始,通过使用表存储绑定来提供对 Azure Cosmos DB for Table 的支持。 对于所有其他的 Azure Cosmos DB API,应使用适用于 API 的静态客户端通过函数来访问数据库。API 包括 Azure Cosmos DB for MongoDBAzure Cosmos DB for CassandraAzure Cosmos DB for Apache Gremlin

登录 Azure

使用 Azure 帐户登录到 Azure 门户

创建 Azure Cosmos DB 帐户

在创建触发器之前,必须已拥有使用 SQL API 的 Azure Cosmos DB 帐户。

  1. 在 Azure 门户菜单或主页中,选择“创建资源” 。

  2. 搜索 Azure Cosmos DB。 选择“创建”>“Azure Cosmos DB”。

  3. 在“创建 Azure Cosmos DB 帐户”页中,输入新 Azure Cosmos DB 帐户的基本设置。

    设置 说明
    订阅 订阅名称 选择要用于此 Azure Cosmos DB 帐户的 Azure 订阅。
    资源组 资源组名称 选择一个资源组,或者选择“新建”,然后输入新资源组的唯一名称。
    帐户名 唯一的名称 输入标识 Azure Cosmos 帐户的名称。 由于 documents.azure.cn 将追加到所提供的名称以创建 URI,因此,请使用唯一的名称。 名称只能包含小写字母、数字和连字符 (-)。 它必须是 3-44 个字符。
    API NoSQL API 确定要创建的帐户的类型。 Azure Cosmos DB 提供五种 API:适用于文档数据库的 NoSQL、适用于图形数据库的 Gremlin、适用于文档数据库的 MongoDB、Azure 表和 Cassandra。 若要详细了解 API for NoSQL,请参阅欢迎使用 Azure Cosmos DB
    位置 离用户最近的区域 选择用于托管 Azure Cosmos DB 帐户的地理位置。 使用离用户最近的位置,使他们能够以最快的速度访问数据。
    容量模式 预配吞吐量或无服务器 选择“预配吞吐量”以在预配吞吐量模式下创建帐户。 选择“无服务器”以在无服务器模式下创建帐户。
    应用 Azure Cosmos DB 免费层折扣 “应用”或“不应用” 如果使用 Azure Cosmos DB 免费层,在帐户中使用的前 1000 RU/s 和 25 GB 存储空间是免费的。 了解免费层的详细信息。
    限制总帐户吞吐量 已选中或未选中 限制可在此帐户上预配的总吞吐量。 此限制可防止与预配吞吐量相关的意外费用。 创建帐户后,可以更新或删除此限制。

    每个 Azure 订阅最多可以有一个免费层 Azure Cosmos DB 帐户,并且你必须在创建帐户时选择加入。 如果看不到用于应用免费层折扣的选项,那么订阅中的另一个帐户已启用免费层。

    Screenshot shows the Create Azure Cosmos DB Account page.

    注意

    如果选择“无服务器”作为“容量模式”,则以下选项不可用 :

    • 应用免费层折扣
    • 限制总帐户吞吐量
  4. 在“全局分发”选项卡中,配置以下详细信息。 在本快速入门中,你可以保留默认值:

    设置 说明
    异地冗余 禁用 通过将你的区域与某个配对区域进行配对来启用或禁用帐户的多区域分发。 稍后可以将更多区域添加到帐户。
    多区域写入 禁用 借助多区域写入功能,可以利用全中国的数据库和容器的预配吞吐量。
    可用性区域 禁用 可用性区域有助于进一步提高应用程序的可用性和复原能力。

    注意

    如果在前面的“基本信息”页中选择“无服务器”作为“容量模式”,则以下选项不可用:

    • 异地冗余
    • 多区域写入
  5. (可选)可以在以下选项卡中配置更多详细信息:

    • 网络。 配置从虚拟网络访问
    • 备份策略。 配置定期连续备份策略。
    • 加密。 使用服务管理的密钥或客户管理的密钥
    • 标记。 标记是名称/值对,可让你通过将相同的标记应用到多个资源和资源组,对资源进行分类并查看合并的账单。
  6. 选择“查看 + 创建”。

  7. 检查帐户设置,然后选择“创建”。 创建帐户需要几分钟时间。 等待门户页显示“你的部署已完成”消息。

    Screenshot shows that your deployment is complete.

  8. 选择“转到资源”,转到 Azure Cosmos DB 帐户页。

    Screenshot shows the Azure Cosmos DB account page.

在 Azure 中创建一个函数应用

  1. 在 Azure 门户菜单上或在门户主页中,选择“创建资源”。

  2. “新建” 页面,选择 “计算”>“函数应用”

  3. 在“基本信息”页面上,按照下列所述使用函数应用设置:

    设置 建议值 描述
    订阅 你的订阅 将在其中创建新函数应用的订阅。
    资源组 myResourceGroup 将在其中创建函数应用的新资源组的名称。 你需要创建新的资源组,因为在现有资源组中创建新函数应用时存在已知限制
    函数应用名称 全局唯一名称 用于标识新 Function App 的名称。 有效字符为 a-z(不区分大小写)、0-9-
    发布 代码 用于发布代码文件或 Docker 容器的选项。
    运行时堆栈 首选语言 选择支持你喜欢的函数编程语言的运行时。 门户中编辑仅适用于 JavaScript、PowerShell、TypeScript 和 C# 脚本。 C# 类库、Java 和 Python 函数必须在本地开发
    版本 版本号 选择已安装的运行时的版本。
    区域 首选区域 选择与你靠近或者与函数可以访问的其他服务靠近的区域
  4. 选择“下一步: 托管”。 在“托管”页面上,输入以下设置:

    设置 建议值 说明
    存储帐户 全局唯一名称 创建函数应用使用的存储帐户。 存储帐户名称必须为 3 到 24 个字符,并且只能包含数字和小写字母。 也可使用现有帐户,但该帐户必须符合存储帐户要求
    操作系统 Windows 系统会根据你的运行时堆栈选择为你预先选择一个操作系统,但你可以根据需要更改该设置。 仅在 Windows 上支持门户内编辑。
    计划 消耗(无服务器) 定义如何将资源分配给 Function App 的托管计划。 在默认的消耗计划中,根据函数需求动态添加资源。 在此无服务器托管中,只需为函数运行时间付费。 按应用服务计划运行时,必须管理函数应用的缩放
  5. 选择“下一步: 监视”。 在“监视”页面上,输入以下设置:

    设置 建议值 说明
    Application Insights 默认 在最近的受支持的区域中,创建一个具有相同应用名称的 Application Insights 资源。 通过展开此设置或选择“新建”,可以更改 Application Insights 名称或在 Azure 地理位置中选择要存储数据的其他区域。
  6. 选择“查看 + 创建”,以便查看应用配置选择。

  7. 在“查看 + 创建”页上查看设置,然后选择“创建”来预配并部署函数应用 。

  8. 选择门户右上角的“通知”图标,留意是否显示了“部署成功”消息。

  9. 选择“转到资源”,查看新的函数应用。 还可选择“固定到仪表板”。 固定可以更轻松地从仪表板返回此函数应用资源。

    Screenshot of deployment notification.

接下来,在新的 Function App 中创建一个函数。

创建 Azure Cosmos DB 触发器

  1. 在函数应用中,选择“概述”,然后在“函数”下选择“+ 创建”。

  2. 在“选择模板”下,向下滚动并选择“Azure Cosmos DB 触发器”模板。

  3. 在“模板详细信息”中,使用此表中指定的设置来配置新触发器,然后选择“创建”

    设置 建议值 说明
    新建函数 接受默认名称 函数的名称。
    Azure Cosmos DB 帐户连接 接受默认的新名称 选择“新建”,选择之前创建的“数据库帐户”,然后选择“确定”。 此操作将为帐户连接创建应用程序设置。 此设置由数据库连接的绑定使用。
    数据库名称 任务 包含要监视的集合的数据库名称。
    集合名称 Items 要监视的集合的名称。
    租约的集合名称 租约 要存储租约的集合的名称。
    不存在租约集合时创建一个 检查是否存在租约集合;如果不存在,则自动创建一个。

    Azure 会基于提供的值创建 Azure Cosmos DB 触发的函数。

  4. 若要显示基于模板的函数代码,请选择“代码 + 测试”。

    Azure Cosmos DB function template in C#

    此函数模板将文档的数量和第一个文档 ID 写入到日志中。

接下来,连接到 Azure Cosmos DB 帐户并在 Tasks 数据库中创建 Items 容器。

创建 Items 容器

  1. 在浏览器的新选项卡中打开 Azure 门户的第二个实例。

  2. 在门户左侧展开图标栏,在搜索字段中键入 cosmos,然后选择“Azure Cosmos DB”。

    Search for the Azure Cosmos DB service

  3. 选择你的 Azure Cosmos DB 帐户,然后选择“数据资源管理器”。

  4. SQL API 下,选择“Tasks”数据库,然后选择“新建容器”。

    Create a container

  5. 在“添加容器”中,使用图像下的表中所示的设置。

    Define the Tasks container

    设置 建议值 说明
    数据库 ID 任务 新数据库的名称。 它必须匹配函数绑定中定义的名称。
    容器 ID Items 新容器的名称。 它必须匹配函数绑定中定义的名称。
    分区键 /category 一个分区键,用于将数据均匀分配到每个分区。 选择正确的分区键对于创建高性能容器而言很重要。
    吞吐量 400 RU 使用默认值。 如果想要减少延迟,以后可以增加吞吐量。
  6. 单击“确定”以创建 Items 容器。 创建该容器可能需要很短的时间。

函数绑定中指定的容器存在后,可以通过向此新容器添加项来测试函数。

测试函数

  1. 在数据资源管理器中展开新的 Items 容器,选择“项”,然后选择“新建项”。

    Create an item in Items container

  2. 将新项的内容替换为以下内容,然后选择“保存”。

    {
        "id": "task1",
        "category": "general",
        "description": "some task"
    }
    
  3. 切换到包含门户中的函数的第一个浏览器选项卡。 展开函数日志并验证新的文档已触发该函数。 会看到 task1 文档 ID 值已写入到日志。

    View message in the logs.

  4. (可选)返回到文档进行更改,然后单击“更新”。 然后,回到函数日志,并验证此更新同样已触发该函数。

清理资源

本教程系列中的其他快速入门教程是在本文的基础上制作的。 如果打算使用后续的快速入门、教程或者在本快速入门中创建的任何服务,请勿清理这些资源。

Azure 中的资源是指函数应用、函数、存储帐户等。 这些资源可以组合到资源组中,删除该组即可删除组中的所有内容。

你已创建完成这些快速入门所需的资源。 这些资源可能需要付费,具体取决于帐户状态服务定价。 如果不再需要这些资源,请参阅下面介绍的资源删除方法:

  1. 在 Azure 门户中转到“资源组”页。

    若要从函数应用页转到该页,请选择“概览”选项卡,然后选择“资源组”下的链接。

    Screenshot that shows select the resource group to delete from the function app page.

    若要从仪表板转到该页,请选择“资源组”,然后选择用于本文的资源组。

  2. 在“资源组”页中查看所包括的资源的列表,然后验证这些资源是否是要删除的。

  3. 选择“删除资源组”,然后按说明操作。

    删除操作可能需要几分钟。 完成后会显示一个通知,持续数秒。 也可以选择页面顶部的钟形图标来查看通知。

后续步骤

你已经创建一个函数,当在 Azure Cosmos DB 中添加或修改文档时会运行此函数。 有关 Azure Cosmos DB 触发器的详细信息,请参阅适用于 Azure Functions 的 Azure Cosmos DB 绑定

现在,你已创建了第一个函数,让我们向该函数添加输出绑定,以便将消息写入存储队列。