SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Edge で IoT Edge モジュールを開発してストリーム処理を実施する際に参考とした情報

leave a comment

初めて IoT Hub / IoT Edge を触って、手探りで Raspberry Pi 4 + DHT22 で室温のセンサーデータをストリーミングした際に参考とした情報の箇条書きとなります。

SQL Edge のドキュメントは、Azure SQL Edge (プレビュー) のドキュメント となりますが、検証をするに際しては IoT Hub / IoT Edge についても軽くは知っておく必要がありますので、最低限、次のような情報を確認しておくと良いのではないでしょうか。
(私はこれらの情報が必要でした)

2020/5/29 時点では、IoT Edge モジュールを開発する際に環境を整備すると Threat detected: Trojan:Win32/Zpevdo.A in iotedgehubdev.exe #274 という脅威検知が行われてしまうようで、VS 2019 だけでなく、Visual Studio Code でも同様の現象が発生しました。。。。

インストール

IoT Edge デバイスとして登録する流れは、この情報を確認すれば OK

Running Azure SQL Database Edge on a Raspberry Pi

 

 

IoT Edgeデバイスとしての登録

現時点では、SQL Edge は IoT Edge デバイスのモジュールとしてインストールする必要があるため、OS のインストール後に IoT Edge デバイスとして登録を行う必要がある

Debian ベースの Linux システムに Azure IoT Edge ランタイムをインストールする

  • 最初に実施する必要のある作業。
  • この作業を実施することで、Raspberry Pi 4 を IoT Edge デバイスとして登録するために必要なランタイムをインストールできる

クイックスタート:初めての IoT Edge モジュールを Linux 仮想デバイスにデプロイする

  • インストールした IoT Edge ランタイムを使用して、IoT Edge にデバイスを登録するための方法
  • この作業を実施することで、IoT Hub に IoT Edge デバイスとして登録することができる

IoT Edge デプロイのファイアウォール規則とポート構成規則

次の情報は、SQL Edge でなく、SQL Server on Linux を使用した IoT Edge デバイスの活用方法
ARM64 では、SQL Server を展開することはできないため Linux を Edge デバイスとして登録する際に利用可能な情報であるが、SQL Server モジュール + Stream Analytics モジュールを使用すると、SQL Edge に近い環境となるため、本情報も参考となる

 

 

メッセージのルーティング

開発したモジュールで送信されているメッセージを IoT Hub / SQL Edge の Stream Anallytics に送信する際に必要となるルーティングの設定

$upstream の説明などはこのドキュメントを参照。

最初は、次のようなルートの宣言を知っていれば対応できる

  • 全モジュールのメッセージを IoT Hub に送信
    • FROM /messages/* INTO $upstream
  • 特定のモジュールのメッセージを IoT Hub に送信
    • FROM /messages/modules/SimulatedTemperatureSensor/* INTO $upstream
  • 全モジュールのメッセージを SQL Edge モジュール (AzureSQLEdgePreview) の EdgeHubInput として設定した Stream Analytics の入力に送信
    • FROM /messages/* INTO BrokeredEndpoint(“/modules/AzureSQLEdgePreview/inputs/EdgeHubInput”)
  • 特定のモジュールのメッセージを SQL Edge モジュール (AzureSQLEdgePreview) の EdgeHubInput として設定した Stream Analytics の入力に送信
    • FROM /messages/modules/SimulatedTemperatureSensor/* INTO BrokeredEndpoint(“/modules/AzureSQLEdgePreview/inputs/EdgeHubInput”)

メッセージ送信に使用している Edge Hub とは何なのか / インターネットに接続していない状態のオフラインのメッセージ処理の動作を把握する際には次のドキュメントを参照
(Edge Hub に蓄積されたメッセージの IoT Hub への送信について)

 

 

機能検証

IoT Hub / IoT Edge を初めて触る際に、IoT Hub にメッセージを送信するということがどのようなことを指しているのかは次の情報を確認する

  • クイック スタート:デバイスから IoT ハブに利用統計情報を送信して Azure CLI で監視する
    • IoT Hub にメッセージを送信するということは、どのようなことを表しているのかを確認することができる
      • Portal の Cloud Shell でテストをすることができる
    • シミュレートされたデバイスによる IoT Hub へのメッセージ送信と IoT Hub が受信したメッセージを確認することができる
    • 次のコマンドは、自分が作成したモジュールが IoT Hub に送信しているメッセージを確認するためにも使用できるので覚えておくとよい
      • az iot hub monitor-events –output table –hub-name {YourIoTHubName}
    • Cloud Shell から、コマンドを実行する際に「ModuleNotFoundError: No module named ‘azure.mgmt.iothub.iot_hub_client’」が発生した場合は次の情報を参照

SQL Edge のクイックスタートは Azure SQL Edge (プレビュー) をデプロイする となり、この手順を実行することで SQL Edge モジュールをデプロイすることが可能

以降の検証は Azure SQL Edge (プレビュー) のドキュメント のチュートリアルを実施することになるが、ストリーミングの機能を検証したいだけであれば、チュートリアル:Azure Stream Analytics を IoT Edge モジュールとしてデプロイする を実施するのがシンプルである。

Edge モジュールとして、サンプル提供されている SimulatedTemperatureSensor モジュールを展開することにより、ストリーミングの検証を実施することができる。

  • SimulatedTemperatureSensor モジュールを展開し、「FROM /messages/modules/SimulatedTemperatureSensor/* INTO BrokeredEndpoint(“/modules/AzureSQLEdgePreview/inputs/<Stream Analytics 入力に指定した名称>”)」のルーティングを設定することで、SQL Edge にストリームデータを送信することができる

 

 

モジュール開発

Python でモジュール開発を実施する場合 Azure IoT Device SDK を使用した開発を行う

azure-iot-device は v2 の SDK であり、azure-iothub-device-client を使用している情報は v1 の SDK を使用しているものとなるため、情報の収集を行う際にはどちらの SDK を使用しているのかは意識しておく
(ネットの公開情報の場合 v1 SDK を利用しているケースが多いが、docs の公式ドキュメントは v2 SDK となっている可能性がある v2 だとコールバック関数を使わなくてもメッセージが送信できるようである)

v1 と v2 の SDK の違いについては、IoTHub Python SDK Migration Guide を参照
メッセージ送付を行うための基本的な構文についてもこのドキュメントに記載されている

Edge Hub という Edge Hub モジュールに搭載されている Hub にメッセージを送信する場合のクラスは IoTHubModuleClient class を参照

モジュール開発について参考となる公式ドキュメント (Python を使用したモジュールを開発する際のコードの参考)

開発環境の整備についてのこ公式ドキュメントは次の情報を参照

シンプルなメッセージ送信であれば、send_message.py で確認できる

IoT Edge のモジュール開発の参考となる情報

開発したモジュール (コンテナー) から、Raspberry Pi の GPIO を使用する場合に参考にする情報

Share

Written by Masayuki.Ozawa

5月 29th, 2020 at 1:11 am

Posted in SQL Edge

Tagged with

Leave a Reply