次の方法で共有


独自のIoT Edge モジュールを開発する

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

重要

IoT Edge 1.5 LTS は、サポートされているリリースです。 IoT Edge 1.4 LTS は 2024 年 11 月 12 日に終了しました。 以前のリリースを使用している場合は、「Update IoT Edgeを参照してください。

Azure IoT Edgeモジュールは、他のAzure サービスと接続し、大規模なクラウド データ パイプラインに貢献できます。 この記事では、IoT Edge ランタイムとIoT Hub、そのため、Azure クラウドの残りの部分と通信するモジュールを開発する方法について説明します。

IoT Edgeランタイム環境

IoT Edge ランタイムは、複数のIoT Edge モジュールの機能を統合し、IoT Edge デバイスにデプロイするためのインフラストラクチャを提供します。 任意のプログラムをIoT Edge モジュールとしてパッケージ化できます。 IoT Edge通信と管理機能を最大限に活用するために、モジュールで実行されているプログラムは、Azure IoT Device SDK を使用してローカル IoT Edge ハブに接続できます。

IoT Edge モジュールとしてプログラムをパッケージ化する

IoT Edge デバイスにプログラムをデプロイするには、まずプログラムをコンテナー化し、Docker 互換エンジンを使用して実行する必要があります。 IoT Edgeでは、Docker と互換性のあるエンジンとして、Docker の背後にあるオープンソース プロジェクトである Moby を使用します。 Docker で使用したのと同じパラメーターを、IoT Edge モジュールに渡すことができます。 詳細については、「IoT Edge モジュールのコンテナー作成オプションを構成する方法を参照してください。

IoT Edge ハブの使用

IoT Edge ハブには、IoT Hubへのプロキシとローカル通信という 2 つの主な機能があります。

モジュールから IoT Edge ハブに接続する

モジュールからローカル IoT Edge ハブに接続するには、クライアントと同じ接続手順が必要です。 詳細については、「IoT Edge ハブへの接続を参照してください。

AMQP 経由IoT Edgeルーティングを使用するには、Azure IoT SDKから ModuleClientを使用できます。 ModuleClient インスタンスを作成して、DeviceClient インスタンスが IoT デバイスをIoT Hubに接続する方法と同様に、デバイスで実行されているIoT Edge ハブにモジュールを接続します。 ModuleClient クラスとその通信メソッドの詳細については、優先する SDK 言語の API リファレンス (C# を参照してください。 CPythonJava、または Node.js

IoT Hub 基本要素

IoT Hubモジュール インスタンスがデバイスと同様に表示されます。 モジュール インスタンスでは次のことができます。

  • デバイスからクラウドへのメッセージを送信します。
  • 特定の ID を対象とする ダイレクト メソッド を受け取ります。
  • デバイス ツインとそのデバイスの他のモジュール ツインとは別の分離されたモジュール ツイン を作成します。

現在のところ、モジュールでは、クラウドからデバイスへのメッセージを受信したり、ファイルのアップロード機能を使用することはできません。

モジュールを記述するときに、IoT Edge ハブに接続し、デバイス アプリケーションでIoT Hubを使用する場合と同様に、IoT Hubプリミティブを使用できます。 IoT Edge モジュールと IoT デバイス アプリケーションの唯一の違いは、モジュールではデバイス ID ではなくモジュール ID を参照する必要があるということです。

デバイスからクラウドへのメッセージ

IoT Edge モジュールは、ローカル ブローカーとして機能し、メッセージをクラウドに伝達するIoT Edge ハブを介してクラウドにメッセージを送信できます。 デバイスからクラウドへのメッセージの複雑な処理を有効にするために、IoT Edge モジュールは、他のモジュールまたはデバイスからローカル IoT Edge ハブに送信されたメッセージをインターセプトして処理できます。 その後、IoT Edge モジュールは、処理されたデータを含む新しいメッセージを送信します。 この方法では、IoT Edge モジュールのチェーンを作成して、ローカル処理パイプラインを構築できます。

ルートを使用してクラウドへのデバイス テレメトリー メッセージを送信するには、次の手順に従います。

  • ModuleClient クラスを使用します。 各モジュールには、入力 と 出力 エンドポイントがあります。
  • モジュールの出力エンドポイントでメッセージを送信するには、 クラスの send message メソッドを使用します。
  • この出力エンドポイントをIoT Hubに送信するには、デバイスの edgeHub モジュールにルートを設定します。

ルートを使用してメッセージを処理するには:

  • 別のエンドポイント (モジュールまたはデバイス) からモジュールの入力エンドポイントにメッセージを送信するルートを設定します。
  • モジュールの入力エンドポイントでメッセージを監視します。 新しいメッセージが返されるたびに、Azure IoT SDKによってコールバック関数がトリガーされます。
  • このコールバック関数を使用してメッセージを処理し、(必要に応じて) モジュール エンドポイント キューに新しいメッセージを送信します。

ルートの宣言の詳細については、「モジュールをデプロイし、IoT Edgeを参照してください。

ツイン

Twins は、IoT Hubによって提供されるプリミティブの 1 つです。 ツインは、メタデータ、構成、条件などの状態情報を格納する JSON ドキュメントです。 各モジュールやデバイスには、独自のツインがあります。

  • Azure IoT SDK を使用してモジュール ツインを取得するには、ModuleClient.getTwin メソッドを呼び出します。
  • Azure IoT SDKを使用してモジュール ツインパッチを受信するには、コールバック関数を実装し、ModuleClient.moduleTwinCallback メソッドを使用して登録し、ツインパッチが入るたびにコールバック関数がトリガーされるようにします。

ダイレクト メソッドを受信する

Azure IoT SDK を使用してダイレクト メソッドを受信するには、コールバック関数を実装し、ModuleClient.methodCallback メソッドを使用して登録し、ダイレクト メソッドが入るたびにコールバック関数がトリガーされるようにします。

言語とアーキテクチャのサポート

IoT Edgeでは、複数のオペレーティング システム、デバイス アーキテクチャ、開発言語がサポートされているため、ニーズに合ったシナリオを構築できます。 このセクションでは、カスタム IoT Edge モジュールを開発するためのオプションについて説明します。 各言語のツールサポートと要件についての詳細は、IoT Edge の開発環境とテスト環境を準備するで学ぶことができます。

Linux

次の表に記載されているすべての言語について、IoT Edge は AMD64 およびほとんどの ARM64 Linux コンテナーの開発をサポートしています。 また、Debian 11 ARM32 コンテナーもサポートしています。

開発言語 開発ツール
C Visual Studio Code
Visual Studio 2019/2022
C# Visual Studio Code
Visual Studio 2019/2022
Java Visual Studio Code
Node.js Visual Studio Code
Python Visual Studio Code

AMD64 開発マシンで ARM32 IoT Edge モジュールをコンパイルするなどのクロスプラットフォーム コンパイルの場合は、IoT Edge モジュールに一致するターゲット デバイス アーキテクチャでコードをコンパイルするように開発マシンを構成する必要があります。 ターゲット デバイス アーキテクチャの詳細については、「Tutorial: Visual Studio Codeを参照してください。

Windows

Microsoft では、Windows コンテナーはサポートされなくなりました。 IoT Edge for Linux on Windows Windows デバイスでIoT Edgeを実行することをお勧めします。

モジュールのセキュリティ

セキュリティを念頭に置いてモジュールを開発します。 モジュールのセキュリティ保護の詳細については、 Docker エンジンのセキュリティに関するページを参照してください。

モジュールのセキュリティを向上させるために、IoT Edgeは既定で一部のコンテナー機能を無効にします。 必要に応じて、既定値をオーバーライドして、モジュールに特権機能を提供することができます。

管理者特権での Docker アクセス許可を許可する

IoT Edge デバイス上の構成ファイルで、allow_elevated_docker_permissions と呼ばれるパラメーターによって、管理者特権の Docker アクセス許可が制御されます。 true に設定すると、このフラグは、コンテナーの作成オプションの Docker HostConfig の フィールドで定義した フラグとその他の機能を付与します。

現時点では、このフラグは既定で true であり、デプロイに特権アクセス許可を付与します。 デバイスのセキュリティを向上させるには、このフラグを false に設定します。

CAP_CHOWN と CAP_SETUID を有効にする

Docker の機能 CAP_CHOWN と CAP_SETUID は既定で無効になっています。 これらの機能は、ホスト デバイス上のファイルをセキュリティで保護するために書き込み、ルート アクセスを取得する可能性があります。

これらの機能が必要な場合は、コンテナーの作成オプションの を使用して手動で再度有効にします。

次のステップ