无法 运行 cosmosDB 使用 Azure Function Core Tools 在本地触发
Unable to run cosmosDB trigger locally with Azure Function Core Tools
我正在尝试使用 Azure Functions Core Tools 在我的笔记本电脑上本地 运行 一个 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' 类型的绑定 'documents'。这可能表示无效的 function.json 属性。无法确定调用哪个 ctor。
我错过了什么?我应该通过 http POST to:
来触发该功能
http://localhost:{port}/admin/functions/{function_name}
如上面链接的教程中所述(此函数是 cosmosDB 触发器),但此错误后甚至无法加载该函数。
我缺少 运行 本地 cosmosDB 触发器的什么?
非常感谢。
问题是您的 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
然后一切都应该工作。
我正在尝试使用 Azure Functions Core Tools 在我的笔记本电脑上本地 运行 一个 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' 类型的绑定 'documents'。这可能表示无效的 function.json 属性。无法确定调用哪个 ctor。
我错过了什么?我应该通过 http POST to:
来触发该功能http://localhost:{port}/admin/functions/{function_name}
如上面链接的教程中所述(此函数是 cosmosDB 触发器),但此错误后甚至无法加载该函数。
我缺少 运行 本地 cosmosDB 触发器的什么?
非常感谢。
问题是您的 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
然后一切都应该工作。