Вывод конечной точки IotHub с помощью шаблона Azure Resource Manager

Я собираюсь написать сценарий развертывания нашего решения Azure. По этой причине я создаю Azure IoTHub с шаблоном диспетчера ресурсов. Это очень хорошо работает. Но проблема в том, что мне нужна строка конечная точка, совместимая с концентратором событий для дальнейшего развертывания.

См .: https://picload.org/image/rrdopcia/untitled.png

Я думаю, что решением было бы вывести его в шаблоне, но я не могу заставить его работать.

Раздел вывода моего template.json на самом деле выглядит так:

    "outputs": {
    "clusterProperties": {
        "value": "[reference(parameters('clusterName'))]",
        "type": "object"
    },
    "iotHubHostName": {
        "type": "string",
        "value": "[reference(variables('iotHubResourceId')).hostName]"
    },
    "iotHubConnectionString": {
        "type": "string",
        "value": "[concat('HostName=', reference(variables('iotHubResourceId')).hostName, ';SharedAccessKeyName=', variables('iotHubKeyName'), ';SharedAccessKey=', listkeys(variables('iotHubKeyResource'), variables('iotHubVersion')).primaryKey)]"
    }
   }

А вот переменные, которые я использовал:

    "variables": {
    "iotHubVersion": "2016-02-03",
    "iotHubResourceId": "[resourceId('Microsoft.Devices/Iothubs', parameters('iothubname'))]",
    "iotHubKeyName": "iothubowner",
    "iotHubKeyResource": "[resourceId('Microsoft.Devices/Iothubs/Iothubkeys', parameters('iothubname'), variables('iotHubKeyName'))]",
},

person ErBeEn    schedule 11.07.2016    source источник
comment
Вы ведь создаете Azure IoTHub с помощью шаблона ARM? Таким образом, вместо использования variables('iotHubResourceId') вы должны использовать parameters('iotHubName'), потому что идентификатор ресурса должен использоваться для ресурсов вне шаблона, а имя ресурса должно использоваться для ресурсов внутри шаблона. Прочтите эту статью   -  person Jack Zeng    schedule 11.07.2016
comment
Что вы развертываете позже, для чего требуется информация о подключении, совместимая с концентратором событий? Например, если вы подключаете Azure Stream Analytics к Центру Интернета вещей, вы можете сделать это без использования информации о подключении, совместимой с концентратором событий.   -  person Dominic Betts    schedule 11.07.2016
comment
Спасибо за ответ @DominicBetts. У нас есть субъект Service Fabric, который отправляет данные в конечную точку. Обязательно проверю, есть ли еще возможность подключиться к IoT Hub. Можно ли самостоятельно сгенерировать строку подключения? sb://iothubname-xxxxx-xxxxxxxxxx.servicebus.windows.net/ Не могу разобраться, как генерируется номер (крестики).   -  person ErBeEn    schedule 14.07.2016
comment
Я не уверен, что вы имеете в виду, когда говорите, что у нас есть субъект Service Fabric, который отправляет данные в конечную точку. Конечная точка, совместимая с концентратором событий, в Центре Интернета вещей - это конечная точка, доступная только для чтения, для чтения сообщений, отправленных устройством в концентратор. Невозможно самостоятельно сгенерировать строку подключения - Центр Интернета вещей генерирует имя с помощью x'es.   -  person Dominic Betts    schedule 14.07.2016
comment
Я использую пакет Nuget EventHubProcessorHost для обработки событий из IoTHub, для чего требуется строка подключения, совместимая с концентратором событий. Я попытался определить конечную точку в моем шаблоне ARM, но она игнорируется, и Azure просто автоматически ее генерирует - большой облом! Действительно нужен ответ на вопрос, как прочитать конечную точку EventHub из шаблона ARM.   -  person bojingo    schedule 12.10.2016


Ответы (1)


Вы можете прочитать конечную точку из подготовленного IoT Hub в шаблоне ARM и создать строку подключения следующим образом:

"EventHubConnectionString": "[concat('Endpoint=',reference(resourceId('Microsoft.Devices/IoTHubs',parameters('iothub_name'))).eventHubEndpoints.events.endpoint,';SharedAccessKeyName=iothubowner;SharedAccessKey=',listKeys(resourceId('Microsoft.Devices/IotHubs',parameters('iothub_name')),variables('devices_provider_apiversion')).value[0].primaryKey)]"

Важным битом для получения конечной точки, совместимой с EventHub, был: resourceId ('Microsoft.Devices / IoTHubs', parameters ('iothub_name'))). EventHubEndpoints.events.endpoint

Это было вырвано из моего рабочего шаблона ARM. Для ясности, вот некоторые подробности о переменных / параметрах, указанных выше:

  1. переменные ('devices_provider_apiversion'): «2016-02-03»
  2. параметры ('iothub_name') - это имя центра Интернета вещей, который тот же шаблон ARM подготавливает в другом месте шаблона.
  3. Вывод «listKeys» возвращает массив ключевых объектов, где в моем случае первым элементом был «iothubowner». (... Мне нравится подход, чтобы лучше описать это в вопросе. :)

Один полезный трюк, который помог мне узнать, что мне доступно для чтения из ресурсов во время выполнения шаблона ARM, - это вывести весь ресурс, а затем найти интересующее меня свойство. Вот как я выводю все сведения о Центре Интернета вещей от запуска шаблона ARM:

"outputs": {
    "iotHub": {
        "value": "[reference(resourceId('Microsoft.Devices/IoTHubs',parameters('iothub_name')))]",
        "type": "object"
    }
}

Вы также можете использовать этот метод для вывода конечной точки (среди прочего), которая будет использоваться в качестве входных данных для других шаблонов.

person bojingo    schedule 12.10.2016