2016-07-11 9 views
4

私はAzureソリューションの展開をスクリプト化しようとしています。そのため、私はAzure IoTHubをResource Manager Templateで作成します。これは非常にうまくいく。しかし、問題は、 イベントハブと互換性のあるエンドポイント以降の展開用の文字列が必要です。テンプレートでの出力にそれをする、https://picload.org/image/rrdopcia/untitled.pngAzure Resource Managerテンプレートを使用してIotHubエンドポイントを出力する

私が思うには、解決策は次のようになり、私はそれが仕事を得るカント:

を参照してください。

template.jsonの出力セクションには、実際にこのようになります:あなたは、プロビジョニングからエンドポイントを読み取ることができ

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

Azure IoTHubをARMテンプレートで作成しています。したがって、 'variables( 'iotHubResourceId')'の代わりに 'parameters( 'iotHubName')'を使うべきです。なぜなら、 "resource id"はテンプレートの外側のリソースに使うべきですが、 "resource name"は内部のリソーステンプレート。 [この記事](https://azure.microsoft.com/en-us/documentation/articles/resource-group-template-functions/#_reference)をご覧ください。 –

+0

イベントハブを必要とする、後で展開するものは何ですか?互換性のある接続情報?たとえば、Azure Stream AnalyticsをIoTハブに接続する場合は、Event Hubと互換性のある接続情報を使用せずに行うことができます。 –

+0

@DominicBettsのお返事ありがとうございます。エンドポイントにデータを送信するService Fabricアクタがあります。 IoTハブに接続する別の可能性があるかどうかは確かに確認します。それは自分自身で接続文字列を生成することは可能ですか? 'sb://iothubname-xxxxx-xxxxxxxxxx.servicebus.windows。net/'数字がどのように生成されるか(x'es)はわかりません。 – ErBeEn

答えて

3

:ここ

"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)]" 
    } 
    } 

そして、私が使用する変数は、 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年2月3日」
  2. パラメータ(「iothub_name」)であることの名前です。同じARMテンプレートがテンプレートの他の場所でプロビジョニングしているIoTハブ
  3. "listKeys"の出力はキーオブジェクトの配列を返します。ここでは最初の項目が "iothubowner"でした。 (...私はこの問題をよりよく説明するアプローチが好きです:)

ARMテンプレートの実行中にリソースから読み込むために利用できるものを知るのに役立つトリックは、 。あなたはまたの間で(出力にエンドポイントをこの方法を使用することができます

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

:出力全体のリソース、その後、私が興味を持って財産を見つけるここではどのようにI出力ARMテンプレートを実行しているからなIoTハブのすべての詳細です他のもの)を他のテンプレートへの入力として使用することができます。

関連する問題