Azure Resource Manager を使用してルートとエンドポイントを作成および削除する

この記事では、Azure CLI または Azure PowerShell を使って Azure IoT Hub テンプレートをエクスポートする方法、IoT ハブにルートを追加する方法、テンプレートを IoT ハブに再デプロイする方法について説明します。 Azure Resource Manager テンプレートを使用して、Azure Event Hubs、Azure Service Bus キューとトピック、Azure Storage に対してルートとエンドポイントを作成します。

Azure Resource Manager テンプレートは、JSON ファイルを使用してリソースを定義する必要がある場合に便利です。 すべての Azure リソースには、そのリソースで使用されるコンポーネントを定義するテンプレートがあります。 すべての Azure リソース テンプレートをエクスポートできます。

重要

Resource Manager テンプレートを使用してリソースをデプロイするときには、デプロイしている種類のすべての既存のリソースがテンプレートによって置き換えられます。

新しい IoT ハブを作成するときには、既存のデプロイされたリソースを上書きすることは問題ではありません。 新しい IoT ハブを作成するには、既にデプロイされている IoT ハブから既存のテンプレートをエクスポートするのではなく、必要なプロパティが設定された基本のテンプレートを使用できます。

ただし、既存の IoT ハブの Resource Manager テンプレートにルートを追加する場合は、IoT ハブからエクスポートしたテンプレートを使用して、更新されたテンプレートをデプロイした後もすべての既存のリソースとプロパティが接続されたままになるようにします。 既にデプロイされているリソースは置き換えられません。 たとえば、以前にデプロイし、エクスポートされた Resource Manager テンプレートには IoT ハブのストレージ情報が含まれていることがあります (ストレージに接続している場合)。

IoT Hub のルーティングのしくみについては、「IoT Hub メッセージ ルーティングを使用して device-to-cloud メッセージを別のエンドポイントに送信する」を参照してください。 ストレージにメッセージを送信するルートを設定し、シミュレートされたデバイスでテストする手順については、「チュートリアル: IoT Hub メッセージ ルーティングを使用してデバイス データを Azure Storage に送信する」を参照してください。

前提条件

この記事で説明する手順では、次のリソースを使用します。

  • Azure Resource Manager テンプレート
  • IoT ハブ
  • Azure のエンドポイント サービス

Azure Resource Manager テンプレート

この記事では、Azure portal の Azure Resource Manager テンプレートを使って IoT Hub や他の Azure サービスを操作します。 Resource Manager テンプレートを使用する方法の詳細については、「Azure Resource Manager テンプレートとは」を参照してください。

IoT ハブ

IoT ハブ ルートを作成するには、Azure IoT Hub を使用して作成した IoT ハブが必要です。 デバイス メッセージとイベント ログは、IoT ハブで生成されます。

IoT ハブ ルートを作成するときに使用する次のハブ リソースがあることを確認してください。

エンドポイント サービス

IoT ハブ ルートを作成するには、ルートへのエンドポイントとして使用する他の Azure サービスが少なくとも 1 つ必要です。 エンドポイントは、デバイス メッセージとイベント ログを受信します。 IoT ハブ ルートと接続するエンドポイントに使用する Azure サービス (Event Hubs、Service Bus キューまたはトピック、Azure Storage) を選択できます。

IoT ハブ ルートでエンドポイントを作成するときに使用する次のリソースの "いずれか" があることを確認してください。

ルートの作成

IoT Hub では、メッセージを送信する、またはイベントをキャプチャするルートを作成できます。 各ルートには、データ ソースとエンドポイントがあります。 データ ソースは、メッセージまたはイベント ログが生成される場所です。 エンドポイントは、メッセージまたはイベント ログが最終的に到達する場所です。 IoT ハブで新しいルートを作成するときに、データ ソースとエンドポイントの場所を選択します。 次に、ルーティング クエリを使って、エンドポイントに移動する前にメッセージまたはイベントをフィルター処理します。

IoT ハブ ルートのエンドポイントとして、イベント ハブ、Service Bus キューまたはトピック、Azure ストレージ アカウントを使用できます。 エンドポイントの作成に使用するサービスは、事前に Azure アカウントに存在する必要があります。

IoT ハブから Resource Manager テンプレートをエクスポートする

最初に、IoT ハブから Resource Manager テンプレートをエクスポートし、それにルートを追加します。

  1. Azure portal で IoT Hub に移動します。 リソース メニューの [オートメーション] で、[テンプレートのエクスポート] を選択します。

    IoT Hub リソースのメニューの [テンプレートのエクスポート] オプションの場所を示すスクリーンショット。

  2. [テンプレートのエクスポート][テンプレート] タブで、次の手順を完了します。

    1. IoT ハブ用に生成された JSON ファイルを表示します。

    2. [パラメーターを含める] チェックボックスをオフにします。

    3. [ダウンロード] を選択して、JSON ファイルのローカル コピーをダウンロードします。

    [テンプレートのエクスポート] ウィンドウの [ダウンロード] ボタンの場所を示すスクリーンショット。

    このテンプレートには、IoT ハブに機能またはサービスを追加するために使用できるプレースホルダーがいくつかあります。 この記事では、routing 内にあるか、その下で入れ子になっているプロパティにのみ値を追加します。

Resource Manager テンプレートに新しいエンドポイントを追加する

JSON ファイルで、"routing" の下で入れ子になっている "endpoints": [] プロパティを見つけます。 エンドポイントに対して選択した Azure サービス (Event Hubs、Service Bus キューまたはトピック、Azure Storage) に基づいて、新しいエンドポイントを追加する手順を完了します。

Event Hubs リソース (とコンテナー) を作成する方法については、「クイック スタート: Resource Manager テンプレートを使用したイベント ハブの作成」を参照してください。

Azure portal で、Event Hubs リソースからプライマリ接続文字列を取得します。 リソースの [共有アクセス ポリシー] ウィンドウで、ポリシーのいずれかを選ぶと、キーと接続文字列の情報が表示されます。 接続文字列の末尾にあるエンティティ パスにイベント ハブ名を追加します。 たとえば、 ;EntityPath=my-event-hubsを使用します。 この名前は、名前空間名ではなく、イベント ハブ名です。

name には、Event Hubs エンドポイントの一意の値を使用します。 id パラメーターは空の文字列のままにします。 Azure サービスは、エンドポイントをデプロイするときに id 値を提供します。

"routing": {
   "endpoints": {
      "serviceBusQueues": [],
      "serviceBusTopics": [],
      "eventHubs": [
            {
               "connectionString": "my Event Hubs connection string + entity path",
               "authenticationType": "keyBased",
               "name": "my-event-hubs-endpoint",
               "id": "",
               "subscriptionId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
               "resourceGroup": "my-resource-group"
            }
      ],
      "storageContainers": [],
      "cosmosDBSqlCollections": []
   },
},

Resource Manager テンプレートに新しいルートを追加する

JSON ファイルで、"routing" の下にある、入れ子になった "routes": [] プロパティを見つけます。選んだエンドポイント サービス (Event Hubs、Service Bus キューまたはトピック、または Azure Storage) に従って、次の新しいルートを追加します。

既定のフォールバック ルートは、DeviceMessages からメッセージを収集します。 別のオプション (DeviceConnectionStateEvents など) を選択します。 ソース オプションの詳細については、「az iot hub route」を参照してください。

注意事項

"routes" の既存の値を、次のコード例で使用されているルート値に置き換えると、デプロイ時に既存のルートが削除されます。 既存のルートを維持するには、新しいルート オブジェクトを "routes" リストに "追加" します。

テンプレートの詳細については、「Azure Resource Manager テンプレート リソース定義」を参照してください。

"routes": [
    {
        "name": "MyIotHubRoute",
        "source": "DeviceConnectionStateEvents",
        "condition": "true",
        "endpointNames": [
        "my-event-hubs-endpoint"
        ],
        "isEnabled": true
    }
],

JSON ファイルを保存します。

Resource Manager テンプレートをデプロイする

新しいエンドポイントとルートが Resource Manager テンプレートに追加されたので、JSON ファイルを IoT ハブにデプロイできます。

ローカル デプロイ

az deployment group create \
  --name my-iot-hub-template \
  --resource-group my-resource-group \
  --template-file "my\path\to\template.json"

Azure Cloud Shell のデプロイ

Azure Cloud Shell は Web ブラウザーで実行されるので、デプロイ コマンドを実行する前にテンプレート ファイルをアップロードできます。 ファイルをアップロードすると、template-file パラメーターで使用する必要があるのは (ファイルのパス全体ではなく) テンプレート ファイル名のみになります。

ファイルをアップロードする Azure Cloud Shell のボタンの場所を示すスクリーンショット。

az deployment group create \
  --name my-iot-hub-template \
  --resource-group my-resource-group \
  --template-file "template.json"

Note

デプロイに失敗した場合は、-verbose スイッチを使用して、作成しているリソースに関する情報を取得します。 デバッグの詳細については、-debug スイッチを使用してください。

デプロイを確認する

テンプレートが Azure に正常にデプロイされたことを確認するには、Azure portal で、リソース グループ リソースに移動します。 リソース メニューの [設定] で、[デプロイ] を選択して、デプロイの一覧にあるテンプレートを確認します。

テスト テンプレートが強調表示された、Azure portal 内のリソースのデプロイの一覧を示すスクリーンショット。

Azure portal で新しいルートを表示するには、IoT Hub リソースに移動します。 [メッセージ ルーティング] ウィンドウの [ルート] タブで、ルートが一覧表示されていることを確認します。

次の手順

このハウツー記事では、Event Hubs、Service Bus キューとトピック、Azure Storage に対してルートとエンドポイントを作成する方法について説明しました。

メッセージ ルーティングの詳細については、「チュートリアル: IoT Hub メッセージ ルーティングを使用してデバイス データを Azure Storage に送信する」を参照してください。 このチュートリアルでは、ストレージ ルートを作成し、IoT ハブでデバイスを使ってテストします。