如何从 Azure 函数连接到 MongoDB 的 Azure Cosmos DB
How to connect to an Azure CosmoDB for MongoDB from an Azure Function
我开始使用 Azure Functions 和 Cosmo DB。
我在 Azure 门户中创建了一个函数应用程序,然后我按照指南开始使用 VS Code:
npm install -g azure-functions-core-tools@4 --unsafe-perm true
Then New Project
Then New function, selected the HTTP trigger template
运行宁 F5 和部署时,它工作。
然后我在门户中创建了一个“Azure Cosmos DB API for MongoDB”数据库。当我的方法被调用时,我按照这个发布了一个文档:
所以我目前的结果是:
一个函数:
namespace TakeANumber
{
public static class TestFunc
{
[FunctionName("TestFunc")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
[CosmosDB(databaseName: "cosmodb-take-a-number", collectionName: "take-a-number", ConnectionStringSetting = "cosmoDbConnectionString")] IAsyncCollector<dynamic> documentsOut,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
string responseMessage = string.IsNullOrEmpty(name)
? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
: $"Hello, {name}. This HTTP triggered function executed successfully.";
if (!string.IsNullOrEmpty(name))
{
// Add a JSON document to the output container.
await documentsOut.AddAsync(new
{
// create a random ID
id = System.Guid.NewGuid().ToString(),
name = name
});
}
return new OkObjectResult(responseMessage);
}
}
}
一个 local.settings.json 文件,其 cosmoDbConnectionString 设置包含 mongo 数据库连接字符串。
当我 运行 函数时,我得到这个:
[2022-04-21T17:40:34.078Z] Executed 'TestFunc' (Failed, Id=b69a625c-9055-48bd-a5fb-d3c3b3a6fb9b, Duration=4ms)
[2022-04-21T17:40:34.079Z] System.Private.CoreLib: Exception while executing function: TestFunc. Microsoft.Azure.WebJobs.Host: Exception binding parameter 'documentsOut'. Microsoft.Azure.DocumentDB.Core: Value cannot be null. (Parameter 'authKeyOrResourceToken | secureAuthKey').
我的猜测是它需要一个具有另一种访问令牌的核心 SQL 数据库。
我的问题:
是否可以从 Azure 函数连接到 MongoDB 的 azure CosmoDB?
如果您使用 out-of-the-box 绑定,则只能使用 Cosmos DB 的 SQL API.
您完全可以使用 MongoDB API,但您必须安装 MongoDB 客户端 SDK 并以编程方式处理您的数据(就像您使用任何其他 code-oriented 方法)。
由于您的示例代码正在接收数据并将其写入 Cosmos DB,因此您将通过 MongoDB 的 node/c#/python/etc 驱动程序进行写入(我相信他们仍然称他们为 drivers),这实际上给了你一个 db.collection.insert( {} )
或更复杂的东西。
有关 Cosmos DB 绑定的更多信息here。
我开始使用 Azure Functions 和 Cosmo DB。 我在 Azure 门户中创建了一个函数应用程序,然后我按照指南开始使用 VS Code:
npm install -g azure-functions-core-tools@4 --unsafe-perm true
Then New Project
Then New function, selected the HTTP trigger template
运行宁 F5 和部署时,它工作。
然后我在门户中创建了一个“Azure Cosmos DB API for MongoDB”数据库。当我的方法被调用时,我按照这个发布了一个文档:
所以我目前的结果是: 一个函数:
namespace TakeANumber
{
public static class TestFunc
{
[FunctionName("TestFunc")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
[CosmosDB(databaseName: "cosmodb-take-a-number", collectionName: "take-a-number", ConnectionStringSetting = "cosmoDbConnectionString")] IAsyncCollector<dynamic> documentsOut,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
string responseMessage = string.IsNullOrEmpty(name)
? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
: $"Hello, {name}. This HTTP triggered function executed successfully.";
if (!string.IsNullOrEmpty(name))
{
// Add a JSON document to the output container.
await documentsOut.AddAsync(new
{
// create a random ID
id = System.Guid.NewGuid().ToString(),
name = name
});
}
return new OkObjectResult(responseMessage);
}
}
}
一个 local.settings.json 文件,其 cosmoDbConnectionString 设置包含 mongo 数据库连接字符串。
当我 运行 函数时,我得到这个:
[2022-04-21T17:40:34.078Z] Executed 'TestFunc' (Failed, Id=b69a625c-9055-48bd-a5fb-d3c3b3a6fb9b, Duration=4ms)
[2022-04-21T17:40:34.079Z] System.Private.CoreLib: Exception while executing function: TestFunc. Microsoft.Azure.WebJobs.Host: Exception binding parameter 'documentsOut'. Microsoft.Azure.DocumentDB.Core: Value cannot be null. (Parameter 'authKeyOrResourceToken | secureAuthKey').
我的猜测是它需要一个具有另一种访问令牌的核心 SQL 数据库。 我的问题: 是否可以从 Azure 函数连接到 MongoDB 的 azure CosmoDB?
如果您使用 out-of-the-box 绑定,则只能使用 Cosmos DB 的 SQL API.
您完全可以使用 MongoDB API,但您必须安装 MongoDB 客户端 SDK 并以编程方式处理您的数据(就像您使用任何其他 code-oriented 方法)。
由于您的示例代码正在接收数据并将其写入 Cosmos DB,因此您将通过 MongoDB 的 node/c#/python/etc 驱动程序进行写入(我相信他们仍然称他们为 drivers),这实际上给了你一个 db.collection.insert( {} )
或更复杂的东西。
有关 Cosmos DB 绑定的更多信息here。