当前位置: 首页 > 知识库问答 >
问题:

无法使用Azure Function Core工具在本地运行cosmosDB触发器

长孙鸿波
2023-03-14

我正在尝试使用azure Functions核心工具在笔记本电脑上本地运行azure功能。请注意,此函数配置为cosmosDB触发器

我部分受到了本教程中说明的启发

首先,我创建了一个名为MyFirstFunction的函数,其中包含以下命令(并在出现提示时插入所需的输入):

func init
func start

我生成的javascript函数是(与Azure portal为相同类型的模板函数创建的函数相同):

module.exports = function (context, documents) {
    if (!!documents && documents.length > 0) {
        context.log('Document Id: ', documents[0].id);
    }
    context.done();
}

我的生成函数。json是:

{
    "bindings":
    [
        {
          "type": "cosmosDBTrigger",
          "name": "documents",
          "direction": "in",
          "leaseCollectionName": "leases"
        }
    ]
}

我的孩子是本地人。设置。json是

{
    "IsEncrypted": false,
    "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "node",
    "AzureWebJobsStorage": "UseDevelopmentStorage=true"
    }
}

给定此设置,我尝试通过执行以下操作来运行该函数:

func host start

在控制台输出中一切正常运行,直到出现错误消息:无法配置类型为cosmosDBTrigger的绑定文档。这可能表示无效的function.json属性。不知道该打电话给哪个ctor。

我错过了什么?我应该通过http POST触发函数,以:

http://localhost:{port}/admin/functions/{function_name}

正如上面链接的教程中所解释的(该函数是cosmosDB触发器),但在发生此错误后,甚至无法加载该函数。

我在本地运行cosmosDB触发器时遗漏了什么?

非常感谢。

共有1个答案

梁鸣
2023-03-14

问题出在你的本地。设置。json函数。json缺少cosmosdb连接字符串的必要配置。

请参见cosmosdb触发器文档。

作用json

{
    "bindings":
    [
        {
          "type": "cosmosDBTrigger",
          "name": "documents",
          "direction": "in",
          "leaseCollectionName": "leases",

          // Missed in your code
          "connectionStringSetting": "CosmosDBConnectionString",
          "databaseName": "<Get db name>",
          "collectionName": "<Get coll name>",
          "createLeaseCollectionIfNotExists": true
        }
    ]
}

地方的设置。json

 {
    "IsEncrypted": false,
        "Values": {
        "FUNCTIONS_WORKER_RUNTIME": "node",
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",

         //Missed in your code
        "CosmosDBConnectionString":"<Get connection string from Azure portal>"
    }
 }

请注意,在最新版本的函数核心工具(2.0.1-beta.31)中,如果您使用func new创建CosmosDB触发器,则无需注册CosmosDB扩展,工具将自动安装它。

这个问题解决后,如果你遇到了另一个关于微软的错误。蔚蓝色的文件。ServiceInterop。dll

The listener for function 'Functions.CosmosDb' was unable to start.
The listener for function 'Functions.CosmosDb' was unable to start. System.Private.CoreLib: One or more errors occurred. (Unable to load DLL 'Microsoft.Azure.Documents.ServiceInterop.dll' or one of its dependencies: The specified module could not be found. (Exception from HRESULT: 0x8007007E)). 
Microsoft.Azure.DocumentDB.Core: Unable to load DLL 'Microsoft.Azure.Documents.ServiceInterop.dll' or one of its dependencies: The specified module could not be found. (Exception from HRESULT: 0x8007007E).

只需安装一个软件包即可修复(请参阅本期)

func extensions install -p Microsoft.Azure.DocumentDB.Core -v 2.0.0-preview

然后一切都会好起来。

 类似资料:
  • 我使用服务总线触发器创建了一个azure函数,当我尝试运行该函数时,我得到了这个错误: 我为开发存储设置了local.settings.json文件 我在使用AzureWebJobsStorage的函数中有连接字符串 我不知道是什么问题。如果有任何帮助,将不胜感激。

  • 我试图运行react-native run-android,结果出现了这个错误。

  • 我在Visual Studio中创建了一个简单的blob触发器,init.py如下 function.json如下 local.settings。json如下所示 此代码在本地计算机上的visual studio中运行良好。但在azure portal上发布时,它无法从函数中读取blob路径。json并给出错误为 我已经使用命令发布了local.settings.json的contains。 .有

  • 问题内容: 我正在尝试使用MySQL触发器生成错误消息。下面是我的代码: 但这总是会产生错误。我不知道错误是什么,因为它没有说任何有关错误的信息,而只是“错误”。 有什么建议吗?除此之外,有人说使用存在问题,因为它可能取决于MySQL版本。有什么建议吗? 问题答案: 该子句是信号语法的一部分-它们之间不应存在分号()。此外,它使用运算符,而不是:

  • 我甚至才知道,即使是Docker容器也是由IP组成的。为什么会这样?有谁能帮助我理解容器是如何通过IP访问的吗? 我已经尝试了上面的JSON和ipconfig映像中所有可用的IP,但都不起作用。

  • 理想情况下,我希望能够创建一个像.azcli这样的脚本,我可以在CosmosDB模拟器上本地运行,然后在我的devops管道中使用相同的脚本将资源上传到Azure。 这是我当前的 CLI 命令。 deploy-cosmos.azcli 我在Azure CLI文档中找不到任何提及CosmosDB模拟器的内容,并且CLI命令本身的参数似乎都无法直接指向模拟器。 https://docs.microso