Azure 函数输出到 CosmosDB

问题描述 投票:0回答:1

我正在使用门户创建一个 HttpTriggered Azure 函数,该函数应在 CosmosDB 中插入文档。我使用所有默认值,当我配置输出到 Cosmos 的绑定时,我使用集成页面来指定它..

好的,我的函数代码是:

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;

public static IActionResult Run(HttpRequest req, out dynamic outputDocument, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string name = req.Query["name"];

    string requestBody = new StreamReader(req.Body).ReadToEnd();
    dynamic data = JsonConvert.DeserializeObject(requestBody);
    name = name ?? data?.name;

    outputDocument = new { Description = name, id = Guid.NewGuid() };

    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.";

            return new OkObjectResult(responseMessage);

Function.json 是这样的:

{
  "bindings": [
    {
      "authLevel": "function",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    },
    {
      "name": "outputDocument",
      "databaseName": "outDatabase",
      "collectionName": "MyCollection",
      "createIfNotExists": true,
      "connectionStringSetting": "johncosmosgorter_DOCUMENTDB",
      "partitionKey": "id",
      "direction": "out",
      "type": "cosmosDB"
    }
  ]
}

请注意,绑定参数是由集成页面生成的,我不是手写的。

现在,当我们运行该函数时,我们收到 500 错误,日志显示如下:

Cosmos DB connection configuration 'CosmosDB' does not exist. Make sure that it is a defined App Setting.

这非常奇怪,因为我没有生成绑定。它看起来像是版本 3 与版本 4 绑定参数冲突,因为当我更改绑定以使 connectionStringSetting 成为连接时,它实际上起作用并给出了下一个错误,即

Value cannot be null. (Parameter 'databaseId')

绑定有一个databaseName,将其更改为databaseId 不应该是解决方案。这样做也行不通。

这里出了什么问题,为什么 Azure Functions 的超级简单样板 cosmosDB 输出绑定不起作用?为什么很难得到正确的指导?

预先感谢您的任何见解!

约翰。

azure function azure-cosmosdb
1个回答
0
投票

请注意,绑定参数是由集成页面生成的,我不是手写的。现在,当我们运行该函数时,我们收到 500 错误。

是的,我确实同意您的观点,在使用集成页面创建 cosmos DB 输出绑定时,绑定参数生成不正确。这些参数不指向 v4。

根据 ms 文档,应使用 connection 代替 connectionStringSetting,并且 containerName 应替换 v4 的 collectionName

但是它生成了以下属性 -

{
      "name": "outputDocument",
      "direction": "out",
      "type": "cosmosDB",
      "connectionStringSetting": "afreen-cosmosdb_DOCUMENTDB",
      "databaseName": "outDatabase",
      "collectionName": "MyCollection",
      "createIfNotExists": true,
      "partitionKey": "/id"
    }

即使我遇到了这个

Cosmos DB connection configuration 'CosmosDB' does not exist. Make sure that it is a defined App Setting.
错误,并在将connectionStringSetting更正为connection后摆脱了它。

然后我也开始收到

Value cannot be null. (Parameter 'databaseId')
错误,后来我将collectionName更新为containerName,它开始为我工作。

最终的绑定属性如下所示,对我有用 -

{
      "name": "outputDocument",
      "direction": "out",
      "type": "cosmosDB",
      "connection": "afreen-cosmosdb_DOCUMENTDB",
      "databaseName": "outDatabase",
      "containerName": "MyCollection",
      "createIfNotExists": true,
      "partitionKey": "/id"
    }

我得到了输出

我怎么知道他们正在使用哪个版本

您可以从这里查看该功能的版本。

我已经向产品团队提出了bug,您可以查看以获取进一步的更新。

© www.soinside.com 2019 - 2024. All rights reserved.