使用 Cosmos DB 在 Azure 上创建无服务器 REST API
使用 Cosmos DB 在 Azure 上创建无服务器 REST API
什么是无服务器计算?
您现在可能已经听过“无服务器计算”(或无服务器函数)这个词了——但如果您还没有听过,简单来说,无服务器计算就是将用户从预配、维护和配置服务器的复杂性中解脱出来,让开发人员专注于他们最擅长的事情——编写代码。
Microsoft Azure 提供了自己的无服务器实现,称为 Functions。Functions 只是托管在云中的代码片段,可以由多种事件触发。这些事件可以采取计时器、数据操作事件甚至 HTTP 调用等形式。在下面的示例中,我们将介绍使用 Azure Cosmos DB 作为数据存储来创建简单的 REST API。Cosmos DB(以前称为 Document DB)是 Azure 的 No SQL 数据库实现。
目前,在 Azure 上开始使用是免费的——当您创建新帐户时,每月会获得 150 英镑(200 美元)的积分,用于尝试 Azure 提供的大部分服务。
在 Azure 中创建 Cosmos DB 服务
首先,我们将创建 Cosmos DB 实例。导航到“新建资源”菜单 → 搜索“Azure Cosmos DB”并填写所需的创建设置。以下是我使用的设置。
在此示例中,我选择使用 SQL API 查询数据,但您可以随意选择您熟悉的选项。现在我们需要向数据库添加数据集合,以便查看我们的 REST API 工作。为了本次演示的方便,我创建了一个包含 JSON 格式博客文章的小数据集,您可以 在此处 下载。
向我们的 Cosmos DB 实例添加数据集合
接下来,我们需要下载 Azure Cosmos DB 数据库迁移工具,您可以在以下链接找到它 - https://docs.microsoft.com/en-us/azure/cosmos-db/import-data。打开工具后,在欢迎屏幕上单击“下一步”→ 在源信息屏幕上,将“导入自”下拉菜单保留为“JSON 文件”,然后单击“下一步”。
在目标信息屏幕上,我们需要输入 Cosmos DB 实例的连接字符串,并为我们的 JSON 数据指定一个集合名称。该工具要求连接字符串的格式如下:
AccountEndpoint={CosmosDB Endpoint};AccountKey={CosmosDB Key};Database={CosmosDB Database};
‘AccountEndpoint
’ 和 ‘AccountKey
’ 参数可以从 Azure 获取,方法是导航到我们 Cosmos DB 实例的“设置”部分,然后单击“密钥”选项。
因此,要格式化数据迁移工具使用的连接字符串,只需从 Azure 复制并粘贴“主连接字符串”文本,然后附加“Database={CosmosDB Database};”,将“{CosmosDB Database}”替换为您选择的 Cosmos DB 实例的名称。您可以单击“验证”来确认您已正确配置所有内容。
对于集合字段,我将使用“posts”来反映我们正在处理的数据类型。
分区键字段可以留空,集合吞吐量可以设置为最低值 400(成本最低)。
“Id 字段”部分需要我们 JSON 数据集合的 Id 字段(可以将其视为主键)。在我的示例中,它只是“id”。现在我们可以简单地单击所有窗口,然后单击导入按钮。JSON 数据现在应该已导入到我们的 Cosmos DB 中。
创建 Azure Function App
最后,我们将创建将用作我们 REST API 的 Azure Function。导航回“新建资源”菜单 → 搜索“Function App”并填写所需的创建设置。我建议使用消耗计划进行托管,因为每月有 100 万次免费执行。以下是我使用的设置
现在我们已经创建了 Function App,我们需要创建实际的 REST API 函数。要做到这一点,请转到 Function App 资源 → 点击“Functions”选项旁边的“+”按钮,在下一个窗格中,点击“自定义函数”选项。
您现在将看到许多模板选项 - 选择 C# HTTP 触发器 → 为新函数命名并设置授权级别(在此示例中,我们将使用匿名),然后单击创建。
函数创建后,应该会显示一个窗格,其中包含构成我们 HTTP API 函数的 C# 代码。为了将来自 Cosmos DB 的数据作为参数传递给函数,我们需要添加一个新的“Azure Cosmos DB 输入”。这可以通过在左侧窗格中展开我们的函数并单击“集成”选项来实现。
在显示的新窗口中,单击屏幕顶部的“新建输入”选项,选择 Azure Cosmos DB,并匹配以下屏幕截图中的值。要添加新的帐户连接,请单击“新建”按钮,并记住“数据库名称”字段是我们之前创建的 Azure Cosmos DB 实例的名称。
在点击“保存”按钮之前,请注意将用于过滤我们函数可用数据的 SQL 查询 - 在我们的例子中,它将返回我们“posts”集合中的所有记录。(在这种情况下,“c”是我们 posts 集合的别名)。现在点击保存按钮!
现在是时候编辑函数代码以返回我们的 posts 集合中的所有记录了。要做到这一点,请点击左侧窗格中的函数名称,并按照以下方式修改显示的 C# 代码
using System.Net;
public static async Task<HttpResponseMessage> Run
(HttpRequestMessage req, TraceWriter log, IEnumerable<dynamic> posts)
{
return req.CreateResponse(HttpStatusCode.OK, posts);
}
基本上,这段代码的作用是将我们刚刚配置的输入作为一个动态对象集合进行传递。之所以使用动态类型,是因为我们在运行时执行函数之前不知道 post 对象的架构。请注意,参数的名称与我们之前配置输入的方式相匹配。
接下来,我们可以通过单击“保存并运行”按钮来执行我们的函数,并且假设您已正确配置了所有内容,posts 列表(JSON 格式)应该会出现在“输出”窗口中。
总结
希望这能让您更深入地了解设置 Azure Function 来执行返回数据和在云中执行操作等任务的强大功能,而无需预配或维护服务器硬件。这个例子显然演示了一个相当基本的操作,但在 Azure 上使用 Functions 时,其用例无穷无尽。
在下一篇文章中,我将展示如何向我们的函数添加其他数据操作选项,例如在 Azure Cosmos DB 中添加、删除和更新记录。