6

我即将为我们的 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'))]",
},
4

1 回答 1

4

您可以从 ARM 模板中预配的 IoT 中心读取端点,并构建一个连接字符串,如下所示:

"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. parameters('iothub_name') 是同一 ARM 模板在模板中的其他位置预配的 IoT 中心的名称
  3. “listKeys”的输出返回一个关键对象数组,在我的例子中,第一项是“iothubowner”。(......我喜欢在问题中更好地描述这一点的方法。:)

帮助我了解在执行 ARM 模板期间可以从资源中读取的内容的一个有用技巧是输出整个资源,然后找到我感兴趣的属性。以下是我如何输出 IoT 中心的所有详细信息从运行 ARM 模板:

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

您还可以使用此方法输出端点(除其他外)以用作其他模板的输入。

于 2016-10-12T20:33:09.450 回答