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

Azure IoT Hub のメッセージ ルーティングを使用して、Blob Storage、Service Bus キュー、Service Bus トピック、Event Hubs などの IoT デバイス Azure サービスからテレメトリ データを送信します。

すべての IoT ハブには、Event Hubs との互換性がある、既定の組み込みのエンドポイントがあります。 ルーティング クエリを定義することで、カスタム エンドポイントを作成し、他の Azure サービスにメッセージをルーティングすることもできます。 IoT ハブに到着した各メッセージは、ルーティング クエリが一致するすべてのエンドポイントにルーティングされます。 メッセージが、定義されているルーティング クエリのいずれとも一致しない場合、既定のエンドポイントにルーティングされます。

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

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

前提条件

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

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

  • このチュートリアルでは、C# 向けの Azure IoT サンプルからのサンプル コードを使用します。

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

  • 必要に応じて、Azure IoT Explorer をインストールします。 このツールは、メッセージが IoT ハブに到着したときのメッセージの監視に役立ちます。

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

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

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

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

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

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

    Azure Portal で新しいユーザーを追加する。

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

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

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

    デバイスの詳細ページから主キーをコピーする。

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

ヒント

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

  1. 前提条件の一部として参加しなかった場合は、GitHub から C# リポジトリの Azure IoT サンプルを今すぐにダウンロードまたは複製してください。

  2. サンプル フォルダーで、 /iot-hub/Tutorials/Routing/SimulatedDevice/ フォルダーに移動します。

  3. 任意のエディターで Program.cs ファイルをオープンします。

  4. Program クラスの上部にある変数定義を見つけます。 次の変数を自分の情報で更新します。

    • s_myDeviceId: デバイスを登録するときに割り当てたデバイス ID。
    • s_iotHubUri: IOTHUB_NAME.azure-devices.net 形式を受け取る IoT ハブのホスト名。
    • s_deviceKey: デバイス ID 情報からコピーしたデバイス キー。
  5. ファイルを保存して閉じます。

  6. Azure IoT C# SDK と SimulatedDevice.csproj ファイルに指定されている必要な依存関係をインストールします。

    dotnet restore
    
  7. サンプル コードを実行する。

    dotnet run
    
  8. メッセージが IoT Hub に送信されるときに、出力用に印刷されたメッセージが表示されるようになります。 チュートリアルの間は、このプログラムを実行したままにします。

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

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

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

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

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

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

    iothubowner 共有アクセス ポリシーを開く。

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

    iothubowner プライマリ接続文字列をコピーする。

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

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

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

    IoT エクスプローラーで IoT ハブ接続を追加する。

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

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

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

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

  7. [スタート] を選択します。

    IoT エクスプローラーでデバイス テレメトリの監視を開始する。

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

    組み込みのエンドポイントで IoT ハブに到着するメッセージを表示する。

受信メッセージをしばらく見て、通常、ストレージ、クリティカルの 3 種類のメッセージ表示を確認します。

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

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

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

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

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

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

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

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

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

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

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

    ストレージ アカウントを作成する。

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

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

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

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

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

    ストレージ コンテナーを作成する

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

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

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

Note

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

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

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

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

  2. メニューの [ハブ設定] セクションから [メッセージ ルーティング] を選択します。

  3. [ルート] タブで [追加] を選択します。

    新しいメッセージ ルートを追加する。

  4. [エンドポイント] フィールドの横にある [エンドポイントの追加] を選択し、ドロップダウン メニューから [ストレージ] を選択します。

    ルートの新しいエンドポイントを追加する。

  5. 新しいストレージ エンドポイントに関して、次の情報を入力します。

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

    コンテナーを選択する。

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

  7. ストレージ エンドポイントを追加したので、新しいルートの作成を続けます。 新しいルートに関して、次の情報を入力します。

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

    ルーティング クエリ情報の保存

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

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

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

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

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

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

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

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

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

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

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

    ストレージでルーティングされたメッセージを探す。

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

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

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

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

次のステップ

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