使用Azure Resource Manager模板输出IotHub端点

时间:2016-07-11 05:51:03

标签: azure azure-resource-manager azure-iot-hub

我即将编写Azure解决方案的部署脚本。出于这个原因,我使用资源管理器模板创建了一个Azure IoTHub。这非常有效。但问题是,我需要的 与Event Hub兼容的端点字符串,用于进一步部署。

请参阅: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'))]",
},

1 个答案:

答案 0 :(得分:4)

您可以从ARM模板中的配置IoT Hub读取端点,并构建如下连接字符串:

"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',参数(' iothub_name')))。eventHubEndpoints.events .endpoint

这是我工作的ARM模板中的一部分。为清楚起见,以下是有关上述变量/参数的一些细节:

  1. 变量(' devices_provider_apiversion')是" 2016-02-03"
  2. 参数(' iothub_name')是同一ARM模板在模板中其他位置配置的IoT Hub的名称
  3. " listKeys"的输出返回一组关键对象,在我的例子中,第一项是" iothubowner"。 (...我喜欢在问题中更好地描述这一点的方法。:)
  4. 帮助我了解在执行ARM模板期间可以从资源中读取的内容的一个有用技巧是输出整个资源,然后找到我感兴趣的属性。以下是我如何输出所有详细信息运行ARM模板的IoT Hub:

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

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