了解 Azure 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,可让你以模块的形式来部署和管理 Edge 上的业务逻辑。 Azure IoT Edge 模块是由 IoT Edge 托管的最小计算单位,可以包含 Azure 服务(如 Azure 流分析)或你自己特定于解决方案的代码。 若要了解如何开发、部署和维护模块,请考虑模块的四个概念元素:
- 模块映像是包含定义模块的程序包。
- 模块实例是在 IoT Edge 设备上运行模块映像的特定计算单位。 该模块实例由 IoT Edge 运行时启动。
- 模块标识是存储在 IoT 中心的一段信息(包括安全凭据),与每个模块实例相关联。
- 模块孪生是存储在 IoT 中心的 JSON 文档,包含模块实例的状态信息,其中包括元数据、配置和条件。
模块映像和实例
IoT Edge 模块映像包含能够充分利用 IoT Edge 运行时的管理、安全性和通信功能的应用程序。 你可以开发自己的模块映像,或从支持的 Azure 服务导出一个模块映像,如 Azure 流分析。 映像存在于云中,可以在不同解决方案中对其进行更新、更改和部署。 例如,使用机器学习来预测生产线输出的模块作为一个单独映像(而不是一个使用计算机视觉来控制无人机的模块)存在。
每当将模块映像部署到设备上,并由 IoT Edge 运行时启动时,就会创建该模块的一个新实例。 在世界不同地区的两个设备可以使用相同的模块映像。 但是,在设备上启动模块时每个设备都会有其自己的模块实例。
在实现中,模块映像作为存储库中的容器映像存在,而模块实例则是设备上的容器。
模块标识
当 IoT Edge 运行时创建新的模块实例时,该实例会获得相应的模块标识。 模块标识将存储在 IoT 中心,用作该模块实例的所有本地通信和云通信的寻址和安全范围。
与模块实例相关联的标识将取决于在其上运行实例的设备的标识,以及在解决方案中为该模块提供的名称。 例如,如果调用使用 Azure 流分析的 insight
模块,并将其部署到一个名为 Hannover01
的设备上,那么 IoT Edge 运行时将创建一个相应的称为 /devices/Hannover01/modules/insight
的模块标识。
很显然,当需要在同一设备上多次部署一个模块映像时,可以使用不同的名称多次部署相同的映像。
模块孪生
此外,每个模块实例都有一个对应的模块孪生,你可以使用它来配置模块实例。 实例和孪生通过模块标识进行相互关联。
模块孪生是存储模块信息和配置属性的 JSON 文档。 此概念与 IoT 中心的设备孪生概念类似。 模块孪生的结构与设备孪生相同。 用于与这两种类型的孪生进行交互的 API 也是相同的。 两者之间唯一的区别是用来实例化客户端 SDK 的标识。
// Create a ModuleClient object. This ModuleClient will act on behalf of a
// module since it is created with a module's connection string instead
// of a device connection string.
ModuleClient client = new ModuleClient.CreateFromEnvironmentAsync(settings);
await client.OpenAsync();
// Get the module twin
Twin twin = await client.GetTwinAsync();
脱机功能
在与 IoT 中心同步至少一次后,Azure IoT Edge 模块可以无限地脱机运行。 IoT Edge 设备还可以将此脱机功能扩展到其他 IoT 设备。 有关详细信息,请参阅了解 IoT Edge 设备、模块和下游设备的扩展脱机功能。