共用方式為


將更新匯入 IoT 中樞的裝置更新服務

若要從IoT中樞的裝置更新將更新部署到裝置,您必須先將該更新匯入裝置更新服務。 本文會概述一些關於匯入更新所需要了解的重要概念。

匯入清單

匯入指令清單是 JSON 檔案,可定義您要匯入之更新的重要資訊。 您會在匯入程式期間提交匯入指令清單和相關聯的更新檔案或檔案(例如韌體更新套件)。 匯入指令清單中定義的元數據用於導入更新。 有些元數據也會在部署期間使用 ,例如,驗證更新是否已正確安裝。

例如:

{
  "updateId": {
    "provider": "Contoso",
    "name": "Toaster",
    "version": "1.0"
  },
  "isDeployable": false,
  "compatibility": [
    {
      "deviceManufacturer": "Contoso",
      "deviceModel": "Toaster"
    }
  ],
  "instructions": {
    "steps": [
      {
        "handler": "microsoft/swupdate:1",
        "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": "4.0"
}

匯入清單包含數個專案,這些專案代表IoT中樞裝置更新的重要概念。 本節將概述這些專案。 如需完整匯入架構的相關信息,請參閱 匯入指令清單 JSON 架構

更新身分識別

更新身份識別碼updateId 是在 IoT Hub 的裝置更新中用來辨識更新的唯一標識碼。 它由三個部分組成:

  • 提供者:正在建立或直接負責更新的實體。 它通常是公司名稱。
  • 名稱:更新類別的識別碼。 它通常是裝置類別或型號名稱。
  • 版本:版本號碼,區分此更新與具有相同提供者和名稱的其他版本號碼。

例如:

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

備註

UpdateId 只會由裝置更新服務使用,而且可能與裝置上實際軟體元件的身分識別不同。

相容性

相容性 會定義可安裝更新的裝置準則。 其中包含裝置屬性,這些屬性由裝置回報,並以一組任意的鍵值對呈現。 只有具有相符屬性的裝置才有資格進行部署。 更新可能會與多個裝置類別相容,因為擁有多套裝置屬性。

以下是一個更新範例,只能部署至將 ContosoToaster 回報為其裝置製造商和型號之裝置。

{
  "compatibility": [
    {
      "deviceManufacturer": "Contoso",
      "deviceModel": "Toaster"
    }
  ]
}

操作說明

指示部分包含安裝更新之裝置代理程式的必要資訊或步驟。 最簡單的更新包含單一內嵌步驟。 此步驟會使用向裝置代理程式註冊的 處理程式 來執行包含的承載檔案:

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

小提示

handler 相當於 updateType 在匯入指令清單 3.0 版或更新版本中。

更新可能包含多個步驟:

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

更新可能包含 參考 步驟,指示裝置代理程式使用自己的匯入指令清單來安裝另一個更新,並建立父代和子更新關聯性。 例如,烤麵包機的更新可包含兩個子更新:

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

備註

更新可能包含任何內嵌步驟和參考步驟的組合。

檔案

[檔案] 元件包含更新承載檔案的元數據,例如其名稱、大小和哈希。 IoT 中樞的裝置更新會在匯入程式期間使用此元數據進行完整性驗證。 然後,相同的資訊會轉送至裝置代理程式,以在安裝之前重複完整性驗證。

備註

只包含參考步驟的更新在父更新中沒有任何更新承載檔案。

建立匯入資訊清單

您可以使用任何文字編輯器來建立匯入指令清單 JSON 檔案。 另外還有範例腳本,可讓您以程序設計方式在 GitHub 上的 Azure/iot-hub-device-update 中建立匯入指令清單。

這很重要

透過 Azure 入口網站匯入時,匯入指令清單 JSON 檔名必須以 .importmanifest.json 結尾。

小提示

使用 Visual Studio Code 在建立匯入指令清單時啟用自動完成和 JSON 架構驗證。

匯入更新的限制

每個 IoT Hub 裝置更新實例都會強制執行某些限制。 如果您尚未檢閱這些限制,請參閱裝置更新限制

後續步驟