我正在尝试使用Azure Functions核心工具在笔记本电脑上本地运行azure函数。请注意,此功能已配置为 cosmosDB触发器
中的说明使我受到了部分启发我首先使用以下命令创建一个名为 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触发器时我缺少什么?
非常感谢。
答案 0 :(得分:1)
问题是您的local.settings.json
和function.json
缺少cosmosdb连接字符串的必要配置。
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
然后一切正常。