開發您自己的 IoT Edge 模組
適用於: IoT Edge 1.5 IoT Edge 1.4
重要
支援 IoT Edge 1.5 LTS 和 IoT Edge 1.4 LTS 版本。 IoT Edge 1.4 LTS 於 2024 年 11 月 12 日結束生命週期。 如果您是舊版,請參閱更新 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 使用 Docker 建立的開放原始碼專案 Moby (英文) 作為 Docker 相容引擎, 用於 Docker 的參數可傳遞至您的 IoT Edge 模組。 如需詳細資訊,請參閱如何設定 IoT Edge 模組的容器建立選項。
使用 IoT Edge 中樞
IoT Edge 中樞提供兩個主要功能:Proxy 到 IoT 中樞,以及本機通訊。
從模組連線到 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 容器的開發。 也支援 Debian11 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 容器。 IoT Edge for Linux on Windows 是在 Windows 裝置上執行 IoT Edge 的建議方式。
模組安全性
開發模組,務必要時時將安全性銘記在心。 如想深入了解如何保障模組的安全,請參閱 Docker 安全性 (英文)。
為了協助提升模組的安全性,IoT Edge 會預設停用部分容器功能, 您可以視需要覆寫預設值,藉此為模組提供特殊權限功能。
允許較高的 Docker 權限
IoT Edge 裝置的設定檔中有一個名為 allow_elevated_docker_permissions
的參數, 若設定為 true,此旗標會允許 --privileged
旗標,以及您在容器建立選項的 Docker HostConfig CapAdd
欄位中定義的任何其他功能。
注意
目前此旗標預設為 true,讓部署能將特殊許可權限授與模組。 建議您將此旗標設為 false,以提高裝置安全性。
啟用 CAP_CHOWN 與 CAP_SETUID
Docker 功能 CAP_CHOWN 與 CAP_SETUID 預設為停用。 這些功能可寫入主機裝置上的保護檔案,且或許可取得根存取權。
如果您需要使用這兩項功能,可以在容器建立選項中使用 CapADD 手動重新啟用這些功能。
下一步
使用 Visual Studio Code 開發 Azure IoT Edge 模組