次の方法で共有


チュートリアル:Azure Stream Analytics を IoT Edge モジュールとしてデプロイする

適用対象:IoT Edge 1.5 のチェックマーク IoT Edge 1.5

重要

IoT Edge 1.5 LTS は、サポートされているリリースです。 IoT Edge 1.4 LTS は、2024 年 11 月 12 日をもってサポートが終了しています。 以前のリリースの場合は、「IoT Edge を更新する」を参照してください。

このチュートリアルでは、Azure Portal で Azure Stream Analytics ジョブを作成し、追加のコードなしで IoT Edge モジュールとしてデプロイします。

このチュートリアルでは、以下の内容を学習します。

  • エッジでデータを処理するための Azure Stream Analytics ジョブを作成します。
  • 新しい Azure Stream Analytics ジョブを他の IoT Edge モジュールと接続します。
  • Azure Stream Analytics ジョブを Azure portal から IoT Edge デバイスに展開します。

Azure Stream Analytics ジョブのステージングとデプロイを含むストリーム アーキテクチャを示す図。

このチュートリアルの Stream Analytics モジュールでは、30 秒にわたって平均気温が繰り返し計算され、 平均が 70 に達すると、モジュールはデバイスがアクションを実行するためのアラートを送信します。 この場合、アクションはシミュレートされた温度センサーをリセットすることです。 運用環境では、この機能を使用してマシンをシャットダウンしたり、温度が危険なレベルに達したときに予防措置を講じたりすることができます。

IoT Edgeで Azure Stream Analytics を使用する理由

IoT ソリューションの多くが、分析サービスを使用して、IoT デバイスからクラウドに送信されたデータの分析情報を得ます。 Azure IoT Edge では、 Azure Stream Analytics ロジックをデバイス自体に移動します。 エッジでテレメトリ ストリームを処理すると、アップロードされたデータの量と、アクションにつながる分析情報への対応にかかる時間が短縮されます。 Azure IoT Edge と Azure Stream Analytics を統合して、ワークロードの開発を簡素化します。

Azure Stream Analytics では、クラウドおよび IoT Edge デバイスでのデータ分析に構造化クエリ構文を使用します。 詳細については、Azure Stream Analytics のドキュメントを参照してください。

前提条件

Azure アカウントをお持ちでない場合は、開始する前に無料アカウントを作成してください。

  • Azure IoT Edge デバイス。

    Linux または Windows デバイスのクイックスタートの手順に従って、Azure 仮想マシンを IoT Edge デバイスとして使用します

  • Azure の Free レベルまたは Standard レベルの IoT Hub

Azure Stream Analytics ジョブの作成

このセクションでは、次の操作を行う Azure Stream Analytics ジョブを作成します。

  • IoT Edge デバイスからデータを受信します。
  • テレメトリ データに対して、設定された範囲外の値を照会します。
  • クエリ結果に基づいて IoT Edge デバイスに対してアクションを実行します。

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

IoT Edge デバイスで実行する Azure Stream Analytics ジョブを作成する場合は、デバイスからアクセスできるように格納する必要があります。 既存の Azure Storage アカウントを使用することも、新しいアカウントを作成することもできます。

  1. Azure portal で、 [リソースの作成]>[ストレージ]>[ストレージ アカウント] の順に移動します。

  2. ストレージ アカウントを作成するには、以下の値を指定します。

    フィールド
    サブスクリプション IoT ハブと同じサブスクリプションを選択します。
    リソースグループ IoT Edge のクイック スタートとチュートリアルでは、すべてのテスト リソースに同じリソース グループを使用します。 たとえば、IoTEdgeResources を使用します。
    名前 ストレージ アカウント用に一意の名前を指定します。
    場所 近くの [場所] を選択します。
  3. 他のフィールドの既定値をそのまま使用し、[ 確認と作成] を選択します。

  4. 設定を確認し、[ 作成] を選択します。

新しいジョブを作成する

  1. Azure portal で次を選択します。

    1. リソースの作成
    2. 左側のメニューから [モノのインターネット]
    3. 検索バーに 「Stream Analytics 」と入力して Azure Marketplace で検索する
    4. ドロップダウン メニューから [作成][Stream Analytics ジョブ] の順に選択します
  2. 新しい Stream Analytics ジョブを作成するには、次の値を指定します。

    フィールド
    名前 ジョブの名前を指定します。 たとえば、「IoTEdgeJob」と指定します。
    サブスクリプション IoT ハブと同じサブスクリプションを選択します。
    リソースグループ IoT Edge のクイックスタートとチュートリアルで作成するすべてのテスト リソースに同じリソース グループを使用します。 たとえば、IoTEdgeResources という名前のリソースです。
    リージョン 近くの場所を選択します。
    ホスティング環境 [Edge] を選択します。 このオプションを使用すると、クラウドではなく IoT Edge デバイスにデプロイできます。
  3. [Review + create](レビュー + 作成) を選択します。

  4. オプションを確認し、[作成] を選択します。

ジョブを構成する

Azure portal で Stream Analytics ジョブを作成したら、渡されるデータに対して実行する 入力出力クエリ を使用して構成します。

このセクションでは、IoT Edge デバイスから温度データを受信するジョブを作成する方法について説明します。 これは、ローリング 30 秒のウィンドウでデータを分析します。 そのウィンドウの平均気温が 70 度を超える場合、ジョブは IoT Edge デバイスにアラートを送信します。

注意

ジョブをデプロイするときに、次のセクション「 IoT Edge 設定の構成」で、データの取得元と移動先を指定します。

入力と出力を設定する

  1. Azure portal で Stream Analytics ジョブに移動します。

  2. [ジョブ トポロジ] で [入力] を選択し、[入力の追加] を選択します。

  3. ドロップダウン リストから [Edge Hub ] を選択します。

    一覧に [Edge Hub] オプションが表示されない場合は、Stream Analytics ジョブがクラウドでホストされているジョブとして作成されている可能性があります。 新しいジョブを作成して、ホスティング環境として [Edge ] を選択してください。

  4. [新しい入力] ウィンドウで、入力のエイリアスとして「温度」と入力します。

  5. 他のフィールドは既定値のままにして、 [保存] を選択します。

  6. [ジョブ トポロジ] で [出力] を選択し、[追加] を選択します。

  7. ドロップダウン リストで、 [Edge Hub] を選択します。

  8. [新しい出力] ウィンドウで、出力のエイリアスとして「アラート」と入力します。

  9. 他のフィールドは既定値のままにして、 [保存] を選択します。

クエリを作成する

  1. [ジョブ トポロジ] で、 [クエリ] を選択します。

  2. 既定のテキストを次のクエリに置き換えます。

    SELECT  
        'reset' AS command
    INTO
       alert
    FROM
       temperature TIMESTAMP BY timeCreated
    GROUP BY TumblingWindow(second,30)
    HAVING Avg(machine.temperature) > 70
    

    このクエリで、30 秒間隔の平均マシン温度が 70 度に達すると、SQL コードによって reset コマンドがアラート出力に送信されます。 reset コマンドは、アクションとしてセンサーに事前プログラミングされます。

  3. [クエリの保存] を選択します。

IoT Edge の設定を構成する

IoT Edge デバイスに Stream Analytics ジョブをデプロイするには、Azure Stream Analytics ジョブをストレージ アカウントに関連付けます。 ジョブをデプロイすると、ジョブ定義はコンテナーとしてストレージ アカウントにエクスポートされます。

  1. Stream Analytics サービスの [設定] メニューで、[ ストレージ アカウントの設定] を選択します。

  2. [Select Blob storage/ADLS Gen 2 from your subscriptions](サブスクリプションから Blob Storage または ADLS Gen 2 を選択する) オプションを選択します。

  3. Azure ストレージ アカウントがページに自動的に表示されます。 表示されない場合は、ストレージを作成していることを確認してください。 [ストレージ アカウント] フィールドに表示されているものとは異なる ストレージ を選択する必要がある場合は、ドロップダウン メニューから選択します。

  4. 変更を加えた場合は 、[保存] を選択します

ジョブのデプロイ

これで、IoT Edge デバイスに Azure Stream Analytics ジョブをデプロイする準備ができました。

このセクションでは、Azure portal のモジュールの設定ウィザードを使用して、配置マニフェストを作成します。 配置マニフェストは、デバイスにデプロイされるすべてのモジュールを記述する JSON ファイルです。 マニフェストには、モジュール イメージが格納されるコンテナー レジストリ、モジュールの管理方法、モジュール間の通信方法も示されます。 IoT Edge デバイスは、IoT Hub からその配置マニフェストを取得し、その中の情報を使用して、割り当てられているすべてのモジュールをデプロイおよび構成します。

このチュートリアルでは、2 つのモジュールをデプロイします。 1 つ目は、SimulatedTemperatureSensor です。これは、温度と湿度のセンサーをシミュレートするモジュールです。 2 つ目は、Stream Analytics ジョブです。 センサー モジュールでは、ジョブ クエリで分析されるデータのストリームが提供されます。

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

  2. [デバイス管理] メニューで [デバイス] を選択し、それを開く IoT Edge デバイスを選択します。

  3. [Set modules](モジュールの設定) を選びます。

  4. 以前、このデバイスに SimulatedTemperatureSensor モジュールをデプロイしたことがある場合は、自動入力されている可能性があります。 そうでない場合は、次の手順でモジュールを追加します。

    1. [+ 追加] を選択し、[IoT Edge モジュール] を選択します。
    2. 名前は、「SimulatedTemperatureSensor」と入力します。
    3. イメージ URI として「mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.5」と入力します。
    4. 他の設定については既定値のままにし、[追加] を選択します。
  5. 次の手順に従って、ご自身の Azure Stream Analytics Edge ジョブを追加します。

    1. [+ 追加][Azure Stream Analytics モジュール] の順に選択します。
    2. 自分のサブスクリプションと、作成した Azure Stream Analytics Edge ジョブを選びます。
    3. [保存] を選択します。

    変更を保存すると、Stream Analytics ジョブの詳細が、作成したストレージ コンテナーに発行されます。

  6. Stream Analytics の追加でデプロイが完了したら、[モジュールの設定] ページに 2 つの新しいモジュールが表示されることを確認します。

    2 つの新しいモジュールがデバイス上にあることを確認するスクリーンショット。スクリーンショットには、[確認と作成] ボタンの場所も示されています。

  7. [Review + create](レビュー + 作成) を選択します。 配置マニフェストが表示されます。

  8. [作成] を選択します。

  9. デバイスの [モジュールの設定] ページで、数分後にモジュールが一覧表示され、実行されていることを確認できます。 モジュールが表示されない場合はページを更新するか、数分待ってからもう一度更新してください。

2 つの新しいモジュールを理解する

  1. デバイスの [モジュールの設定] タブで、Stream Analytics モジュール名を選択して、[oT Edge モジュールの更新] ページに移動します。 ここで、設定を更新できます。

    [設定] タブには、標準の Azure Stream Analytics イメージを指す [イメージの URI] があります。 この 1 つのイメージが、IoT Edge デバイスにデプロイされるすべての Stream Analytics モジュールに使用されます。

    [モジュール ツインの設定] タブには、ASAJobInfo という Azure Stream Analytics (ASA) プロパティを定義する JSON が表示されます。 そのプロパティの値は、ストレージ コンテナー内のジョブ定義を指しています。 このプロパティによって、特定のジョブの詳細で Stream Analytics イメージが構成されます。

    既定では、Stream Analytics モジュールは、基になるジョブと同じ名前になります。 必要に応じて、このページでモジュール名を変更できますが、必須ではありません。

  2. 変更を加えた場合は [適用] を、変更しなかった場合は [キャンセル] を選択します。

モジュールにルートを割り当てる

  1. [デバイスにモジュールを設定してください:<your-device-name>] ページで、[Next: Routes](次へ: ルート) を選択します。

  2. [ルート] タブで、モジュールと IoT Hub の間でメッセージが渡される方法を定義します。 メッセージは、名前と値のペアを使って作成されます。

    次の表に示すペアでルートの名前と値を追加します。 {moduleName} のインスタンスを Azure Stream Analytics モジュールの名前に置き換えます。 このモジュールは、Azure portal に表示される [モジュールの設定] ページのデバイスのモジュール一覧に表示される名前と同じである必要があります。

    Azure portal 内の IoT Edge デバイス内の Stream Analytics モジュール名を示すスクリーンショット。

    名前
    テレメトリーデータをクラウドへ FROM /messages/modules/SimulatedTemperatureSensor/* INTO $upstream
    クラウドへのアラート FROM /messages/modules/{moduleName}/* INTO $upstream
    alertsToReset FROM /messages/modules/{moduleName}/* INTO BrokeredEndpoint("/modules/SimulatedTemperatureSensor/inputs/control")
    telemetryToAsa FROM /messages/modules/SimulatedTemperatureSensor/* INTO BrokeredEndpoint("/modules/{moduleName}/inputs/temperature")

    ここで宣言するルートでは、IoT Edge デバイスを通過するデータのフローを定義します。 SimulatedTemperatureSensor のテレメトリ データは、IoT Hub に送信されます。また、Stream Analytics ジョブで構成された温度入力にも送信されます。 アラート出力メッセージは、IoT Hub に送信され、リセット コマンドをトリガーするように SimulatedTemperatureSensor モジュールにも送信されます。

  3. 確認と作成 を選択します。

  4. [確認と作成] タブでは、ウィザードで指定した情報がどのように JSON 配置マニフェストに変換されるかを確認できます。

  5. マニフェストの確認が完了したら、[作成] を選択してモジュールの設定を完了します。

データの表示

IoT Edge デバイスに移動して、Azure Stream Analytics モジュールと SimulatedTemperatureSensor モジュールの間の相互作用を確認します。

注意

デバイスに仮想マシンを使用している場合は、 Azure Cloud Shell を使用して、すべての Azure 認証済みサービスに直接アクセスします。

  1. すべてのモジュールが Docker で実行されていることを確認します。

    iotedge list  
    
  2. すべてのシステム ログとメトリック データを表示します。 {moduleName} を Azure Stream Analytics モジュールの名前に置き換えます。

    iotedge logs -f {moduleName}  
    
  3. センサー ログを表示して、リセット コマンドの SimulatedTemperatureSensor への影響を表示します。

    iotedge logs SimulatedTemperatureSensor
    

    マシンの温度が徐々に上昇し、70 度に達して 30 秒間経過するのを観察できます。 次に、Stream Analytics モジュールによってリセットがトリガーされ、マシンの温度が 21 度まで下降します。

    モジュール ログ出力の reset コマンドのスクリーンショット。

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

次の推奨記事に進む場合は、作成したリソースと構成を保持し、再利用します。 また、同じ IoT Edge デバイスをテスト デバイスとして使用し続けることもできます。

それ以外の場合は、課金されないように、この記事で使用したローカル構成と Azure リソースを削除します。

Azure リソースを削除する

Azure のリソースとリソース グループは、削除すると元に戻すことができません。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。 保持するリソースを含む既存のリソース グループ内に IoT Hub を作成した場合は、リソース グループではなく、IoT Hub リソース自体のみを削除します。

リソースを削除するには、次の手順に従います。

  1. Azure portal にサインインし、 [リソース グループ] を選択します。

  2. IoT Edge のテスト リソースを含んだリソース グループの名前を選択します。

  3. リソース グループに含まれているリソースの一覧を確認します。 それらすべてを削除する場合は、[リソース グループの削除] を選択します。 一部だけを削除する場合は、削除する各リソースを選択して個別に削除してください。

次のステップ

このチュートリアルでは、IoT Edge デバイスからのデータを分析するように Azure Stream Analytics ジョブを設定します。 Azure Stream Analytics モジュールを IoT Edge デバイスに読み込んで、温度の上昇をローカルで処理して対応し、集計されたデータ ストリームをクラウドに送信しました。 Azure IoT Edge がソリューションの構築にどのように役立つかについては、次のチュートリアルをお試しください。