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

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

重要

IoT Edge 1.4 がサポートされているリリースです。 以前のリリースの場合は、「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 無料アカウントを作成してください。

  • Azure IoT Edge デバイス。

    Linux または Windows デバイス用のクイック スタートに記載された手順に従うことで、Azure 仮想マシンを IoT Edge デバイスとして使用できます。

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

Azure Stream Analytics ジョブの作成

このセクションでは、以下のステップを実行する Azure Stream Analytics ジョブを作成します。

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

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

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

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

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

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

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

新しいジョブを作成する

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

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

    Marketplace で Stream Analytics ジョブ サービスを検索する場所と、新しいジョブを作成する場所を示すスクリーンショット。

  2. 新しい Stream Analytics ジョブを作成するには、次の値を指定します。

    フィールド
    Name ジョブの名前を指定します。 たとえば、「IoTEdgeJob」と指定します。
    サブスクリプション IoT ハブと同じサブスクリプションを選択します。
    Resource group 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. [ジョブ トポロジ] で、[入力][入力の追加] の順に選択します。

    Azure portal でストリーム入力を追加する場所を示すスクリーンショット。

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

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

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

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

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

    Azure portal でストリーム出力を追加する場所を示すスクリーンショット。

  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. 変更を加える必要があった場合は、[保存] を選択します。

    Azure portal で、Stream Analytics ジョブでストレージ アカウントを追加する場所を示すスクリーンショット。

ジョブのデプロイ

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

    Azure portal でのデバイスのモジュール一覧を示すスクリーンショット。

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 モジュール名を示すスクリーンショット。

    名前
    telemetryToCloud FROM /messages/modules/SimulatedTemperatureSensor/* INTO $upstream
    alertsToCloud 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 ハブを作成した場合は、リソース グループを削除するのではなく、IoT ハブ リソースだけを削除してください。

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

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

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

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

次のステップ

このチュートリアルでは、IoT Edge デバイスのデータを分析するように、Azure Streaming Analytics ジョブを構成しました。 その後、この Azure Stream Analytics モジュールを IoT Edge デバイスに読み込んで、ローカルで温度上昇に対処し、集計されたデータ ストリームをクラウドに送信しました。 Azure IoT Edge がビジネス ソリューションを作成する方法をさらに確認するには、他のチュートリアルに進んでください。