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

时间:2018-07-05 21:08:10

标签: azure azure-functions azure-cosmosdb serverless azure-functions-core-tools

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

tutorial

中的说明使我受到了部分启发

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

func init
func start

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

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

我生成的 function.json 是:

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

我生成的 local.settings.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 个答案:

答案 0 :(得分:1)

问题是您的local.settings.jsonfunction.json缺少cosmosdb连接字符串的必要配置。

请参见cosmosdb trigger document

function.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
        }
    ]
}

local.settings.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扩展名,工具将自动安装它。

此问题解决后,如果您遇到有关Microsoft.Azure.Documents.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).

只需安装一个软件包即可修复(请参见此issue

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

然后一切正常。