你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:使用模拟器代理的 Azure Device Update for IoT Hub

Azure Device Update for IoT Hub 支持基于映像、包和脚本的更新。 本教程演示了使用 Ubuntu 模拟器代理的端到端基于映像的 Device Update 更新。

映像更新提供对设备结束状态的高置信度,并且不会像基于包或脚本的更新一样产生相同的包及依赖项管理挑战。 可以更轻松地在预生产环境和生产环境之间复制映像更新的结果,或轻松采用 A/B 故障转移模型。

在本教程中,你将了解:

  • 使用标记将 IoT 设备分配给 Device Update 组。
  • 下载并安装映像更新。
  • 导入映像更新。
  • 部署映像更新。
  • 查看更新部署历史记录。

先决条件

注册和配置设备和模块

将设备添加到 IoT 中心的设备注册表。 每个连接到 IoT 中心的设备都必须注册。

  1. Azure 门户中,打开与 Device Update 实例关联的 IoT 中心页。
  2. 在导航窗格中,选择“设备管理”>“设备”。
  3. 在“设备”页上,选择“添加设备”。
  4. 在“设备 ID”下,输入设备的名称。 确保选择“自动生成密钥”复选框。
  5. 选择“保存”。 设备将会显示在“设备”页上的列表中。

创建模块标识

注册设备后,创建模块标识。 模块是 IoT 设备组件的独立标识,可在设备运行多个进程时实现更精细的粒度。

在本教程中,你将为在设备上运行的 Device Update 代理创建一个模块标识。 有关详细信息,请参阅了解并在 IoT 中心内使用模块孪生

  1. 在“设备”页上,选择已注册的设备。
  2. 在设备页上,选择“添加模块标识”。
  3. 在“添加模块标识”页上的“模块标识名称”下,输入模块的名称,例如“DeviceUpdateAgent”。
  4. 选择“保存”。 新模块标识显示在“模块标识”下的“设备”页上。
  5. 选择模块名称,然后在“模块标识详细信息”页上,选择“连接字符串(主键)”旁边的“复制”图标。 保存此模块连接字符串以在配置 Device Update 代理时使用。

将组标记添加到模块孪生

Device Update 可根据设备的已分配标记和兼容性属性自动将设备组织为组。 每个设备仅属于一个组,但组可以有多个子组来对不同的设备类进行排序。

可以将标记分配给 Device Update 管理的任何设备,以便将设备分配到 Device Update 组。 标记可以位于设备孪生或模块孪生中,如本教程所示。 每个设备只能分配给一个 Device Update 组。

  1. 在“模块标识详细信息”页上,选择“模块标识孪生”。

  2. 在“模块标识孪生”页上,将新的 DeviceUpdateGroup 标记添加到 JSON 代码,级别与 modelIdversion 相同,如下所示:

    "tags": {
        "DeviceUpdateGroup": "DU-simulator-tutorial"
    },
    
  3. 选择“保存”。 门户会重新格式化模块孪生以将标记合并到 JSON 结构中。

安装和配置 Device Update 代理

Device Update 代理在 Device Update 管理的每台设备上运行。 在本教程中,你将在 Ubuntu 18.04 设备上安装 Device Update 代理,并将其配置为以模拟器的形式运行,演示如何在不更改设备配置的情况下将更新应用到设备。

注意

还可以使用 Azure IoT 标识服务来预配设备。 为此,请先安装 Azure IoT 标识服务,然后再安装 Device Update 代理。 然后,在配置文件中使用 "connectionType": "AIS" 配置 Device Update 代理,并将 connectionData 留为空字符串。

  1. 添加 Microsoft 包存储库,然后将 Microsoft 包签名密钥添加到受信任密钥的列表中。

    wget https://packages.microsoft.com/config/ubuntu/18.04/multiarch/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    sudo dpkg -i packages-microsoft-prod.deb
    rm packages-microsoft-prod.deb   
    
  2. 安装 Device Update 代理 .deb 包。

    sudo apt-get update
    sudo apt-get install deviceupdate-agent
    
  3. 打开 du-config.json 代理配置文件。

    sudo nano /etc/adu/du-config.json
    
  4. 使用以下示例值更新 du-config.json。 将 <connection string> 占位符替换为从模块标识复制的连接字符串。 有关参数的详细信息,请参阅 Device Update 配置文件

    • manufacturer: "contoso"
    • model: "video"
    • agents.name: "aduagent"
    • agents.connectionData: <connection string>
    • agents.manufacturer: "contoso"
    • agents.model: "video"

    编辑后的 du-config.json 文件应如下所示:

    {
       "schemaVersion": "1.0",
       "aduShellTrustedUsers": [
          "adu",
          "do"
       ],
       "manufacturer": "contoso",
       "model": "video",
       "agents": [
          {
          "name": "aduagent",
          "runas": "adu",
          "connectionSource": {
             "connectionType": "string",
             "connectionData": <connection string>
          },
          "manufacturer": "contoso",
          "model": "video"
          }
       ]
    }
    
  5. 按 Ctrl+X 退出编辑器,并输入 y 以保存更改

  6. 若要将代理设置为以模拟器的形式运行,请在 IoT 设备上运行以下命令。 Device Update 代理调用模拟器处理程序来处理使用 Microsoft SWUpdate 扩展的更新。

      sudo /usr/bin/AducIotAgent --extension-type updateContentHandler --extension-id 'microsoft/swupdate:1' --register-extension /var/lib/adu/extensions/sources/libmicrosoft_simulator_1.so
    

获取模拟器文件

  1. Tutorial_Simulator.zip 存档从 GitHub Device Update 发布的最新发布的“资产”部分下载并提取到你的 Ubuntu 18.04 计算机上。

    可以使用 wget 下载 ZIP 文件。 将 <release_version> 替换为最新版本,例如 1.0.0

    wget https://github.com/Azure/iot-hub-device-update/releases/download/<release_version>/Tutorial_Simulator.zip
    
  2. sample-du-simulator-data.json 文件从提取的 Tutorial_Simulator 文件夹复制到 tmp 文件夹。

    cp sample-du-simulator-data.json /tmp/du-simulator-data.json
    

    注意

    如果 tmp 文件夹不存在,请创建它,如下所示:

    sudo mkdir/tmp
    sudo chown root:root/tmp
    sudo chmod 1777/tmp
    
  3. 更改 /tmp/sample-du-simulator-data.json 文件的权限。

    sudo chown adu:adu /tmp/du-simulator-data.json
    sudo chmod 664 /tmp/du-simulator-data.json
    
  4. 重启 Device Update 代理以应用所做的更改。

     sudo systemctl restart deviceupdate-agent
    

导入更新

Tutorial_Simulator.zip 存档从 GitHub Device Update 发布的最新发布的“资产”部分下载并提取到你的开发计算机上(如果它不同于你的 Ubuntu 18.04 IoT 设备)。 本部分使用 Tutorial_Simulator 文件夹中的 TutorialImportManifest_Sim.importmanifest.jsonadu-update-image-raspberrypi3.swu 文件。

更新文件与 Raspberry Pi 教程中的更新文件相同。 由于本教程中的更新是模拟的,因此特定文件内容并不重要。

  1. 在开发计算机上,登录到 Azure 门户并转到配置了你的 Device Update 实例的 IoT 中心。

  2. 在导航窗格中,选择“设备管理”>“更新”。

  3. 在“更新”页上,选择“导入新更新”。

  4. 在“导入更新”页上,选择“从存储容器中选择”。

  5. 选择现有存储帐户,或通过选择“存储帐户”创建新帐户。

  6. 选择现有容器,或通过选择“容器”创建新容器。 此容器将用于暂存更新文件以供导入。

    注意

    为避免意外地从之前的更新中导入文件,建议每次导入更新时使用新容器。 如果不使用新容器,请务必删除现有容器中的任何文件。

  7. 在容器页面上,选择“上传”。 浏览到并选择 TutorialImportManifest_Sim.importmanifest.json 和 adu-update-image-raspberrypi3.swu 文件,然后选择“上传”。

  8. 选中两个文件的复选框,然后选择“选择”以返回到“导入更新”页。

    屏幕截图显示如何在容器中选择上传的文件。

  9. 在“ 导入更新”页上,查看要导入的文件,然后选择“导入更新”。

    屏幕截图显示要作为更新导入的已上传文件。

    导入过程开始,可以选择“查看导入历史记录”查看导入历史记录和状态。 在“更新历史记录”页上,“状态”字段会在导入完成后显示“成功”。 可以选择“刷新”以更新状态。

导入的更新现在显示在“更新”页上。

屏幕截图显示新更新被列为可用更新。

有关导入过程的详细信息,请参阅将更新导入到 Device Update for IoT Hub

选择设备组

可以使用已应用于设备的组标记将更新部署到设备组。 选择“更新”页顶部的“组和部署”选项卡,以查看组和部署列表以及更新符合性图表。

更新合规性图表显示了处于各种合规性状态的设备的计数:“最新的更新”、“可用的新更新”和“正在进行的更新”。 有关详细信息,请参阅 Device Update 合规性

在“组名”下,可以看到连接到此 IoT 中心的设备的所有设备组及其可用更新的列表,以及“状态”下用于部署更新的链接。 不满足组的设备类要求的任何设备将会显示在相应的无效组中。 有关标记和组的详细信息,请参阅管理设备组

你应会看到包含你在本教程中设置的模拟设备的设备组。 选择组名称以查看其详细信息。

屏幕截图显示了更新符合性视图。

部署更新

  1. 在“组详细信息”页面上,你应会看到有一个此组可用的新更新。 选择“部署”以启动部署。

    屏幕截图显示如何启动组更新部署。

  2. 你导入的更新被列为此组可用的最佳更新。 选择“部署”。

  3. 安排部署立即开始,然后选择“创建”

  4. 导航到“当前更新”选项卡。在“部署详细信息”下,“状态”变为“活动”

  5. 在设备成功更新后,返回到“更新”页面。 你应会看到合规性图表和部署详细信息已更新,以包含已安装的更新。

查看更新部署历史记录

  1. 返回到组详细信息页面,选择“部署历史记录”选项卡。

  2. 选择创建的部署旁边的“查看部署详细信息”。 选择“刷新”以查看最新状态详细信息。

    屏幕截图显示了“部署详细信息”。

清理资源

如果打算继续学习下一教程,请保留 Device Update 和 IoT 中心资源。 如果不再需要在本教程中创建的资源,则可将其删除。

  1. Azure 门户中,导航到包含资源的资源组。
  2. 如果要删除组中的所有资源,请选择“删除资源组”。
  3. 如果只想删除部分资源,请使用复选框选择资源,然后选择“删除”。