首页 > 解决方案 > Azure Functions 中的 CosmosDB 输出绑定错误

问题描述

我遇到了 Azure Function 和 CosmosDB 输出绑定的问题。我现在所拥有的:我从 Cosmos DB 容器中读取数据,处理某些内容,然后将结果输出回同一个 DB 但不同的容器。我正在使用 VSCode 和 python,并且我测试了其他输出(blob、HTTP 响应等)并且一切正常,所以我相信这是 CosmosDB 问题。

__init__.py函数定义是这样的:

def main(documents: func.DocumentList, outdocs: func.Out[func.Document]):

function.json 输出绑定是这样的:

{
      "type": "cosmosDB",
      "direction": "out",
      "name": "outdocs",
      "databaseName": "db-test",
      "collectionName": "out-collection",
      "connectionStringSetting": "dmcosmosdb_DOCUMENTDB",
      "partitionKey": "undefined",
      "collectionThroughput": "undefined"
}

请注意,我使用 手动安装了扩展func extensions install,我的 extensions.csproj 文件如下所示:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <!-- <AzureFunctionsVersion>v3</AzureFunctionsVersion> -->
    <WarningsAsErrors></WarningsAsErrors>
    <DefaultItemExcludes>**</DefaultItemExcludes>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.CosmosDB" Version="3.0.10" />
    <PackageReference  Include="Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator" Version="1.1.3" />
  </ItemGroup>
</Project>

它使用与触发器输入绑定相同的连接字符串和数据库,只是输出的容器不同。我还确保绑定的名称与我在代码中使用的变量匹配,并且它的类型是func.Out[func.Document]. 我为我的输出创建了一个自定义字典,然后我用它outdocs.set(func.Document.from_dict(output))来将输出存储回 CosmosDB。

有什么建议么?我记得几周前能够做到这一点,并且使用相同的配置没有任何问题。我收到的错误消息是这样的:

[2021-08-23T11:30:31.794Z] No job functions found. Try making your job classes and methods public. If you're using binding extensions (e.g. Azure Storage, ServiceBus, Timers, etc.) make sure you've called the registration method for the extension(s) in your startup code (e.g. builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers(), etc.).
[2021-08-23T11:30:31.891Z] The 'CosmosTrigger' function is in error: Unable to configure binding 'outdocs' of type 'cosmosDB'. This may indicate invalid function.json properties. Input string was not in a correct format.

谢谢。

标签: azure-functionsazure-cosmosdbazure-cosmosdb-sqlapi

解决方案


解决。我不得不删除我的 Cosmos 输出绑定的最后两个属性,它起作用了。我的印象是,因为容器已经存在,所以这两个属性都将被忽略。

"partitionKey": "undefined",
"collectionThroughput": "undefined"

推荐阅读