#azure #azure-functions #azure-iot-hub
#azure #azure-функции #azure-iot-hub
Вопрос:
Я новичок в Azure и в настоящее время изучаю быстрый запуск IoT Hub здесь.
Отправка телеметрии с устройства на IoT hub и считывание ее с помощью внутреннего приложения работает до сих пор.
Я установил расширение vs code и успешно выполнил пример HTTP-триггера для функций Azure здесь.
На следующем шаге я попытался настроить функцию Azure IoT Hub (Event Hub). Это приводит к следующей ошибке при локальном тестировании:
Microsoft.Azure.WebJobs.Host: Error indexing method 'Functions.funcexample'. Microsoft.WindowsAzure.Storage: No valid combination of account information found.
Я добавил Event Hub-compatible endpoint
строку IoT Hub в local.settings.json
:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "Endpoint=sb://.../;SharedAccessKeyName=iothubowner;SharedAccessKey=...;EntityPath=...",
"FUNCTIONS_WORKER_RUNTIME": "node"
}
}
Я заметил, что SharedAccessKey
via az iot hub policy show --name service --query primaryKey --hub-name {your IoT Hub name}
не соответствует ключу на портале Azure. Оба ключа приводят к вышеупомянутому предупреждению.
Edit1: SharedAccessKey
s различаются для service и iothubowner.
Правка2: я думаю, что моя основная проблема связана со строкой подключения. Какая строка подключения требуется и как она формируется. И в какой файл / параметр следует поместить строку подключения?
Вот другие связанные файлы (в основном нетронутые). 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)"
}
}
proxy.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": {}
}
Что я упускаю?
Комментарии:
1. Попробуйте добавить
@azure/event-hubs
пакет, а для получения информации, связанной со строкой подключения, обратитесь к этому (ссылка) [ learn.microsoft.com/en-us/azure/iot-hub /…
Ответ №1:
У меня возникли некоторые общие недоразумения в отношении учетных записей хранения, фактического IoT Hub и их строк подключения в контексте функций Azure в процессе производства и разработки (тестирование их локально).).
Для локального тестирования я установил эмулятор локального хранилища Azurite через npm install -g 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"
}
]
}