使用 Azure Functions 和 Azure Cosmos DB 存储非结构化数据

Azure Cosmos DB 是存储非结构化数据和 JSON 数据的良好方式。 将 Azure Cosmos DB 与 Azure Functions 结合使用,可以快速、轻松地存储数据,并且所需的代码也比在关系数据库中存储数据时所需的代码少得多。

注意

此时,Azure Cosmos DB 触发器、输入绑定和输出绑定仅可与 SQL API 和图形 API 帐户一起使用。

在 Azure Functions 中,输入和输出绑定提供从函数连接到外部服务数据的声明性方式。 本文介绍了如何更新现有的函数,以便添加输出绑定,在 Azure Cosmos DB 文档中存储非结构化数据。

先决条件

完成本教程:

本主题以在从 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.

添加输出绑定

  1. 在 Azure 门户中,导航到之前创建的函数应用并选择它。

  2. 选择“函数”,然后选择 HttpTrigger 函数。

    Select your Http function in the Azure portal.

  3. 选择“集成”和“+ 添加输出”。

    Add an Azure Cosmos DB output binding.

  4. 根据表中的指定使用“创建输出”设置:

    Configure Azure Cosmos DB output binding.

    设置 建议值 说明
    绑定类型 Azure Cosmos DB 要选择的绑定类型的名称,用于创建到 Azure Cosmos DB 的输出绑定。
    文档参数名称 taskDocument 引用代码中的 Azure Cosmos DB 对象的名称。
    数据库名称 taskDatabase 用于保存文档的数据库的名称。
    集合名称 taskCollection 数据库集合的名称。
    如果为 true,则创建 Azure Cosmos DB 数据库和集合 集合不存在,因此创建集合。
    Azure Cosmos DB 帐户连接 新设置 选择“新建”,然后选择前面创建的 Azure Cosmos DB 帐户和数据库帐户,然后选择“确定”。 为帐户连接创建应用程序设置。 此设置由数据库连接的绑定使用。
  5. 选择“确定”以创建绑定。

更新函数代码

根据你选择的语言将现有函数代码替换为以下代码:

将现有 C# 函数替换为以下代码:

#r "Newtonsoft.Json"

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;

public static IActionResult Run(HttpRequest req, out object taskDocument, ILogger log)
{
    string name = req.Query["name"];
    string task = req.Query["task"];
    string duedate = req.Query["duedate"];

    // We need both name and task parameters.
    if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(task))
    {
        taskDocument = new
        {
            name,
            duedate,
            task
        };

        return (ActionResult)new OkResult();
    }
    else
    {
        taskDocument = null;
        return (ActionResult)new BadRequestResult();
    }
}

此代码示例读取 HTTP 请求查询字符串,并将其分配到 taskDocument 对象中的字段。 taskDocument 绑定从此绑定参数发送对象数据,该参数将存储在已绑定文档数据库中。 该数据库在首次运行函数时创建。

测试函数和数据库

  1. 选择“测试/运行”。 在“查询”下选择“+ 添加参数”,然后将以下参数添加到查询字符串:

    • name
    • task
    • duedate

    Test the function.

  2. 选择“运行”并验证是否返回了 200 状态。

    Screenshot shows the HTTP response code 200 status highlighted after selecting Run.

  3. 在 Azure 门户中,搜索并选择“Azure Cosmos DB”。

    Search for the Azure Cosmos DB service.

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

  5. 展开“TaskCollection”节点,选择新的文档,确认该文档包含查询字符串值以及一些其他的元数据。

    Verify the string values in your document.

你已成功地将绑定添加到 HTTP 触发器,用以在 Azure Cosmos DB 实例中存储非结构化数据。

清理资源

在前面的步骤中,你在资源组中创建了 Azure 资源。 如果将来不再需要这些资源,可以通过删除资源组来删除它们。

从 Azure 门户菜单或“主页”页上,选择“资源组” 。 然后,在“资源组”页上,选择“myResourceGroup” 。

在“myResourceGroup”页中,确保列出的资源是要删除的资源。

选择“删除资源组” ,在文本框中键入“myResourceGroup” 以确认,然后选择“删除” 。

后续步骤

若要详细了解如何绑定到 Azure Cosmos DB 实例,请参阅 Azure Functions Azure Cosmos DB 绑定