共用方式為


教學課程:使用模擬器代理程式 IoT 中樞 的 Azure 裝置更新

適用於 IoT 中樞 的 Azure 裝置更新支援映像型、套件型和腳本型更新。 本教學課程示範使用Ubuntu模擬器代理程式的端對端映像型裝置更新更新。

映射更新會對裝置的結束狀態提供高度的信心,而且不會對套件或腳本型更新造成相同的套件和相依性管理挑戰。 在生產階段前與生產環境之間復寫映像更新的結果,或輕鬆地採用 A/B 故障轉移模型會比較容易。

在本教學課程中,您已:

  • 使用標籤將IoT裝置指派給裝置更新群組。
  • 下載並安裝映像更新。
  • 匯入映像更新。
  • 部署映像更新。
  • 檢視更新部署歷程記錄。

必要條件

註冊及設定裝置和模組

在 IoT 中樞中,將裝置新增至裝置登錄檔。 必須註冊連線至 IoT 中樞的每個裝置。

  1. Azure 入口網站 中,開啟與您的裝置更新實例相關聯的IoT中樞頁面。
  2. 在瀏覽窗格中,選取 [裝置管理>裝置]。
  3. 在 [ 裝置] 頁面上,選取 [ 新增裝置]。
  4. 在 [裝置識別碼] 下,輸入裝置的名稱。 確定已 選取 [自動產生金鑰 ] 複選框。
  5. 選取儲存。 裝置會出現在 [裝置] 頁面上的清單中

建立模組身分識別

註冊裝置之後,請建立模組身分識別。 模組是IoT裝置元件的獨立身分識別,可在裝置執行多個進程時更細微。

在本教學課程中,您會為裝置上執行的裝置更新代理程式建立模組身分識別。 如需詳細資訊,請參閱了解和使用 Azure IoT 中樞的模組對應項

  1. 在 [ 裝置] 頁面上,選取您註冊的裝置。
  2. 在裝置頁面上,選取 [新增模組身分識別]。
  3. 在 [新增模組身分識別] 頁面的 [模組身分識別名稱] 下,輸入模組的名稱,例如 DeviceUpdateAgent
  4. 選取儲存。 新的模組身分識別會出現在裝置頁面上 的 [模組身分識別]。
  5. 選取模組名稱,然後在 [模組身分識別詳細數據] 頁面上,選取連接字串 (主鍵) 旁的 [複製] 圖示。 儲存此模組 連接字串 設定裝置更新代理程式時使用。

將群組標籤新增至模組對應項

裝置更新會根據其指派的標籤和相容性屬性,自動將裝置組織成群組。 個別裝置僅屬於群組,但群組可有多個子群組來排序不同的裝置類型。

您可以將標籤指派給 Device Update 管理的任何裝置,以將裝置指派給裝置更新群組。 標記可以位於裝置對應項或模組對應項中,如本教學課程所示。 每個裝置只能指派給一個裝置更新群組。

  1. 在 [ 模組身分識別詳細數據] 頁面上,選取 [模組身分識別對應項]。

  2. 在 [模組身分識別對應項] 頁面上,將新的DeviceUpdateGroup標記新增至與 和 version相同層級modelId的 JSON 程序代碼,如下所示:

    "tags": {
        "DeviceUpdateGroup": "DU-simulator-tutorial"
    },
    
  3. 選取儲存。 入口網站會重新格式化模組對應項,以將標記併入 JSON 結構。

安裝和設定裝置更新代理程式

裝置更新代理程式會在裝置更新管理的每個裝置上執行。 在本教學課程中,您會在Ubuntu18.04裝置上安裝裝置更新代理程式,並將其設定為以模擬器的形式執行,示範如何在不變更裝置設定的情況下將更新套用至裝置。

注意

您也可以使用 Azure IoT 身分識別服務來布建裝置。 若要這樣做, 請先安裝 Azure IoT 身分識別服務 ,再安裝裝置更新代理程式。 然後使用 設定裝置更新代理程式 "connectionType": "AIS" ,並將 保留 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. 安裝裝置更新代理程式 .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>佔位元取代為您從模組身分識別複製的 連接字串。 如需參數的詳細資訊,請參閱 裝置更新組態檔

    • 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裝置上執行下列命令。 裝置更新代理程式會叫用模擬器處理程序來處理使用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 裝置更新發行最新版本資產一節下載並解壓縮到您的 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. 重新啟動裝置更新代理程式以套用變更。

     sudo systemctl restart deviceupdate-agent
    

匯入更新

如果您的Ubuntu18.04 IoT裝置不同,請從 GitHub 裝置更新發行最新發行資產一節下載並解壓縮Tutorial_Simulator.zip封存盤。 本節使用 Tutorial_Simulator 資料夾中的 TutorialImportManifest_Sim.importmanifest.jsonadu-update-image-raspberrypi3.swu 檔案

更新檔案與Raspberry Pi教學課程中的檔案相同。 因為本教學課程中的更新是模擬更新,所以特定的檔案內容並不重要。

  1. 在您的開發計算機上,登入 Azure 入口網站,然後移至使用您的裝置更新實例設定的IoT中樞。

  2. 在瀏覽窗格中,選取 [裝置管理>][更新]。

  3. 在 [ 更新] 頁面上,選取 [ 匯入新的更新]。

  4. 在 [匯入更新] 頁面上,選取 [從記憶體容器選取]。

  5. 選取現有的記憶體帳戶,或選取 [記憶體帳戶] 來建立新的帳戶

  6. 選取現有的容器,或選取 [容器] 來建立新的容器。 此容器用來暫存要匯入的更新檔案。

    注意

    若要避免不小心從先前的更新匯入檔案,請在每次匯入更新時使用新的容器。 如果您未使用新的容器,請務必從現有的容器中刪除任何檔案。

  7. 在容器頁面上,選取 [ 上傳]。 流覽至並選取TutorialImportManifest_Sim.importmanifest.json和 adu-update-image-raspberrypi3.swu 檔案,然後選取 [上傳]。

  8. 選取這兩個檔案的複選框,然後選取 [ 選取 ] 以返回 [ 匯入更新] 頁面。

    顯示選取容器中上傳檔案的螢幕快照。

  9. 在 [ 匯入更新] 頁面上,檢閱要匯入的檔案,然後選取 [ 匯入更新]。

    顯示要匯入為更新之上傳檔案的螢幕快照。

    匯入程式隨即開始,您可以選取 [檢視匯入記錄 ] 以檢視匯入歷程記錄和狀態。 在 [ 更新歷程記錄] 頁面上,[ 狀態 ] 字段會在匯入完成時顯示 [成功 ]。 您可以選取 [ 重新整理 ] 以更新狀態。

匯入的更新現在會出現在 [ 更新 ] 頁面上。

顯示列為可用更新之新更新的螢幕快照。

如需匯入程序的詳細資訊,請參閱將更新匯入至 IoT 中樞裝置更新

選取裝置群組

您可以使用套用至裝置的群組標籤,將更新部署至裝置群組。 選取 [更新] 頁面頂端的 [群組和部署] 索引卷標,以檢視群組和部署清單以及更新合規性圖表。

更新合規性圖表顯示各種合規性狀態的裝置計數:最新的更新有新的更新可用更新進行中。 如需詳細資訊,請參閱裝置更新合規性

在 [組名] 底下,您會看到連線至此 IoT 中樞的裝置及其可用更新的所有裝置群組清單,以及 [狀態] 底下部署更新的連結。 不符合群組裝置類別需求的任何裝置都會出現在對應的無效群組中。 如需標籤和群組的詳細資訊,請參閱管理裝置群組

您應該會看到包含您在本教學課程中設定之模擬裝置的裝置群組。 選取群組名稱以檢視其詳細資料。

顯示更新合規性檢視的螢幕快照。

部署更新

  1. 在 [ 群組詳細數據] 頁面上,您應該會看到一個新的更新可供此群組使用。 選取 [部署] 以開始部署。

    顯示啟動群組更新部署的螢幕快照。

  2. 您匯入的更新會列為此群組的最佳可用更新。 選取 [部署]

  3. 排程您的部署以立即啟動,然後選取 [ 建立]。

  4. 流覽至 [目前更新] 索引標籤。在 [部署詳細數據] 底下,[狀態] 會變成 [作用中]。

  5. 在裝置成功更新之後,返回 [ 更新] 頁面。 您應該會看到您的合規性圖表和部署詳細數據已更新,以包含已安裝的更新。

檢視更新部署歷程記錄

  1. 返回群組詳細資料頁面,並選取 [部署歷程記錄] 索引標籤。

  2. 選取您所建立部署旁的 [檢視部署詳細資料]。 選取 [重新整理] 以檢視最新狀態詳細資料。

    顯示部署詳細數據的螢幕快照。

清除資源

如果您要繼續進行下一個教學課程,請保留裝置更新和 IoT 中樞資源。 當您不再需要為本教學課程建立的資源時,您可以將其刪除。

  1. Azure 入口網站 中,流覽至包含資源的資源群組。
  2. 若要刪除群組中的所有資源,您可以選取 [刪除資源群組]
  3. 如果您只想要刪除部分資源,請使用複選框來選取資源,然後選取 [ 刪除]。