了解 Azure IoT Edge 模块

适用于:IoT Edge 1.1 复选标记 IoT Edge 1.1 IoT Edge 1.2 复选标记 IoT Edge 1.2 IoT Edge 1.3 复选标记 IoT Edge 1.3 IoT Edge 1.4 复选标记 IoT Edge 1.4

通过 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 设备、模块和下游设备的扩展脱机功能

后续步骤