Azure Resource Manager を使用してルートとエンドポイントを作成および削除する
この記事では、Azure CLI または Azure PowerShell を使って Azure IoT Hub テンプレートをエクスポートする方法、IoT ハブにルートを追加する方法、テンプレートを IoT ハブに再デプロイする方法について説明します。 Azure Resource Manager テンプレートを使用してルーティングとエンドポイントを作成します。 IoT Hub では、エンドポイントとして、次の Azure サービスがサポートされています。
- ストレージ コンテナー
- Event Hubs
- Service Bus キュー
- Service Bus トピック
- Cosmos DB
Azure Resource Manager テンプレートは、JSON ファイルを使用してリソースを定義する必要がある場合に便利です。 すべての Azure リソースには、そのリソースで使用されるコンポーネントを定義するテンプレートがあります。 すべての Azure リソース テンプレートをエクスポートできます。
重要
Resource Manager テンプレートを使用してリソースをデプロイするときには、デプロイしている種類のすべての既存のリソースがテンプレートによって置き換えられます。
新しい IoT ハブを作成するときには、既存のデプロイされたリソースを上書きすることは問題ではありません。 新しい IoT ハブを作成するには、既にデプロイされている IoT ハブから既存のテンプレートをエクスポートするのではなく、必要なプロパティが設定された基本のテンプレートを使用できます。
ただし、既存の IoT ハブにルートを追加する場合は、IoT ハブからエクスポートしたテンプレートを使用して、更新されたテンプレートをデプロイした後もすべての既存のリソースとプロパティが接続されたままになるようにします。 既にデプロイされているリソースは置き換えられません。 たとえば、以前にデプロイし、エクスポートされた Resource Manager テンプレートには IoT ハブのストレージ情報が含まれていることがあります (ストレージに接続している場合)。
IoT Hub のルーティングのしくみについては、「IoT Hub メッセージ ルーティングを使用して device-to-cloud メッセージを別のエンドポイントに送信する」を参照してください。 ストレージにメッセージを送信するルートを設定し、シミュレートされたデバイスでテストする手順については、「チュートリアル: IoT Hub メッセージ ルーティングを使用してデバイス データを Azure Storage に送信する」を参照してください。
前提条件
メッセージをルーティングするエンドポイントの種類に基づいて、この記事の前提条件を確認してください。
Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に無料の Azure アカウントを作成してください。
IoT ハブ ハブがまだない場合は、手順に従って IoT ハブを作成できます。
Event Hubs リソース (とコンテナー)。 新しい Event Hubs リソースを作成する必要がある場合は、「クイック スタート: Resource Manager テンプレートを使用したイベント ハブの作成」を参照してください。
(推奨) Event Hubs 名前空間に対するロールベースのアクセス制御アクセス許可を持つマネージド ID。 詳しくは、「Microsoft Entra ID を使用して Event Hubs リソースにアクセスするためのマネージド ID を認証する」を参照してください。
Azure Resource Manager テンプレート
この記事では、Azure portal の Azure Resource Manager テンプレートを使って IoT Hub や他の Azure サービスを操作します。 Resource Manager テンプレートを使用する方法の詳細については、「Azure Resource Manager テンプレートとは」を参照してください。
ルートの作成
IoT Hub では、メッセージを送信する、またはイベントをキャプチャするルートを作成できます。 各ルートには、データ ソースとエンドポイントがあります。 データ ソースは、メッセージまたはイベント ログが生成される場所です。 エンドポイントは、メッセージまたはイベント ログが最終的に到達する場所です。 IoT ハブで新しいルートを作成するときに、データ ソースとエンドポイントの場所を選択します。 次に、ルーティング クエリを使って、エンドポイントに移動する前にメッセージまたはイベントをフィルター処理します。
IoT ハブ ルートのエンドポイントとして、イベント ハブ、Service Bus キューまたはトピック、Azure ストレージ アカウントを使用できます。 エンドポイントの作成に使用するサービスは、事前に Azure アカウントに存在する必要があります。
IoT ハブの Resource Manager テンプレートをエクスポートする
まず、IoT ハブから Resource Manager テンプレートをエクスポートします。 IoT ハブからテンプレートをエクスポートすることで、エンドポイントやルートのリソースを追加し、既存の設定を失うことなく再デプロイできます。
Azure portal で IoT Hub に移動します。 リソース メニューの [オートメーション] で、[テンプレートのエクスポート] を選択します。
[テンプレートのエクスポート] の [テンプレート] タブで、次の手順を完了します。
IoT ハブ用に生成された JSON ファイルを表示します。
[パラメーターを含める] チェックボックスをオフにします。
[ダウンロード] を選択して、JSON ファイルのローカル コピーをダウンロードします。
このテンプレートには、IoT ハブに機能またはサービスを追加するために使用できるプレースホルダーがいくつかあります。 この記事では、
routing
内にあるか、その下で入れ子になっているプロパティにのみ値を追加します。
テンプレートにエンドポイントを追加する
各ルートはエンドポイントを指し、メッセージやイベント ログが最終的に到達する場所です。 ルートで参照できるエンドポイントを IoT ハブに作成します。 IoT ハブ ルートのエンドポイントとして、イベント ハブ、Service Bus キューまたはトピック、Azure ストレージ アカウント、Cosmos DB コンテナーを使用できます。 エンドポイントの作成に使用するサービスは、事前に Azure アカウントに存在する必要があります。
IoT ハブは、メッセージやログを送信するエンドポイント リソースに対するアクセス許可が必要です。 マネージド ID と Microsoft Entra ID を使用するか、接続文字列を使用してアクセスできます。 Microsoft では、より安全なオプションとして Entra ID での認証を推奨しています。
Resource Manager テンプレートに Event Hubs エンドポイントを追加します。 詳細については、「Azure Resource Manager テンプレート RoutingEventHubProperties」を参照してください。
JSON ファイルで、
"routing"
の下で入れ子になっている"endpoints": []
プロパティを見つけます。"endpoints": []
行を次の JSON に置き換えます。"endpoints": { "serviceBusQueues": [], "serviceBusTopics": [], "eventHubs": [ { "endpointUri": "", "entityPath": "", "authenticationType": "identityBased", "identity": { "userAssignedIdentity": "" }, "name": "", "id": "", "subscriptionId": "", "resourceGroup": "" } ], "storageContainers": [], "cosmosDBSqlContainers": [] },
Event Hubs リソースに関する次の情報を使用して JSON を更新します。
プロパティ 値 endpointUri (認証の種類が identityBased
の場合。それ以外の場合は削除します。)形式sb://<eventhubs_namespace_name>.servicebus.windows.net
でご利用の Event Hubs 名前空間のホスト名entityPath (認証の種類が identityBased
の場合。それ以外の場合は削除します。)イベント ハブの名前。authenticationType identityBased
またはkeyBased
。 Microsoft では、より安全なオプションとして ID ベースの認証を推奨しています。ID (認証の種類が identityBased
の場合。)IoT Hub でシステム割り当てマネージド ID が有効になっている場合は、ユーザー割り当てマネージド ID またはシステム割り当てマネージド ID を使用できます。
ユーザー割り当ての場合:/subscriptions/<subscription_id>/resourceGroups/<resource_group_name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity_name>
の形式でイベント ハブへのアクセス許可があるマネージド ID の外部 ID。
システム割り当ての場合: ID パラメーターは空のリストにします。 たとえば、"identity": {},
のように指定します。connectionString (認証の種類が keyBased
の場合。)形式<connection_string>;EntityPath=<event_hub_name>.
のイベント ハブの共有アクセス ポリシーの 1 つからのプライマリ接続文字列: Azure portal から接続文字列の値を取得し、エンティティ パスを追加できます。name エンドポイントに名前を付けるために一意な値を指定します。 ID 空の文字列にします。 Azure サービスは、エンドポイントを作成するときに値を提供します。 subscriptionId イベント ハブが含まれているサブスクリプションの ID。 resourceGroup イベント ハブが含まれているリソース グループの名前。 ヒント
シークレット管理では、[パラメーター ファイルを作成する] または [デプロイ時に Azure Key Vault を使用して、セキュリティで保護されたパラメーター値を渡す] ことができます。
テンプレートにルートを追加する
Resource Manager テンプレートにルート定義を追加します。 詳細については、「Azure Resource Manager テンプレート RouteProperties」を参照してください。
JSON ファイルで、
"routing"
の下で入れ子になっている"routes": []
プロパティを見つけ、新しいルートを追加します。注意事項
"routes"
の既存の値を、次のコード例で使用されているルート値に置き換えると、デプロイ時に既存のルートが削除されます。 既存のルートを維持するには、新しいルート オブジェクトを"routes"
リストに "追加" します。"routes": [ { "name": "", "source": "DeviceConnectionStateEvents", "condition": "true", "endpointNames": [ "" ], "isEnabled": true } ],
Cosmos DB リソースに関する次の情報を使用して JSON を更新します。
プロパティ 値 name ルートに名前を付けるために一意な値を指定します。 source エンドポイントにルーティングするメッセージまたはイベント ログ ソースを選択します。 ソース オプションの一覧については、「az iot hub route」を参照してください。 condition ソース データをフィルター処理するクエリ。 条件が必要ない場合は true
にします。 詳細については、「IoT Hub メッセージ ルーティングのクエリ構文」を参照してください。endpointNames このデータがルーティングされる既存のエンドポイントの名前。 現時点では、1 つのエンドポイントのみが許可されています。 IsEnabled ルートを有効にするには true
に設定し、無効にするにはfalse
に設定します。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
パラメーターで使用する必要があるのは (ファイルのパス全体ではなく) テンプレート ファイル名のみになります。
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 で新しいルートを表示するには、IoT Hub リソースに移動します。 [メッセージ ルーティング] ウィンドウの [ルート] タブで、ルートが一覧表示されていることを確認します。
次の手順
このハウツー記事では、Event Hubs、Service Bus キューとトピック、Azure Storage に対してルートとエンドポイントを作成する方法について説明しました。
メッセージ ルーティングの詳細については、「チュートリアル: IoT Hub メッセージ ルーティングを使用してデバイス データを Azure Storage に送信する」を参照してください。 このチュートリアルでは、ストレージ ルートを作成し、IoT ハブでデバイスを使ってテストします。