Azure IoT 中心(事件中心)触发器:未找到有效的帐户信息组合
Azure IoT Hub (Event Hub) trigger: No valid combination of account information found
我是 Azure 的新手,目前正在研究 IoT 中心的快速入门 here。
将遥测数据从设备发送到 IoT 中心并使用后端应用程序读取它,目前有效。
我安装了 vs 代码扩展并成功完成了 Azure 函数的 HTTP 触发器示例here。
在下一步中,我尝试配置 IoT 中心(事件中心)Azure 功能。这导致在本地测试时出现以下错误:
Microsoft.Azure.WebJobs.Host: Error indexing method 'Functions.funcexample'. Microsoft.WindowsAzure.Storage: No valid combination of account information found.
我在 local.settings.json
中添加了 IoT 中心的 Event Hub-compatible endpoint
字符串:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "Endpoint=sb://.../;SharedAccessKeyName=iothubowner;SharedAccessKey=...;EntityPath=...",
"FUNCTIONS_WORKER_RUNTIME": "node"
}
}
我注意到通过 az iot hub policy show --name service --query primaryKey --hub-name {your IoT Hub name}
的 SharedAccessKey
与 Azure 门户中的密钥不匹配。这两个键都会导致上述警告。
Edit1:SharedAccessKey
服务和 iothubowner 不同。
Edit2:我认为我的主要问题与连接字符串有关。需要什么连接字符串及其格式。并且,file/setting 应该将连接字符串放在哪个位置?
这是其他相关文件(大部分未动过)。
function.json
{
"bindings": [
{
"type": "eventHubTrigger",
"name": "IoTHubMessages",
"direction": "in",
"eventHubName": "samples-workitems",
"connection": "AzureWebJobsStorage",
"cardinality": "many",
"consumerGroup": "$Default"
}
]
}
index.js
module.exports = function (context, IoTHubMessages) {
context.log(`JavaScript eventhub trigger function called for message array: ${IoTHubMessages}`);
IoTHubMessages.forEach(message => {
context.log(`Processed message: ${message}`);
});
context.done();
};
host.json:
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
}
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[2.*, 3.0.0)"
}
}
proxies.json:
{
"$schema": "http://json.schemastore.org/proxies",
"proxies": {}
}
package.json:
{
"name": "funcexample",
"version": "1.0.0",
"description": "",
"scripts": {
"start": "func start",
"test": "echo \"No tests yet...\""
},
"dependencies": {},
"devDependencies": {}
}
我错过了什么?
我对生产和开发中 Azure Functions 上下文中的存储帐户、实际的 IoT 中心及其连接字符串有一些普遍的误解(在本地测试)。
为了在本地进行测试,我通过 npm install -g azurite
安装了本地存储模拟器 Azurite,并对 local.settings.json
进行了以下设置
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"AzureWebJobsDashboard": "UseDevelopmentStorage=true",
"ConnectionString": "Endpoint=sb://.../;SharedAccessKeyName=...;SharedAccessKey=...;EntityPath=...",
"FUNCTIONS_WORKER_RUNTIME": "node"
}
}
和function.json
.
{
"bindings": [
{
"type": "eventHubTrigger",
"name": "IoTHubMessages",
"direction": "in",
"eventHubName": "samples-workitems",
"connection": "ConnectionString",
"cardinality": "many",
"consumerGroup": "$Default"
}
]
}
我是 Azure 的新手,目前正在研究 IoT 中心的快速入门 here。
将遥测数据从设备发送到 IoT 中心并使用后端应用程序读取它,目前有效。
我安装了 vs 代码扩展并成功完成了 Azure 函数的 HTTP 触发器示例here。
在下一步中,我尝试配置 IoT 中心(事件中心)Azure 功能。这导致在本地测试时出现以下错误:
Microsoft.Azure.WebJobs.Host: Error indexing method 'Functions.funcexample'. Microsoft.WindowsAzure.Storage: No valid combination of account information found.
我在 local.settings.json
中添加了 IoT 中心的 Event Hub-compatible endpoint
字符串:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "Endpoint=sb://.../;SharedAccessKeyName=iothubowner;SharedAccessKey=...;EntityPath=...",
"FUNCTIONS_WORKER_RUNTIME": "node"
}
}
我注意到通过 az iot hub policy show --name service --query primaryKey --hub-name {your IoT Hub name}
的 SharedAccessKey
与 Azure 门户中的密钥不匹配。这两个键都会导致上述警告。
Edit1:SharedAccessKey
服务和 iothubowner 不同。
Edit2:我认为我的主要问题与连接字符串有关。需要什么连接字符串及其格式。并且,file/setting 应该将连接字符串放在哪个位置?
这是其他相关文件(大部分未动过)。 function.json
{
"bindings": [
{
"type": "eventHubTrigger",
"name": "IoTHubMessages",
"direction": "in",
"eventHubName": "samples-workitems",
"connection": "AzureWebJobsStorage",
"cardinality": "many",
"consumerGroup": "$Default"
}
]
}
index.js
module.exports = function (context, IoTHubMessages) {
context.log(`JavaScript eventhub trigger function called for message array: ${IoTHubMessages}`);
IoTHubMessages.forEach(message => {
context.log(`Processed message: ${message}`);
});
context.done();
};
host.json:
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
}
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[2.*, 3.0.0)"
}
}
proxies.json:
{
"$schema": "http://json.schemastore.org/proxies",
"proxies": {}
}
package.json:
{
"name": "funcexample",
"version": "1.0.0",
"description": "",
"scripts": {
"start": "func start",
"test": "echo \"No tests yet...\""
},
"dependencies": {},
"devDependencies": {}
}
我错过了什么?
我对生产和开发中 Azure Functions 上下文中的存储帐户、实际的 IoT 中心及其连接字符串有一些普遍的误解(在本地测试)。
为了在本地进行测试,我通过 npm install -g azurite
安装了本地存储模拟器 Azurite,并对 local.settings.json
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"AzureWebJobsDashboard": "UseDevelopmentStorage=true",
"ConnectionString": "Endpoint=sb://.../;SharedAccessKeyName=...;SharedAccessKey=...;EntityPath=...",
"FUNCTIONS_WORKER_RUNTIME": "node"
}
}
和function.json
.
{
"bindings": [
{
"type": "eventHubTrigger",
"name": "IoTHubMessages",
"direction": "in",
"eventHubName": "samples-workitems",
"connection": "ConnectionString",
"cardinality": "many",
"consumerGroup": "$Default"
}
]
}