次の方法で共有


チュートリアル: IoT Hub メッセージ ルーティングを使用してデバイス データを Azure Storage に送信する

Azure IoT Hub のメッセージ ルーティングを使用して、IoT デバイスから Blob Storage、Service Bus キュー、Service Bus トピック、Event Hubs などの Azure サービスにテレメトリ データを送信します。 すべての IoT ハブには、Event Hubs との互換性がある、既定の組み込みのエンドポイントがあります。 ルーティング クエリを定義することで、カスタム エンドポイントを作成し、他の Azure サービスにメッセージをルーティングすることもできます。 IoT ハブに到着した各メッセージは、ルーティング クエリが一致するすべてのエンドポイントにルーティングされます。 定義されたルーティング クエリのいずれにも一致しないメッセージは、既定のエンドポイントにルーティングされます。

このチュートリアルでは、以下のタスクを実行します。

  • IoT ハブを作成し、デバイス メッセージを送信します。
  • ストレージ アカウントを作成します。
  • ストレージ アカウントのカスタム エンドポイントを作成し、IoT ハブからメッセージをルーティングします。
  • ストレージ アカウント BLOB 内のデバイス メッセージを表示します。

前提条件

  • Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。

  • Azure サブスクリプション内の IoT ハブ。 IoT ハブがまだない場合は、「 IoT ハブを作成する」の手順に従うことができます。

  • このチュートリアルでは、 Microsoft Azure IoT SDK for .NET のサンプル コードを使用します。

    • SDK リポジトリをダウンロードするか、開発用マシンに複製します。
    • 開発用マシン上に .NET Core 3.0.0 以降をインストールします。 dotnet --version を実行してバージョンを確認し、必要に応じて .NET をダウンロードします。
  • ポート 8883 がファイアウォールで開放されていることを確認してください。 このチュートリアルのサンプルでは、ポート 8883 を介して通信する MQTT プロトコルを使用しています。 このポートは、企業や教育用のネットワーク環境によってはブロックされている場合があります。 この問題を回避する方法の詳細については、「 IoT Hub への接続」を参照してください。

  • 必要に応じて、 Azure IoT Explorer (プレビュー) をインストールします。 このツールは、メッセージが IoT ハブに到着したときのメッセージの監視に役立ちます。 この記事では、Azure IoT Explorer を使用します。

Azure portal には、その他の前提条件はありません。

デバイスを登録し、IoT Hub にメッセージを送信する

IoT ハブに新しいデバイスを登録します。

重要

この記事では、Shared Access Signature (対称キー認証とも呼ばれます) を使用してデバイスを接続する手順について説明します。 この認証方法はテストと評価には便利ですが、X.509 証明書を使用してデバイスを認証する方が安全なアプローチです。 詳細については、 接続セキュリティ > IoT ソリューションのセキュリティのベスト プラクティスに関するページを参照してください。

  1. Azure Portal にサインインし、IoT Hub に移動します。

  2. メニューの [デバイス管理] セクションから [デバイス] を選択します。

  3. [デバイスの追加] を選択します。

    Azure portal での新しいデバイスの追加を示すスクリーンショット。

  4. デバイス ID を指定し、[保存] を選択します。

  5. 新しいデバイスがデバイスの一覧に表示されます。 そうでない場合は、ページを更新します。 デバイス ID を選択し、[デバイスの詳細] ページを開きます。

  6. デバイス キーの 1 つをコピーして保存します。 この値を使用して、シミュレートされたデバイス テレメトリ メッセージを生成するサンプル コードを構成します。

    Azure portal のデバイスの詳細ページから IoT デバイスの主キーをコピーする方法を示すスクリーンショット。

デバイス ID とキーが用意されたので、サンプル コードを使用して IoT Hub へのデバイス テレメトリ メッセージの送信を開始します。

ヒント

このチュートリアルの Azure CLI の手順に従っている場合は、別のセッションでサンプル コードを実行します。 これにより、CLI の残りの手順を実行している間にサンプル コードの実行を継続できます。

  1. 前提条件の一部ではない場合は、GitHub から Microsoft Azure IoT SDK for .NET リポジトリを今すぐダウンロードまたは複製してください。

  2. SDK をダウンロードまたはクローンしたフォルダーから、azure-iot-sdk-csharp\iothub\device\samples\how to guides\HubRoutingSample フォルダーに移動します。

  3. HubRoutingSample.csproj ファイルで指定されているように、Microsoft Azure IoT SDK for .NET と必要な依存関係をインストールします。

    dotnet restore
    
  4. 任意のエディターで Parameters.cs ファイルをオープンします。 このファイルには、サンプルでサポートされているパラメーターが表示されます。 この記事では、サンプルの実行時に PrimaryConnectionString パラメーターのみを使用します。 このファイルのコードを確認します。 変更は不要です。

  5. 次のコマンドを使用してサンプル コードをビルドし、実行します。

    <myDevicePrimaryConnectionString> を IoT ハブ内のデバイスのプライマリ接続文字列に置き換えてください。

    dotnet run --PrimaryConnectionString <myDevicePrimaryConnectionString>
    
  6. IoT Hub に送信されると、メッセージが出力として表示され始めます。 チュートリアルの間は、このプログラムを実行したままにします。

メッセージを表示するように IoT Explorer を構成する

IoT Hub に接続し、組み込みエンドポイントに到着したメッセージを読み取るように IoT Explorer を構成します。

まず、IoT ハブの接続文字列を取得します。

  1. Azure Portal で、お使いの IoT ハブに移動します。

  2. メニューの [セキュリティ設定] セクションから [共有アクセス ポリシー] を選択します。

  3. iothubowner ポリシーを選択します。

    Azure portal で iothubowner 共有アクセス ポリシーを選択する方法を示すスクリーンショット。

  4. プライマリ接続文字列をコピーします。

    Azure portal で IoT ハブの iothubowner ポリシーのプライマリ接続文字列をコピーする方法を示すスクリーンショット。

次に、その接続文字列を使用して、IoT ハブ用に IoT Explorer を構成します。

  1. 開発用マシンで IoT Explorer を開きます。

  2. 表示された場合は、[ IoT Hub 接続文字列経由で接続] を選択します。

    Azure IoT Explorer の [ようこそ] ウィンドウを示すスクリーンショット。IoT Hub 接続文字列経由で接続するオプションが強調表示されています。

  3. [接続の追加] を選択します。

    Azure IoT Explorer での IoT ハブ接続の追加を示すスクリーンショット。

  4. ハブの接続文字列をテキスト ボックスに貼り付けます。

  5. [保存] を選択します。

  6. IoT ハブに接続すると、デバイスの一覧が表示されます。 このチュートリアル用に作成したデバイス ID を選択します。

  7. [テレメトリ] を選択します。

  8. デバイスが引き続き実行されている状態で、[スタート] を選択します。 デバイスが実行されていない場合は、テレメトリを表示できません。

    Azure IoT Explorer のデバイスの [テレメトリ] ウィンドウを示すスクリーンショット。デバイス テレメトリの監視を開始する方法が強調表示されています。

  9. デバイスから届くメッセージが表示され、最新のものが上部に表示されます。

    組み込みエンドポイント上の IoT ハブに到着するメッセージを示すスクリーンショット。

    受信メッセージをしばらく見て、通常、ストレージ、クリティカルの 3 種類のメッセージ表示を確認します。 3 種類のメッセージがすべて表示されたら、デバイスを停止できます。

これらのメッセージはすべて、IoT ハブの既定の組み込みエンドポイントに到着します。 次のセクションでは、カスタム エンドポイントを作成し、メッセージのプロパティに基づいて、これらのメッセージの一部をストレージにルーティングします。 これらのメッセージは、IoT Hub 内の他のルートと一致しない場合にのみ組み込みエンドポイントに送信されるため、IoT Explorer に表示されなくなります。

メッセージ ルーティングを設定する

シミュレートされたデバイスからメッセージに添付されたプロパティに基づいて、メッセージを異なるリソースにルーティングします。 カスタム ルーティングされないメッセージは、既定のエンドポイント (メッセージ/イベント) に送信されます。

このチュートリアルのサンプル アプリは、IoT ハブに送信する各メッセージにレベル プロパティを割り当てます。 各メッセージには、 通常ストレージ、または クリティカルのレベルがランダムに割り当てられます。

最初の手順では、データのルーティング先のエンドポイントを設定します。 2 番目の手順では、そのエンドポイントを使用するメッセージ ルートを設定します。 ルーティングの設定後、ポータルでエンドポイントとメッセージ ルートを表示できます。

ストレージ アカウントの作成

Azure Storage アカウントとそのアカウント内にコンテナーを作成します。このコンテナーには、そのアカウントにルーティングされるデバイス メッセージが保持されます。

  1. Azure portal で、[ストレージ アカウント] を検索します。

  2. [作成] を選択します

  3. ストレージ アカウントには、下の値を指定します。

    パラメーター 価値
    サブスクリプション IoT Hub を含む同じサブスクリプションを選択します。
    リソース グループ IoT Hub を含む同じリソース グループを選択します。
    Storage account name (ストレージ アカウント名) グローバルに一意の名前を [ストレージ アカウント] に指定します。
    パフォーマンス 既定値の [標準] をそのまま使用します。

    Azure portal でストレージ アカウントを作成する方法を示すスクリーンショット。

  4. [確認と作成] を選択すると、他のすべての既定値をそのまま使用できます。

  5. 検証が完了した後、 [作成] を選択します。

  6. デプロイが完了したら、[リソースに移動] を選択します。

  7. [ストレージ アカウント] メニューの [データ ストレージ] セクションから [コンテナー] を選択します。

  8. [+ コンテナー] を選択して、新しいコンテナーを作成します。

    Azure portal でストレージ アカウントのコンテナーを作成する方法を示すスクリーンショット。

  9. コンテナーの名前を入力し、[作成] を選択します。

ストレージ アカウントへのルーティング

ストレージ アカウントへのルーティングを設定します。 このセクションでは、作成したストレージ アカウントを指す新しいエンドポイントを定義します。 次に、 level プロパティが ストレージに設定されているメッセージをフィルター処理するルートを作成し、それらのメッセージをストレージ エンドポイントにルーティングします。

データは、既定の Apache Avro 形式または JSON のいずれかで Blob Storage に書き込むことができます。

エンコード形式は、BLOB ストレージ エンドポイントの構成時にのみ設定できます。 以前に構成したエンドポイントの形式を変更することはできません。 JSON エンコードを使用する場合は、メッセージのシステム プロパティで contentType を JSON に設定し、contentEncoding を UTF-8 に設定する必要があります。

BLOB ストレージ エンドポイントの使用の詳細については、 ルーティング エンドポイントとしての Azure Storage に関するページを参照してください。

重要

この記事では、Shared Access Signature を使用してサービスに接続する手順について説明しています。 この認証方法はテストと評価には便利ですが、サービスに対する認証方法としては、Microsoft Entra ID またはマネージド ID を使用する方が安全です。 詳細については、 クラウド セキュリティ > IoT ソリューションのセキュリティのベスト プラクティスに関するページを参照してください。

  1. Azure portal で IoT Hub に移動します。

  2. リソース メニューの [ハブ設定] で、[メッセージ ルーティング] を選択し、[追加] を選択します。

    IoT ハブに新しいルートを追加するための [追加] ボタンの場所を示すスクリーンショット。

  3. [エンドポイント] タブで、次の情報を指定してストレージ エンドポイントを作成します。

    パラメーター
    [エンドポイントの種類] [ストレージ] を選択します。
    [エンドポイント名] このエンドポイントの一意の名前を指定します。
    [Azure Storage コンテナー] [コンテナーを選択します] を選択します。 プロンプトに従って、前のセクションで作成したストレージ アカウントとコンテナーを選択します。
    [エンコード] [JSON] を選択します。 このフィールドが淡色表示されている場合、ストレージ アカウント リージョンは JSON をサポートしません。 その場合は、既定の [AVRO] で続行します。

    正しいオプションが選ばれている [ストレージ エンドポイントの追加] ウィンドウを示すスクリーンショット。

  4. 残りのパラメーターの既定値をそのまま使用し、[作成 + 次へ] を選択します。

  5. [ルート] タブで、次の情報を指定して、作成したストレージ エンドポイントを指すルートを作成します。

    パラメーター
    名前 ルートの名前を作成します。
    データ ソース ドロップダウン リストから [デバイス テレメトリ メッセージ] が選択されていることを確認します。
    ルートの有効化 このフィールドがオンにされていることを確認します。
    ルーティング クエリ クエリ文字列として、「level="storage"」と入力します。

    ルーティング クエリを使用したルートの追加を示すスクリーンショット。

  6. [エンリッチメントの作成 + スキップ] を選択します。

ルーティングされたメッセージを表示する

IoT Hub でルートが作成され、有効になると、クエリ条件を満たすメッセージのストレージ エンドポイントへのルーティングがすぐに開始されます。

IoT Explorer を使用して組み込みエンドポイントを監視する

開発用マシンの IoT Explorer セッションに戻ります。 IoT Explorer が IoT ハブの組み込みエンドポイントを監視することを思い出してください。 つまり、作成したカスタム ルートによってルーティング されていない メッセージのみが表示されます。

コードを実行して、サンプルをもう一度開始します。 受信メッセージをしばらく監視すると、levelnormal または critical に設定されているメッセージのみが表示されます。

ストレージ コンテナー内のメッセージを表示する

メッセージがストレージ コンテナーに到着していることを確認します。

  1. Azure portal のストレージ アカウントに移動します。

  2. メニューの [データ ストレージ] セクションから [コンテナー] を選択します。

  3. このチュートリアル用に作成したコンテナーを選択します。

  4. IoT ハブの名前を持つフォルダーが存在する必要があります。 .json ファイルが表示されるまで、ファイル構造をドリルダウンします。

    ストレージ内のルーティングされたメッセージの検索を示すスクリーンショット。

  5. JSON ファイルを選択し、[ダウンロード] を選択して JSON ファイルをダウンロードします。 level プロパティが storage に設定されているデバイスからのメッセージが含まれていることを確認します。

  6. サンプルの実行を停止します。

リソースをクリーンアップする

このチュートリアルで使用した Azure リソースをすべて削除するには、リソース グループを削除します。 これにより、そのグループ内に含まれているすべてのリソースも削除されます。 リソース グループ全体を削除しない場合は、Azure portal を使用して個々のリソースを見つけて削除します。

次のチュートリアルに進む場合は、ここで作成したリソースを残してください。

  1. Azure portal で、このチュートリアルの IoT ハブとストレージ アカウントを含むリソース グループに移動します。
  2. リソース グループ内にあるすべてのリソースを確認して、クリーンアップするリソースを決定します。
    • すべてのリソースを削除する場合は、 [リソース グループの削除] を選択します。
    • 特定のリソースのみを削除する場合は、各リソース名の横にあるチェック ボックスを使用して、削除するリソースを選択します。 次に、 [削除] を選択します。

次のステップ

このチュートリアルでは、Azure リソースのカスタム エンドポイントを作成し、そのエンドポイントにデバイス メッセージを送信するルートを作成する方法について説明しました。 次のチュートリアルに進み、ダウンストリーム処理を簡略化するために使用できる追加のデータでメッセージをエンリッチする方法を学習します