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

Azure Device Update for IoT Hub 导入概念

若要使用 Azure Device Update for IoT Hub 将更新部署到设备,请首先将更新导入 Device Update 服务,该服务会存储已导入的更新并将其部署到设备。 本文概述了一些在导入更新时要了解的重要概念。

导入清单

导入清单是一个 JSON 文件,它定义了有关要导入的更新的重要信息。 在导入过程中,你需要提交导入清单和关联的更新文件(例如固件更新包)。 在导入清单中定义的元数据用于引入更新。 有些元数据还会在部署时用到,例如,用于验证是否正确安装了某个更新。

以下 JSON 代码显示了一个示例导入清单文件:

{
  "updateId": {
    "provider": "Contoso",
    "name": "Toaster",
    "version": "1.0"
  },
  "isDeployable": false,
  "compatibility": [
    {
      "manufacturer": "Contoso",
      "model": "Toaster"
    }
  ],
  "instructions": {
    "steps": [
      {
        "handler": "microsoft/swupdate:2",
        "files": [
          "firmware.swu"
        ],
        "handlerProperties": {
          "installedCriteria": "1.0"
        }
      }
    ]
  },
  "files": [
    {
      "filename": "firmware.swu",
      "sizeInBytes": 7558,
      "hashes": {
        "sha256": "/CD7Sn6fiknWa3NgcFjGlJ+ccA81s1QAXX4oo5GHiFA="
      }
    }
  ],
  "createdDateTime": "2022-01-19T06:23:52.6996916Z",
  "manifestVersion": "5.0"
}

导入清单文件的各节代表重要的 Device Update 概念,如以下部分所述。 有关完整导入清单架构的信息,请参阅导入清单 JSON 架构

更新标识

更新标识或 updateId 是某项更新在 Device Update 中的唯一标识符,它包含以下属性:

  • Provider 是创建更新或负责处理更新的实体。 Provider 通常是公司名称
  • Name 是更新类的标识符。 Name 通常是设备类或型号名称
  • Version 是一个数字,用于将此项更新与具有相同提供商和名称的其他更新区分开来

例如:

{
  "updateId": {
    "provider": "Contoso",
    "name": "Toaster",
    "version": "1.0"
  }
}

注意

updateId 仅由 Device Update 服务使用,与设备上的软件组件标识不同。

兼容性

Compatibility 节使用一个或多个任意键值对来定义可安装更新的设备。 只有报告了与兼容性值匹配的属性的设备才有资格部署更新。 可以通过包含多组设备兼容性属性来使更新与多个设备类兼容。

以下示例演示了一项更新,该更新只能部署到报告了 Contoso 和 Toaster(分别为设备制造商和型号)的设备

{
  "compatibility": [
    {
      "manufacturer": "Contoso",
      "model": "Toaster"
    }
  ]
}

说明

Instructions 节包含设备代理安装更新所需的信息或步骤。 最简单的更新包含一个内联步骤,该步骤使用注册到设备代理的处理程序来执行更新有效负载文件。 以下示例演示了单步说明节。

{
  "instructions": {
    "steps": [
      {
        "handler": "microsoft/swupdate:2",
        "files": [
          "contoso.toaster.1.0.swu"
        ]
      }
    ]
  }
}

注意

handler 属性等效于导入清单 3.0 版或更低版本中的 updateType 属性。

一项更新可以包含多个步骤,如以下示例中所示:

{
  "instructions": {
    "steps": [
      {
        "description": "pre-install script",
        "handler": "microsoft/script:1",
        "handlerProperties": {
          "arguments": "--pre-install"
        },
        "files": [
          "configure.sh"
        ]
      },
      {
        "description": "firmware package",
        "handler": "microsoft/swupdate:2",
        "files": [
          "contoso.toaster.1.0.swu"
        ]
      }
    ]
  }
}

更新可能包含引用步骤,指导设备代理使用自己的导入清单来安装另一项更新,同时建立父子更新关系。 更新可能包含内联步骤和引用步骤的任意组合。

例如,toaster 的一个更新可能包含两个子更新:

{
  "instructions": {
    "steps": [
      {
        "type": "reference",
        "updateId": {
          "provider": "Contoso",
          "name": "Toaster.HeatingElement",
          "version": "1.0"
        }
      },
      {
        "type": "reference",
        "updateId": {
          "provider": "Contoso",
          "name": "Toaster.Sensors",
          "version": "1.0"
        }
      }
    ]
  }
}

文件

导入清单的 Files 节包含更新有效负载文件元数据,如 namesizehash。 Device Update 在导入过程中使用此元数据进行完整性验证,并在安装之前将相同信息转发到设备代理进行完整性验证。

注意

仅包含引用步骤的父更新不会定义任何更新有效负载文件。

创建导入清单

虽然可以使用文本编辑器手动创作导入清单 JSON,但使用 Azure CLI 可以大幅简化此过程。 准备尝试创建导入清单时,可以使用操作指南

重要

若要通过 Azure 门户导入到 Device Update 服务,导入清单 JSON 文件名必须以 .importmanifest.json 结尾

提示

创建导入清单时,可以使用 Visual Studio Code 启用自动完成和 JSON 架构验证。

更新导入限制

对于每个 Device Update for IoT Hub 实例,强制实施特定限制。 如果尚未查看,请参阅 Device Update 限制