開發您自己的 IoT Edge 模組

適用于: IoT Edge 1.4 checkmark IoT Edge 1.4

重要

支援的版本是 IoT Edge 1.4。 如果您是舊版,請參閱更新 IoT Edge

Azure IoT Edge 模組可以與其他 Azure 服務連線,並參與較大的雲端資料管線。 本文說明如何開發模組,以與 IoT Edge 執行時間和IoT 中樞通訊,因而開發 Azure 雲端的其餘部分。

IoT Edge 執行時間環境

IoT Edge 執行階段提供基礎結構來整合多個 IoT Edge 模組的功能,並將其部署至 IoT Edge 裝置。 任何程式都可以封裝為 IoT Edge 模組。 為了充分利用 IoT Edge 通訊和管理功能,在模組中執行的程式可以使用 Azure IoT 裝置 SDK 連線到本機 IoT Edge 中樞。

將您的程式封裝為 IoT Edge 模組

若要在 IoT Edge 裝置上部署程式,必須先使用 Docker 相容引擎進行容器化並執行。 IoT Edge 使用 Moby,Docker 背後的開放原始碼專案,作為其 Docker 相容引擎。 您用來搭配 Docker 使用的相同參數可以傳遞至 IoT Edge 模組。 如需詳細資訊,請參閱 如何設定 IoT Edge 模組 的容器建立選項。

使用 IoT Edge 中樞

IoT Edge 中樞提供兩個主要功能:IoT 中樞和本機通訊的 Proxy。

從模組連線至 IoT Edge 中樞

從模組連線本機 IoT Edge 中樞牽涉到與任何用戶端相同的連線步驟。 如需詳細資訊,請參閱 連線至 IoT Edge 中樞

若要透過 AMQP 使用 IoT Edge 路由,您可以使用 Azure IoT SDK 中的 ModuleClient。 建立 ModuleClient 實例,將您的模組連線到裝置上執行的 IoT Edge 中樞,類似于 DeviceClient 實例如何將 IoT 裝置連線到IoT 中樞。 如需 ModuleClient 類別及其通訊方法的詳細資訊,請參閱您慣用 SDK 語言的 API 參考: C# C 、Python JAVA Node.js

IoT 中樞基本類型

IoT 中樞會看到類似裝置的模組實例。 模組實例可以:

目前,模組無法接收雲端到裝置訊息或使用檔案上傳功能。

撰寫模組時,您可以連線到 IoT Edge 中樞並使用 IoT 中樞基元,就像使用 IoT 中樞搭配裝置應用程式一樣。 IoT Edge 模組與 IoT 裝置應用程式的唯一差異在於,您必須參考模組身分識別,而不是裝置身分識別。

裝置到雲端訊息

IoT Edge 模組可以透過 IoT Edge 中樞 (功能為本機訊息代理程式,可將訊息傳播至雲端),將訊息傳送至雲端。 若要啟用裝置到雲端訊息的複雜處理,IoT Edge 模組可以攔截並處理其他模組或裝置傳送至其本機 IoT Edge 中樞的訊息。 IoT Edge 模組接著會傳送含有已處理資料的新訊息。 從而建立 IoT Edge 模組鏈結,以建置本機處理管線。

若要使用路由傳送裝置到雲端遙測訊息:

  • 使用 Azure IoT SDK Module Client 類別。 每個模組都有 輸入和輸出 端點。
  • 使用 Module Client 類別的傳送訊息方法,在模組的輸出端點上傳送訊息。
  • 在裝置的 edgeHub 模組中設定路由,以將此輸出端點傳送至IoT 中樞。

若要使用路由處理訊息:

  • 設定路由,將來自另一個端點(模組或裝置)的訊息傳送至模組的輸入端點。
  • 在模組的輸入端點上接聽訊息。 每次傳回新訊息時,Azure IoT SDK 就會觸發回撥函式。
  • 使用此回呼函式處理您的訊息,並(選擇性地)在您的模組端點佇列中傳送新訊息。

注意

若要深入瞭解如何宣告路由,請參閱 瞭解如何在 IoT Edge 中部署模組和建立路由

雙胞胎

對應項是 IoT 中樞提供的基元之一。 有存放裝置狀態資訊的 JSON 文件,包括中繼資料、設定和條件。 每個模組或裝置都自己的對應項。

  • 若要使用 Azure IoT SDK 取得模組對應項,請呼叫 ModuleClient.getTwin 方法。

  • 若要使用 Azure IoT SDK 接收模組對應項修補程式,請實作回呼函式,並從 Azure IoT SDK 向 方法註冊, ModuleClient.moduleTwinCallback 以便在每次對應項修補程式傳入時觸發您的回呼函式。

接收直接方法

若要使用 Azure IoT SDK 接收直接方法,請實作回呼函式,並從 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 模組的目標裝置架構上編譯器代碼。 如需目標裝置架構的詳細資訊,請參閱 使用 Visual Studio Code 開發 Azure IoT Edge 模組。

Windows

我們不再支援 Windows 容器。 Windows 上的適用于 Linux 的 IoT Edge 是 Windows 裝置上執行 IoT Edge 的建議方式。

模組安全性

您應該以安全性為考慮來開發模組。 若要深入瞭解如何保護您的模組,請參閱 Docker 安全性

為了協助改善模組安全性,IoT Edge 預設會停用某些容器功能。 您可以視需要覆寫預設值,為模組提供特殊許可權功能。

允許提升許可權的 Docker 許可權

在 IoT Edge 裝置上的組態檔中,有一個稱為 allow_elevated_docker_permissions 的參數。 當設定為 true 時,此旗標會允許 --privileged 旗標以及您在容器建立選項 CapAdd Docker HostConfig 欄位中定義的任何其他功能。

注意

目前,此旗標預設為 true,可讓部署將特殊許可權授與模組。 我們建議您將此旗標設定為 false,以改善裝置安全性。

啟用CAP_CHOWN和CAP_SETUID

預設會停用 Docker 功能 CAP_CHOWN CAP_SETUID 。 這些功能可用來寫入保護主機裝置上的檔案,並可能取得根存取權。

如果您需要這些功能,您可以在容器建立選項中使用 CapADD 手動重新啟用這些功能。

下一步

準備 IoT Edge 的開發與測試環境

使用 Visual Studio Code 開發 Azure IoT Edge 模組

使用 Visual Studio Code 對 Azure IoT Edge 模組進行偵錯

了解和使用 Azure IoT 中樞 SDK