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

IoT ソリューションの多くが、分析サービスを使用して、IoT デバイスからクラウドに送信されたデータの分析情報を得ます。Many IoT solutions use analytics services to gain insight about data as it arrives in the cloud from IoT devices. Azure IoT Edge を使用すると、Azure Stream Analytics ロジックを取得し、そのロジックをデバイス自体に移動できます。With Azure IoT Edge, you can take Azure Stream Analytics logic and move it onto the device itself. エッジで利用統計情報のストリームを処理することで、アップロードされるデータの量を削減し、アクションにつながる分析情報への対応にかかる時間を短縮できます。By processing telemetry streams at the edge, you can reduce the amount of uploaded data and reduce the time it takes to react to actionable insights.

Azure IoT Edge と Azure Stream Analytics が統合され、ワークロードの開発が簡素化されます。Azure IoT Edge and Azure Stream Analytics are integrated to simplify your workload development. Azure portal で Azure Stream Analytics ジョブを作成し、追加のコードなしで IoT Edge モジュールとしてデプロイできます。You can create an Azure Stream Analytics job in the Azure portal and then deploy it as an IoT Edge module with no additional code.

Azure Stream Analytics には、クラウド上と IoT Edge デバイス上の両方でのデータ分析のために十分に構造化されたクエリ構文が用意されています。Azure Stream Analytics provides a richly structured query syntax for data analysis, both in the cloud and on IoT Edge devices. 詳細については、Azure Stream Analytics のドキュメントを参照してください。For more information, see Azure Stream Analytics documentation.

このチュートリアルの Stream Analytics モジュールでは、30 秒にわたって平均気温が繰り返し計算され、The Stream Analytics module in this tutorial calculates the average temperature over a rolling 30-second window. その平均値が 70 に達すると、モジュールからアラートが送信され、デバイスでアクションが実行されます。When that average reaches 70, the module sends an alert for the device to take action. ここでは、シミュレートされた温度センサーをリセットするというアクションです。In this case, that action is to reset the simulated temperature sensor. この機能を運用環境で使って、温度が危険なレベルに達したときにマシンを停止させたり予防策を講じたりできます。In a production environment, you might use this functionality to shut off a machine or take preventative measures when the temperature reaches dangerous levels.

このチュートリアルでは、以下の内容を学習します。In this tutorial, you learn how to:

  • エッジでデータを処理するための Azure Stream Analytics ジョブを作成します。Create an Azure Stream Analytics job to process data on the edge.
  • 新しい Azure Stream Analytics ジョブを他の IoT Edge モジュールと接続します。Connect the new Azure Stream Analytics job with other IoT Edge modules.
  • Azure Stream Analytics ジョブを Azure portal から IoT Edge デバイスに展開します。Deploy the Azure Stream Analytics job to an IoT Edge device from the Azure portal.

図 - チュートリアルのアーキテクチャ: ASA ジョブのステージとデプロイ

![Diagram - Tutorial architecture: stage and deploy ASA job](./media/tutorial-deploy-stream-analytics/asa-architecture.png)

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。If you don't have an Azure subscription, create a free account before you begin.

前提条件Prerequisites

Azure IoT Edge デバイス:An Azure IoT Edge device:

  • Linux または Windows デバイス用のクイック スタートに記載された手順に従うことで、Azure 仮想マシンを IoT Edge デバイスとして使用できます。You can use an Azure virtual machine as an IoT Edge device by following the steps in the quickstart for Linux or Windows devices.

クラウド リソース:Cloud resources:

  • Azure の Free レベルまたは Standard レベルの IoT HubA free or standard-tier IoT Hub in Azure.

Azure Stream Analytics ジョブの作成Create an Azure Stream Analytics job

このセクションでは、以下の手順を実行する Azure Stream Analytics ジョブを作成します。In this section, you create an Azure Stream Analytics job that will do the following steps:

  • IoT Edge デバイスからデータを受信します。Receive data from your IoT Edge device.
  • テレメトリ データに対して、設定範囲外の値を照会します。Query the telemetry data for values outside a set range.
  • クエリ結果に基づいて、IoT Edge デバイス上で操作を実行します。Take action on the IoT Edge device based on the query results.

ストレージ アカウントの作成Create a storage account

Azure Stream Analytics ジョブを作成して IoT Edge デバイスで実行する場合は、デバイスから呼び出すことができるようにジョブを格納する必要があります。When you create an Azure Stream Analytics job to run on an IoT Edge device, it needs to be stored in a way that can be called from the device. 既存の Azure Storage アカウントを使用するか、ここで新しいストレージ アカウントを作成することができます。You can use an existing Azure Storage account, or create a new one now.

  1. Azure portal で、 [リソースの作成] > [ストレージ] > [ストレージ アカウント] の順に移動します。In the Azure portal, go to Create a resource > Storage > Storage account.

  2. ストレージ アカウントを作成するには、以下の値を指定します。Provide the following values to create your storage account:

    フィールドField Value
    サブスクリプションSubscription IoT ハブと同じサブスクリプションを選択します。Choose the same subscription as your IoT hub.
    Resource groupResource group IoT Edge のクイックスタートおよびチュートリアルのすべてのテスト リソースに、同じリソース グループを使用することをお勧めします。We recommend that you use the same resource group for all of your test resources for the IoT Edge quickstarts and tutorials. たとえば、IoTEdgeResources を使用します。For example, IoTEdgeResources.
    名前Name ストレージ アカウント用に一意の名前を指定します。Provide a unique name for your storage account.
    場所Location 近くの場所を選択します。Choose a location close to you.
  3. 他のフィールドは既定値のままにして、 [確認と作成] を選択します。Keep the default values for the other fields and select Review + Create.

  4. 設定を確認して [作成] を選択します。Review your settings then select Create.

新しいジョブを作成するCreate a new job

  1. Azure portal で、 [リソースの作成] > [モノのインターネット (IoT)] > [Stream Analytics ジョブ] の順に移動します。In the Azure portal, go to Create a resource > Internet of Things > Stream Analytics job.

  2. ジョブを作成するには、以下の値を指定します。Provide the following values to create your job:

    フィールドField Value
    ジョブ名Job name ジョブの名前を指定します。Provide a name for your job. たとえば、「IoTEdgeJob」と指定します。For example, IoTEdgeJob
    サブスクリプションSubscription IoT ハブと同じサブスクリプションを選択します。Choose the same subscription as your IoT hub.
    Resource groupResource group IoT Edge のクイック スタートおよびチュートリアルで作成するすべてのテスト リソースに、同じリソース グループを使用することをお勧めします。We recommend that you use the same resource group for all of the test resources that you create during the IoT Edge quickstarts and tutorials. たとえば、IoTEdgeResources を使用します。For example, IoTEdgeResources.
    場所Location 近くの場所を選択します。Choose a location close to you.
    ホスティング環境Hosting environment [Edge] を選択します。Select Edge.
  3. [作成] を選択しますSelect Create.

ジョブを構成するConfigure your job

Azure portal で Stream Analytics ジョブが作成されたら、ジョブの入力、出力、および通過するデータに対して実行するクエリを構成することができます。Once your Stream Analytics job is created in the Azure portal, you can configure it with an input, an output, and a query to run on the data that passes through.

このセクションでは、入力、出力、クエリという 3 つの要素を使用して、IoT Edge デバイスから温度データを受け取るジョブを作成します。Using the three elements of input, output, and query, this section creates a job that receives temperature data from the IoT Edge device. そのデータは、反復的に 30 秒間隔で分析されます。It analyzes that data in a rolling 30-second window. その間隔内で、平均温度が 70 度を超えると、アラートが IoT Edge デバイスに送信されます。If the average temperature in that window goes over 70 degrees, then an alert is sent to the IoT Edge device. 次のセクションで、ジョブをデプロイするときに、データがどこから来てどこに行くかを正確に指定します。You'll specify exactly where the data comes from and goes in the next section when you deploy the job.

  1. Azure portal で Stream Analytics ジョブに移動します。Navigate to your Stream Analytics job in the Azure portal.

  2. [ジョブ トポロジ] で、 [入力][ストリーム入力の追加] の順に選択します。Under Job Topology, select Inputs then Add stream input.

    Azure Stream Analytics - 入力の追加

  3. ドロップダウン リストで、 [Edge Hub] を選択します。Choose Edge Hub from the drop-down list.

  4. [新しい入力] ウィンドウで、入力のエイリアスとして「温度」と入力します。In the New input pane, enter temperature as the input alias.

  5. 他のフィールドは既定値のままにして、 [保存] を選択します。Keep the default values for the other fields, and select Save.

  6. [ジョブ トポロジ][出力] を開き、 [追加] を選択します。Under Job Topology, open Outputs then select Add.

    Azure Stream Analytics - 出力の追加

  7. ドロップダウン リストで、 [Edge Hub] を選択します。Choose Edge Hub from the drop-down list.

  8. [新しい出力] ウィンドウで、出力のエイリアスとして「アラート」と入力します。In the New output pane, enter alert as the output alias.

  9. 他のフィールドは既定値のままにして、 [保存] を選択します。Keep the default values for the other fields, and select Save.

  10. [ジョブ トポロジ] で、 [クエリ] を選択します。Under Job Topology, select Query.

  11. 既定のテキストを次のクエリで置き換えます。Replace the default text with the following query. SQL コードは、30 秒間隔での平均マシン温度が 70 度に達した場合、リセット コマンドをアラート出力に送信します。The SQL code sends a reset command to the alert output if the average machine temperature in a 30-second window reaches 70 degrees. リセット コマンドは、実行できるアクションとして、センサーに事前にプログラミングされています。The reset command has been pre-programmed into the sensor as an action that can be taken.

    SELECT  
        'reset' AS command
    INTO
       alert
    FROM
       temperature TIMESTAMP BY timeCreated
    GROUP BY TumblingWindow(second,30)
    HAVING Avg(machine.temperature) > 70
    
  12. [クエリの保存] を選択します。Select Save query.

IoT Edge の設定を構成するConfigure IoT Edge settings

IoT Edge デバイスにデプロイされるように Stream Analytics ジョブを準備するには、ジョブをストレージ アカウント内のコンテナーに関連付ける必要があります。To prepare your Stream Analytics job to be deployed on an IoT Edge device, you need to associate the job with a container in a storage account. ジョブをデプロイしようとすると、ジョブ定義がストレージ コンテナーにエクスポートされます。When you go to deploy your job, the job definition is exported to the storage container.

  1. [構成][ストレージ アカウントの設定] を選択し、 [ストレージ アカウントの追加] を選択します。Under Configure, select Storage account settings then select Add storage account.

    Azure Stream Analytics - ストレージ アカウントの追加

  2. このチュートリアルの開始時に作成したストレージ アカウントをドロップダウン メニューから選択します。Select the Storage account that you created at the beginning of this tutorial from the drop-down menu.

  3. [コンテナー] フィールドで、 [新規作成] を選択し、ストレージ コンテナーの名前を指定します。For the Container field, select Create new and provide a name for the storage container.

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

ジョブのデプロイDeploy the job

IoT Edge デバイスに Azure Stream Analytics ジョブをデプロイする準備が整いました。You are now ready to deploy the Azure Stream Analytics job on your IoT Edge device.

このセクションでは、Azure portal のモジュールの設定ウィザードを使用して、配置マニフェストを作成します。In this section, you use the Set Modules wizard in the Azure portal to create a deployment manifest. 配置マニフェストは、デバイスにデプロイされるすべてのモジュール、モジュール イメージを格納するコンテナー レジストリ、モジュールの管理方法、およびモジュール間の通信方法を記述した JSON ファイルです。A deployment manifest is a JSON file that describes all the modules that will be deployed to a device, the container registries that store the module images, how the modules should be managed, and how the modules can communicate with each other. IoT Edge デバイスは、IoT Hub からその配置マニフェストを取得し、その中の情報を使用して、割り当てられているすべてのモジュールをデプロイおよび構成します。Your IoT Edge device retrieves its deployment manifest from IoT Hub, then uses the information in it to deploy and configure all of its assigned modules.

このチュートリアルでは、2 つのモジュールをデプロイします。For this tutorial, you deploy two modules. 1 つ目は、SimulatedTemperatureSensor です。これは、温度と湿度のセンサーをシミュレートするモジュールです。The first is SimulatedTemperatureSensor, which is a module that simulates a temperature and humidity sensor. 2 つ目は、Stream Analytics ジョブです。The second is your Stream Analytics job. センサー モジュールは、ジョブ クエリが分析するデータのストリームを提供します。The sensor module provides the stream of data that your job query will analyze.

  1. Azure Portal で、お使いの IoT ハブに移動します。In the Azure portal, navigate to your IoT hub.

  2. [IoT Edge] に移動し、ご自身の IoT Edge デバイスの詳細ページを開きます。Go to IoT Edge, and then open the details page for your IoT Edge device.

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

  4. 以前、このデバイスに SimulatedTemperatureSensor モジュールをデプロイしたことがある場合は、自動入力されている可能性があります。If you previously deployed the SimulatedTemperatureSensor module on this device, it might autopopulate. そうでない場合は、次の手順でモジュールを追加します。If it does not, add the module with the following steps:

    1. [追加] をクリックし、 [IoT Edge モジュール] を選択します。Click Add and select IoT Edge Module.
    2. 名前は、「SimulatedTemperatureSensor」と入力します。For the name, type SimulatedTemperatureSensor.
    3. イメージ URI として「mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.0」と入力します。For the image URI, enter mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.0.
    4. 他の設定はそのままにして、 [追加] を選択します。Leave the other settings unchanged and select Add.
  5. 次の手順に従って、ご自身の Azure Stream Analytics Edge ジョブを追加します。Add your Azure Stream Analytics Edge job with the following steps:

    1. [追加] をクリックし、 [Azure Stream Analytics モジュール] を選択します。Click Add and select Azure Stream Analytics Module.
    2. 自分のサブスクリプションと、作成した Azure Stream Analytics Edge ジョブを選びます。Select your subscription and the Azure Stream Analytics Edge job that you created.
    3. [保存] を選択します。Select Save.

    変更を保存すると、Stream Analytics ジョブの詳細が、作成したストレージ コンテナーに発行されます。Once you save your changes, the details of your Stream Analytics job are published to the storage container that you created.

  6. Stream Analytics モジュールがモジュールの一覧に追加されたら、その名前を選択して構造を確認し、 [IoT Edge モジュールの更新] ページで設定を更新します。When the Stream Analytics module is added to the list of modules, select its name to see how it's structured and update its settings on the Update IoT Edge Module page.

    [モジュールの設定] タブには、標準の Azure Stream Analytics イメージを指す [イメージの URI] があります。The Module Settings tab has the image URI that points to a standard Azure Stream Analytics image. この 1 つのイメージが、IoT Edge デバイスにデプロイされるすべての Stream Analytics モジュールに使用されます。This one image is used for every Stream Analytics module that gets deployed to an IoT Edge device.

    [モジュール ツインの設定] タブには、ASAJobInfo という Azure Stream Analytics (ASA) プロパティを定義する JSON が表示されます。The Module Twin Settings tab shows the JSON that defines the Azure Stream Analytics (ASA) property called ASAJobInfo. そのプロパティの値は、ストレージ コンテナー内のジョブ定義を指しています。The value of that property points to the job definition in your storage container. このプロパティによって、特定のジョブの詳細で Stream Analytics イメージが構成されます。This property is how the Stream Analytics image is configured with your specific job details.

    既定では、Stream Analytics モジュールは、基になるジョブと同じ名前になります。By default, the Stream Analytics module takes the same name as the job it's based on. 必要に応じて、このページでモジュール名を変更できますが、必須ではありません。You can change the module name on this page if you like, but it's not necessary.

  7. [更新] または [キャンセル] を選択します。Select Update or Cancel.

  8. 後の手順で必要になるため、Stream Analytics モジュールの名前を書き留めます。Make a note of the name of your Stream Analytics module because you'll need it in the next step. 次に、 [Next:ルート] を選択して続行します。Then, select Next: Routes to continue.

  9. [ルート] タブで、モジュールと IoT Hub の間でメッセージが渡される方法を定義します。On the Routes tab, you define how messages are passed between modules and the IoT Hub. メッセージは、名前と値のペアを使用して作成されます。Messages are constructed using name/value pairs. 既定の route および upstream の名前と値を、次の表に示すペア (次の名前と値のペア) に置き換えます。また、 {moduleName} のインスタンスを実際の Azure Stream Analytics モジュールの名前に置き換えます。Replace the default route and upstream name and values with the pairs shown in following table, the following name/value pairs, replacing instances of {moduleName} with the name of your Azure Stream Analytics module.

    名前Name Value
    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 デバイスを通過するデータのフローを定義します。The routes that you declare here define the flow of data through the IoT Edge device. SimulatedTemperatureSensor のテレメトリ データは、IoT Hub に送信されます。また、Stream Analytics ジョブで構成された温度入力にも送信されます。The telemetry data from SimulatedTemperatureSensor are sent to IoT Hub and to the temperature input that was configured in the Stream Analytics job. アラート出力メッセージは、IoT Hub に送信され、リセット コマンドをトリガーするように SimulatedTemperatureSensor モジュールにも送信されます。The alert output messages are sent to IoT Hub and to the SimulatedTemperatureSensor module to trigger the reset command.

  10. 確認と作成 を選択します。Select Next: Review + Create.

  11. [確認と作成] タブでは、ウィザードで指定した情報がどのように JSON 配置マニフェストに変換されるかを確認できます。In the Review + Create tab, you can see how the information you provided in the wizard is converted into a JSON deployment manifest. マニフェストの確認が完了したら、 [作成] を選択します。When you're done reviewing the manifest, select Create.

  12. これでデバイスの詳細ページに戻ります。You're returned to the device details page. [最新の情報に更新] を選択します。Select Refresh.

    新しい Stream Analytics モジュールが、IoT Edge エージェント モジュールおよび IoT Edge ハブ モジュールと共に実行されていることがわかります。You should see the new Stream Analytics module running, along with the IoT Edge agent and IoT Edge hub modules. IoT Edge デバイスに情報が到着し、新しいモジュールが開始されるまでに、数分かかる場合があります。It may take a few minutes for the information to reach your IoT Edge device, and then for the new modules to start. モジュールがすぐに実行されない場合は、ページを更新し続けます。If you don't see the modules running right away, continue refreshing the page.

    デバイスごとにレポートされる SimulatedTemperatureSensor および ASA モジュール

データの表示View data

ここで、IoT Edge デバイスに移動し、Azure Stream Analytics モジュールと SimulatedTemperatureSensor モジュールの間のやり取りを確認できます。Now you can go to your IoT Edge device to check out the interaction between the Azure Stream Analytics module and the SimulatedTemperatureSensor module.

  1. すべてのモジュールが Docker で実行されていることを確認します。Check that all the modules are running in Docker:

    iotedge list  
    
  2. すべてのシステム ログとメトリック データを表示します。View all system logs and metrics data. Stream Analytics モジュールの名前を使用してください。Use the Stream Analytics module name:

    iotedge logs -f {moduleName}  
    
  3. センサー ログを表示して、リセット コマンドの SimulatedTemperatureSensor への影響を表示します。View the reset command affect the SimulatedTemperatureSensor by viewing the sensor logs:

    iotedge logs SimulatedTemperatureSensor
    

    マシンの温度が徐々に上昇し、70 度に達して 30 秒間経過するのを観察できます。You can watch the machine's temperature gradually rise until it reaches 70 degrees for 30 seconds. 次に、Stream Analytics モジュールによってリセットがトリガーされ、マシンの温度が 21 度まで下降します。Then the Stream Analytics module triggers a reset, and the machine temperature drops back to 21.

    モジュール ログへのコマンド出力をリセットする

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

次の推奨記事に進む場合は、作成したリソースおよび構成を維持して、再利用することができます。If you plan to continue to the next recommended article, you can keep the resources and configurations that you created and reuse them. また、同じ IoT Edge デバイスをテスト デバイスとして使用し続けることもできます。You can also keep using the same IoT Edge device as a test device.

そうでない場合は、課金されないようにするために、ローカル構成と、この記事で使用した Azure リソースを削除できます。Otherwise, you can delete the local configurations and the Azure resources that you used in this article to avoid charges.

Azure リソースを削除するDelete Azure resources

Azure のリソースとリソース グループは、削除すると元に戻すことができません。Deleting Azure resources and resource groups is irreversible. 間違ったリソース グループやリソースをうっかり削除しないようにしてください。Make sure that you don't accidentally delete the wrong resource group or resources. IoT Hub を、保持したいリソースが含まれている既存のリソース グループ内に作成した場合は、リソース グループを削除するのではなく、IoT Hub リソースだけを削除してください。If you created the IoT hub inside an existing resource group that has resources that you want to keep, delete only the IoT hub resource itself, instead of deleting the resource group.

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

  1. Azure portal にサインインし、 [リソース グループ] を選択します。Sign in to the Azure portal and select Resource groups.

  2. IoT Edge のテスト リソースを含んだリソース グループの名前を選択します。Select the name of the resource group that contains your IoT Edge test resources.

  3. リソース グループに含まれるリソースの一覧を確認します。Review the list of resources contained in your resource group. それらすべてを削除する場合は、 [リソース グループの削除] を選択します。If you want to delete all of them, you can select Delete resource group. 一部だけを削除する場合は、削除する各リソースをクリックして個別に削除してください。If you want to delete only some of them, you can click into each resource to delete them individually.

次のステップNext steps

このチュートリアルでは、IoT Edge デバイスのデータを分析するように、Azure Streaming Analytics ジョブを構成しました。In this tutorial, you configured an Azure Streaming Analytics job to analyze data from your IoT Edge device. その後、温度上昇にローカルで対処するために、IoT Edge デバイスでこの Azure Stream Analytics モジュールを読み込みました。また、集計されたデータ ストリームをクラウドに送信しました。You then loaded this Azure Stream Analytics module on your IoT Edge device to process and react to temperature increase locally, as well as sending the aggregated data stream to the cloud. Azure IoT Edge がビジネス ソリューションを作成する方法をさらに確認するには、他のチュートリアルに進んでください。To see how Azure IoT Edge can create more solutions for your business, continue on to the other tutorials.