使用 Visual Studio 2022 來開發和偵錯 Azure IoT Edge 的模組

適用於:IoT Edge 1.5 複選標記 IoT Edge 1.5 IoT Edge 1.4 複選標記 IoT Edge 1.4

重要

支援 IoT Edge 1.5 LTS 和 IoT Edge 1.4 LTS 版本。 IoT Edge 1.4 LTS 於 2024 年 11 月 12 日結束生命週期。 如果您是舊版,請參閱更新 IoT Edge

本文說明如何使用Visual Studio 2022來開發、偵錯及部署自定義 Azure IoT Edge 模組。 Visual Studio 2022 提供以 C 和 C# 撰寫之 IoT Edge 模組的範本。 支援的裝置架構為 Windows x64、Linux x64、ARM32 和 ARM64(預覽)。 如需所支援作業系統、語言和架構的詳細資訊,請參閱 語言和架構支援

本文包含兩個IoT Edge開發工具的步驟。

  • 命令行介面 (CLI) 是開發慣用的工具。
  • 適用於 Visual Studio 擴充功能的 Azure IoT Edge 工具。 延伸模組處於 維護模式

使用開頭的工具選取器按鈕,為本文選擇您的工具選項。 這兩個工具都提供下列優點:

  • 在本機開發計算機上建立、編輯、建置、執行及偵錯 IoT Edge 解決方案和模組。
  • 使用 Visual Studio 開發的優點,以 C 或 C# 撰寫 Azure IoT 模組的程式代碼。
  • 透過 Azure IoT 中樞 將IoT Edge解決方案部署至IoT Edge裝置。

必要條件

本文假設您使用執行 Windows 的電腦作為開發電腦。

  • 在您的開發電腦上安裝或修改 Visual Studio 2022。 選擇使用 C++ 工作負載的 Azure 開發和桌面開發選項。

  • 從 Visual Studio Marketplace 下載並安裝 Azure IoT Edge Tools 。 您可以使用 Azure IoT Edge Tools 擴充功能來建立和建置 IoT Edge 解決方案。 慣用的開發工具是命令行 (CLI) Azure IoT Edge 開發工具。 此延伸模組包含用來建立 Visual Studio 專案的 Azure IoT Edge 專案範本。 目前,不論您使用的開發工具為何,您都需要安裝擴充功能。

    重要

    適用於 VS 2022 的 Azure IoT Edge 工具擴充功能處於 維護模式。 慣用的開發工具是命令行 (CLI) Azure IoT Edge 開發工具

    提示

    如果您使用 Visual Studio 2019,請從 Visual Studio Marketplace 下載並安裝 適用於 VS 2019 的 Azure IoT Edge Tools。

  • 安裝 Vcpkg 連結庫管理員

    git clone https://github.com/Microsoft/vcpkg
    cd vcpkg
    bootstrap-vcpkg.bat
    

    安裝適用於 Windows 的 azure-iot-sdk-c 套件

    vcpkg.exe install azure-iot-sdk-c:x64-windows
    vcpkg.exe --triplet x64-windows integrate install
    
  • 在您的開發計算機上下載並安裝 Docker 相容的容器管理系統 ,以建置和執行模組映像。 例如,安裝 Docker Community Edition

  • 若要使用 Linux 容器開發模組,請使用符合 Docker Desktop 需求的 Windows 電腦。

  • 建立 Azure Container RegistryDocker Hub 來儲存模組映像。

    提示

    您可以使用本機 Docker 登錄作為原型並用於測試,而非使用雲端登錄。

  • 安裝 Azure CLI

  • 若要在裝置上測試模組,您需要至少具有一個 IoT Edge 裝置的作用中 IoT 中樞。 若要建立用於測試的IoT Edge裝置,您可以在 Azure 入口網站 或 CLI 中建立一個裝置:

    • 在 Azure 入口網站建立一個是最快的。 從 Azure 入口網站 移至您的 IoT 中樞 資源。 選取 [裝置管理] 功能表下的 [裝置],然後選取 [新增裝置]。

      [建立裝置]中,使用裝置標識碼命名您的裝置,檢查 [IoT Edge 裝置],然後選取左下方的 [儲存]。

      最後,從 [裝置管理>裝置] 功能表,確認您的新裝置存在於您的 IoT 中樞 中。 如需透過 Azure 入口網站 建立 IoT Edge 裝置的詳細資訊,請參閱使用對稱密鑰在 Linux 上建立和布建 IoT Edge 裝置。

    • 若要使用 CLI 建立 IoT Edge 裝置,請遵循 LinuxWindows 快速入門中的步驟。 在註冊 IoT Edge 裝置的過程中,您會建立 IoT Edge 裝置。

    如果您在開發計算機上執行IoT Edge 精靈,您可能需要在Visual Studio中開始開發之前先停止EdgeHub和EdgeAgent。

建立 Azure IoT Edge 專案

Visual Studio 中的 IoT Edge 專案範本會建立部署至 IoT Edge 裝置的解決方案。 首先,您會建立 Azure IoT Edge 解決方案。 然後,您會在該解決方案中建立模組。 每個 IoT Edge 解決方案可以包含一個以上的模組。

在我們的解決方案中,我們將建置三個專案。 除了溫度感測器模組之外,還包含 EdgeAgentEdgeHub的主要模組。 接下來,您會再新增兩個 IoT Edge 模組。

重要

Visual Studio 所建立的 IoT Edge 項目結構與 Visual Studio Code 中的 IoT Edge 項目結構不同。

目前,Azure IoT Edge 開發工具 CLI 不支援建立 Visual Studio 項目類型。 您必須使用 Visual Studio IoT Edge 擴充功能來建立 Visual Studio 專案。

  1. 在 Visual Studio 中,建立新專案。

  2. [建立新專案] 中,搜尋 Azure IoT Edge。 選取符合IoT Edge裝置平臺和架構的專案,然後選取[ 下一步]。

  3. 在 [ 設定新專案] 中,輸入項目的名稱、指定位置,然後選取 [ 建立]。

  4. 在 [ 新增模組] 中,選取您要開發的模組類型。 如果您有想要新增至部署的現有模組,請選取 [現有模組]。

  5. [模組名稱] 中,輸入模組的名稱。 選擇容器登錄內唯一的名稱。

  6. 在 [ 存放庫 URL] 中,提供模組映像存放庫的名稱。 Visual Studio 會以 localhost:5000/<您的模組名稱自動填入模組名稱>。 請使用您自己的登錄資訊加以取代。 如果您使用本機 Docker 登錄進行測試,請使用 localhost 。 如果您使用 Azure Container Registry,則請使用登錄設定中的登入伺服器。 登入伺服器看起來像<登錄名稱>.azurecr.io。 只取代字串的localhost:5000部分,讓最終結果看起來像<登錄名稱>。azurecr.io/< 您的模組名稱。>

  7. 選取 [新增 ] 將模組新增至專案。

    如何新增應用程式和模組的螢幕快照。

    注意

    如果您有現有的 IoT Edge 專案,您可以開啟 module.json 檔案來變更存放庫 URL。 存放庫 URL 位於 JSON 檔案的存放庫 屬性中。

現在,您的 Visual Studio 解決方案中有 IoT Edge 專案和 IoT Edge 模組。

專案結構

在您的方案中,有兩個專案層級資料夾,包括主要專案資料夾和單一模組資料夾。 例如,您可能有名為 AzureIotEdgeApp1 的主要項目資料夾,以及名為 IotEdgeModule1 的模組資料夾。 主要專案資料夾包含您的部署指令清單。

模組專案資料夾包含名為 Program.csmain.c 的模組程式代碼檔案,視您選擇的語言而定。 此資料夾也包含名為 module.json 的檔案,描述模組的元數據。 這裡所包含的各種 Docker 檔案會提供建置模組作為 Windows 或 Linux 容器所需的資訊。

專案的部署指令清單

您編輯的部署指令清單名稱為 deployment.debug.template.json。 此檔案是IoT Edge部署指令清單的範本,可定義在裝置上執行的所有模組,以及它們彼此通訊的方式。 如需部署指令清單的詳細資訊,請參閱 瞭解如何部署模組和建立路由

如果您開啟此部署範本,您會看到包含兩個運行時間模組 edgeAgentedgeHub ,以及您在此Visual Studio專案中建立的自定義模組。 也會包含名為 SimulatedTemperatureSensor 的第四個模組。 此預設模組會產生模擬數據,您可以用來測試模組,或視不需要刪除。 若要查看模擬溫度感測器的運作方式,請檢視 SimulatedTemperatureSensor.csproj 原始程式碼

設定 IoT Edge 執行時間版本

目前,最新的穩定運行時間版本是1.5。 您應該將IoT Edge執行時間版本更新為最新的穩定版本,或您想要針對裝置設定目標的版本。

  1. 在 方案總管 中,以滑鼠右鍵按兩下主要項目的名稱,然後選取 [設定 IoT Edge 運行時間版本]。

    如何尋找並選取名為 「設定IoT Edge 執行時間版本」功能表項的螢幕快照。

  2. 使用下拉功能表來選擇IoT Edge裝置正在執行的運行時間版本,然後選取 [ 確定 ] 以儲存變更。 如果未進行任何變更,請選取 [ 取消 ] 以結束。

    目前,延伸模組不包含最新運行時間版本的選取專案。 如果您想要設定高於 1.2 的執行時間版本,請開啟 deployment.debug.template.json 部署指令清單檔案。 變更系統運行時間模組映像 edgeAgentedgeHub的運行時間版本。 例如,如果您想要使用IoT Edge 執行時間1.5版,請在部署指令清單檔案中變更下列幾行:

    "systemModules": {
       "edgeAgent": {
        //...
          "image": "mcr.microsoft.com/azureiotedge-agent:1.5"
        //...
       "edgeHub": {
       //...
          "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
       //...
    
  3. 如果您變更版本,請以滑鼠右鍵按下專案名稱,然後選取 [產生 IoT Edge 的部署] 來重新產生部署指令清單。 這會根據您的部署範本產生部署指令清單,並出現在 Visual Studio專案的 config 資料夾中。

  1. 開啟 deployment.debug.template.json 部署指令清單檔案。 部署指令清單是 JSON 檔,描述要設定於目標 IoT Edge 裝置上的模組。

  2. 變更系統運行時間模組映像 edgeAgentedgeHub的運行時間版本。 例如,如果您想要使用IoT Edge 執行時間1.5版,請在部署指令清單檔案中變更下列幾行:

    "systemModules": {
        "edgeAgent": {
        //...
            "image": "mcr.microsoft.com/azureiotedge-agent:1.5",
        //...
        "edgeHub": {
        //...
            "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
        //...
    

模組基礎結構與開發選項

當您新增模組時,它隨附可建置並部署至裝置的預設程式碼,讓您可以開始測試,而不需要觸及任何程序代碼。 模組程式代碼位於名為 Program.cs (適用於 C#) 或 main.c (C) 檔案的模組資料夾中。

系統會建置默認解決方案,讓 SimulatedTemperatureSensor 模組中的模擬數據路由傳送至您的模組,該模組會接受輸入,然後將它傳送至 IoT 中樞。

當您準備好使用自己的程式代碼自定義模組範本時,請使用 Azure IoT 中樞 SDK 來建置模組,以解決 IoT 解決方案的主要需求,例如安全性、裝置管理和可靠性。

使用模擬器進行偵錯

Azure IoT EdgeHub Dev Tool 提供本機開發和偵錯體驗。 該工具可協助您在沒有 IoT Edge 執行階段的情況下啟動 IoT Edge 模組,以便您在本機上建立、開發、測試、執行和偵測 IoT Edge 模組和解決方案。 您不需要將映像推送至容器登錄,並將映像部署到裝置進行測試。

如需詳細資訊,請參閱 Azure IoT EdgeHub Dev Tool

若要在 Visual Studio 中初始化工具:

  1. Azure 入口網站 或 Azure CLI 擷取 IoT Edge 裝置的 連接字串(在您的 IoT 中樞 中找到)。

    如果使用 CLI 擷取您的 連接字串,請使用此命令,將 “[device_id]” 和 “[hub_name]” 取代為您自己的值:

    az iot hub device-identity connection-string show --device-id [device_id] --hub-name [hub_name]
    
  2. 從 Visual Studio 的 [工具] 功能表中,選取 [Azure IoT Edge 工具>設定 IoT Edge 模擬器]。

  3. 貼上 連接字串,然後選取 [確定]。

注意

您只需要在開發計算機上遵循這些步驟一次,因為結果會自動套用至所有後續的 Azure IoT Edge 解決方案。 如果您需要變更為不同的 連接字串,可以再次遵循此程式。

建置和偵錯單一模組

一般而言,您想要先測試並偵錯每個模組,再於具有多個模組的整個解決方案中執行。 IoT Edge 模擬器工具可讓您以隔離方式執行單一模組,透過埠 53000 傳送訊息。

  1. 方案總管 中,選取模組項目資料夾並反白顯示 (例如 IotEdgeModule1)。 將自定義模組設定為啟始專案。 從功能表中選取 [項目>設定為啟始專案]。

  2. F5 或選取執行工具列按鈕,以啟動單一模組的 IoT Edge 模擬器。 一開始可能需要 10 到 20 秒的時間。

    如何執行模組的螢幕快照。

  3. 如果模組已順利初始化,您應該會看到 .NET Core 控制台應用程式窗口出現。

  4. 設定斷點來檢查模組。

    • 如果在 C# 中開發,請在 函式中PipeMessage()設定斷點,ModuleBackgroundService.cs。
    • 如果使用 C,請在 main.cInputQueue1Callback() 函式中設定斷點。
  5. 傳送訊息來測試模組。 當您偵錯單一模組時,模擬器會接聽預設埠 53000 的訊息。 若要將訊息傳送至您的模組,請從 Git Bash 或 WSL Bash命令殼層執行下列 curl 命令。

    curl --header "Content-Type: application/json" --request POST --data '{"inputName": "input1","data":"hello world"}' http://localhost:53000/api/v1/messages
    

    如果您在 URL 中收到不相符的右大括弧/括弧錯誤,請改為嘗試下列命令:

    curl --header "Content-Type: application/json" --request POST --data "{\"inputName\": \"input1\", \"data\", \"hello world\"}"  http://localhost:53000/api/v1/messages
    

    輸出主控台、Visual Studio 專案和 Bash 視窗的螢幕快照。

    應該觸發斷點。 您可以在 Visual Studio [局部變數 ] 視窗中監看變數,在調試程式執行時找到。 移至 [偵錯>Windows>局部變數]。

    在您的 Bash 或殼層中,您應該會看到確認 {"message":"accepted"}

    在您的 .NET 控制台中,您應該會看到:

    IoT Hub module client initialized.
    Received message: 1, Body: [hello world]
    

    提示

    您也可以使用 PostMan 或其他 API 工具來傳送訊息, curl而不是 。

  6. Ctrl + F5 ,或選取停止偵錯的停止按鈕。

建置和偵錯多個模組

完成開發單一模組之後,您可能會想要使用多個模組來執行和偵錯整個解決方案。 IoT Edge 模擬器工具可讓您執行部署指令清單中定義的所有模組,包括用於訊息路由的模擬edgeHub。 在此範例中,您會執行兩個自定義模組和仿真的溫度感測器模組。 來自模擬溫度感測器模組的訊息會路由傳送至每個自定義模組。

  1. 方案總管 中,以滑鼠右鍵按下主要項目資料夾,將第二個模組新增至方案。 在功能表上,選取 [新增>IoT Edge 模組]。

    如何從功能表新增 「新增IoT Edge模組」的螢幕快照。

  2. Add module 視窗中,為您的新模組命名,並將存放庫 URL 的部分取代 localhost:5000 為您的 Azure Container Registry 登入伺服器,就像您先前所做的一樣。

  3. 開啟 檔案deployment.debug.template.json,以查看模組區段中已新增模組。 新的路由也已新增至 中的 EdgeHub routes 區段,以將訊息從新模組傳送至 IoT 中樞。 若要將數據從模擬溫度感測器傳送至新模組,請新增另一個路由,並加上下列這一行 JSON。 將 (在兩個地方) 取代 <NewModuleName> 為您自己的模組名稱。

    "sensorTo<NewModuleName>": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/<NewModuleName>/inputs/input1\")"
    
  4. 以滑鼠右鍵按兩下主要專案(例如 AzureIotEdgeApp1),然後選取 [ 設定為啟始專案]。 藉由將主要專案設定為啟始專案,方案中的所有模組都會執行。 這包括您新增至解決方案、模擬溫度感測器模組和模擬Edge中樞的這兩個模組。

  5. F5 或選取執行工具列按鈕以執行解決方案。 一開始可能需要 10 到 20 秒的時間。 請確定您沒有執行的其他 Docker 容器,可能會系結此專案所需的埠。

  6. 您應該會看到兩個 .NET Core 控制台應用程式視窗針對每個模組顯示一個。

  7. 設定斷點來檢查模組。

    • 如果在 C# 中開發,請在 函式中PipeMessage()設定斷點,ModuleBackgroundService.cs。
    • 如果使用 C,請在 main.cInputQueue1Callback() 函式中設定斷點。
  8. 在每個模組中建立斷點,然後按 F5 以同時執行和偵錯多個模組。 您應該會看到多個 .NET Core 控制台應用程式視窗,每個視窗都代表不同的模組。

    具有兩個輸出控制台的Visual Studio螢幕快照。

  9. Ctrl + F5 ,或選取停止偵錯的停止按鈕。

建置映像並推送至登錄

開發模組並進行偵錯之後,您就可以建置模組映像,並將模組映射推送至您的 Azure Container Registry。 接著,您可以將模組部署至IoT Edge裝置。

  1. 將主要IoT Edge專案設定為啟始專案,而不是其中一個個別模組。

  2. 選取 [ 偵錯 ] 或 [發行 ] 作為模組映射建置的組態。

    注意

    選擇 [ 偵錯] 時,Visual Studio 會使用 Dockerfile.(amd64|windows-amd64).debug 來建置 Docker 映射。 這包括容器映像中的 .NET Core 命令行調試程式 VSDBG,同時建置它。 針對生產環境就緒的IoT Edge模組,建議您使用 不含 VSDBG 的發行 組態 Dockerfile.(amd64|windows-amd64)

  3. 如果您使用 Azure Container Registry (ACR) 之類的私人登錄,請使用下列 Docker 命令來登入它。 您可以從登入 Azure 入口網站 的 [存取金鑰] 頁面取得使用者名稱和密碼

    docker login <ACR login server>
    
  4. 讓我們將 Azure Container Registry 登入資訊新增至 檔案 deployment.debug.template.json中找到的運行時間設定。 做法有二種。 您可以將登錄認證新增至檔案 .env (最安全),或將其直接新增至您的 deployment.debug.template.json 檔案。

    將認證新增至您的 .env 檔案:

    方案總管 中,選取 [顯示所有檔案] 工具列按鈕。 檔案 .env 隨即出現。 將 Azure Container Registry 使用者名稱和密碼新增至您的 .env 檔案。 您可以在 Azure Container Registry 的 [存取密鑰] 頁面上,於 Azure 入口網站 中找到這些認證。

    顯示 方案總管 中所有檔案的按鈕螢幕快照。

        DEFAULT_RT_IMAGE=1.2
        CONTAINER_REGISTRY_USERNAME_myregistry=<my-registry-name>
        CONTAINER_REGISTRY_PASSWORD_myregistry=<my-registry-password>
    

    將認證直接新增至deployment.debug.template.json

    如果您想要將認證直接新增至部署範本,請將佔位元取代為您的 ACR 管理員使用者名稱、密碼和登錄名稱。

          "settings": {
            "minDockerVersion": "v1.25",
            "loggingOptions": "",
            "registryCredentials": {
              "registry1": {
                "username": "<username>",
                "password": "<password>",
                "address": "<registry name>.azurecr.io"
              }
            }
          }
    

    注意

    本文使用適用於 Azure Container Registry 的管理員登入認證,這對開發和測試案例而言很方便。 當您準備好進行生產案例時,建議您使用最低許可權驗證選項,例如服務主體。 如需詳細資訊,請參閱 管理容器登錄的存取權。

  5. 如果您使用本機登錄,您可以 執行本機登錄

  6. 最後,在 方案總管,以滑鼠右鍵按兩下主要專案資料夾,然後選取 [建置和推送 IoT Edge 模組] 來建置和推送每個模組的 Docker 映像。 這可能需要一分鐘的時間。 當您在 Visual Studio 的 [輸出] 控制台中看到 Finished Build and Push IoT Edge Modules. 時,即已完成。

部署解決方案

既然您已建置模組映射並將其推送至 Azure Container Registry,您可以將解決方案部署至 IoT Edge 裝置。 您已有在本教學課程中觀察到的部署指令清單範本。 讓我們從中產生部署指令清單,然後使用 Azure CLI 命令將模組部署至 Azure 中的 IoT Edge 裝置。

  1. 以滑鼠右鍵按兩下 Visual Studio 中的主要專案 方案總管,然後選擇 [產生 IoT Edge 的部署]。

    [產生部署] 功能表項位置的螢幕快照。

  2. 移至您的本機 Visual Studio 主要專案資料夾,然後查看 config 資料夾。 檔案路徑看起來可能像這樣: C:\Users\<YOUR-USER-NAME>\source\repos\<YOUR-IOT-EDGE-PROJECT-NAME>\config。 您可以在這裡找到產生的部署指令清單,例如 deployment.amd64.debug.json

  3. 請檢查您的 deployment.amd64.debug.json 檔案以確認 edgeHub 架構版本已設定為 1.2。

     "$edgeHub": {
         "properties.desired": {
           "schemaVersion": "1.2",
           "routes": {
             "IotEdgeModule2022ToIoTHub": "FROM /messages/modules/IotEdgeModule2022/outputs/* INTO $upstream",
             "sensorToIotEdgeModule2022": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/IotEdgeModule2022/inputs/input1\")",
             "IotEdgeModule2022bToIoTHub": "FROM /messages/modules/IotEdgeModule2022b/outputs/* INTO $upstream"
           },
           "storeAndForwardConfiguration": {
             "timeToLiveSecs": 7200
           }
         }
       }
    

    提示

    Visual Studio 2022 的部署範本需要 1.2 架構版本。 如果您需要它為 1.1 或 1.0,請等到產生部署之後(請勿在 中 deployment.debug.template.json變更)。 根據預設,產生部署將會建立1.2架構。 不過,您可以在將指令清單部署到 Azure 之前,視需要手動變更 deployment.amd64.debug.json產生的指令清單。

    重要

    部署 IoT Edge 裝置之後,它目前將無法在架構版本 1.2 的 Azure 入口網站 正確顯示(版本 1.1)。 這是已知的 Bug,很快就會修正。 不過,這不會影響您的裝置,因為它仍在 IoT 中樞 中連線,而且可以隨時使用 Azure CLI 與 通訊。

    IoT Edge 裝置頁面上 Azure 入口網站 錯誤的螢幕快照。

  4. 現在讓我們使用 Azure CLI 命令來部署我們的指令清單。 開啟 Visual Studio 開發人員命令提示字元 ,並變更為 組態 目錄。

        cd config
    
  5. 將 IoT Edge 裝置的指令清單部署至 IoT 中樞。 命令會將裝置設定為使用解決方案中開發的模組。 部署指令清單是在上一個步驟中建立,並儲存在 config 資料夾中。 從您的 組態 資料夾中,執行下列部署命令。 以 [device id]您的值取代、 [hub name][file path] 。 如果ioT Edge裝置識別碼不存在於 IoT 中樞 中,則必須建立它。

        az iot edge set-modules --device-id [device id] --hub-name [hub name] --content [file path]
    

    例如,您的命令看起來可能像這樣:

    az iot edge set-modules --device-id my-device-name --hub-name my-iot-hub-name --content deployment.amd64.debug.json
    
  6. 執行命令之後,您會看到命令提示字元中 JSON 列印的部署確認。

建置模組 Docker 映像

開發模組之後,您可以建置模組映像,以儲存在容器登錄中,以部署至IoT Edge裝置。

使用模組的 Dockerfile 來建置模組 Docker 映射。

docker build --rm -f "<DockerFilePath>" -t <ImageNameAndTag> "<ContextPath>" 

例如,假設您的命令殼層位於專案目錄中,而模組名稱為 IotEdgeModule1。 若要建置本機登錄或 Azure 容器登錄的映像,請使用下列命令:

# Build the image for the local registry

docker build --rm -f "./IotEdgeModule1/Dockerfile.amd64.debug" -t localhost:5000/iotedgemodule1:0.0.1-amd64 "./IotEdgeModule1"

# Or build the image for an Azure Container Registry

docker build --rm -f "./IotEdgeModule1/Dockerfile.amd64.debug" -t myacr.azurecr.io/iotedgemodule1:0.0.1-amd64 "./IotEdgeModule1"

推送模組 Docker 映像

將您的模組映像推送至本機登錄或容器登錄。

docker push <ImageName>

例如:

# Push the Docker image to the local registry

docker push localhost:5000/iotedgemodule1:0.0.1-amd64

# Or push the Docker image to an Azure Container Registry
az acr login --name myacr
docker push myacr.azurecr.io/iotedgemodule1:0.0.1-amd64

將模組部署至IoT Edge裝置。

在 Visual Studio 中,開啟 主要專案中deployment.debug.template.json 部署指令清單檔。 部署指令清單是 JSON 檔,描述要設定於目標 IoT Edge 裝置上的模組。 部署之前,您必須更新 Azure Container Registry 認證、模組映像和適當的 createOptions 值。 如需 createOption 值的詳細資訊,請參閱 如何設定 IoT Edge 模組的容器建立選項。

  1. 如果您使用 Azure Container Registry 來儲存模組映像,您必須在edgeAgent設定中將認證新增至deployment.debug.template.json。 例如,

    "modulesContent": {
    "$edgeAgent": {
      "properties.desired": {
        "schemaVersion": "1.1",
        "runtime": {
          "type": "docker",
          "settings": {
            "minDockerVersion": "v1.25",
            "loggingOptions": "",
            "registryCredentials": {
              "myacr": {
                "username": "myacr",
                "password": "<your_acr_password>",
                "address": "myacr.azurecr.io"
              }
            }
          }
        },
    //...
    
  2. image 屬性值取代為您推送至登錄的模組映像名稱。 例如,如果您推送標記 myacr.azurecr.io/iotedgemodule1:0.0.1-amd64 自定義模組 IotEdgeModule1 的映像,請將 image 屬性值取代為標記值。

  3. createOptions 值新增或取代為部署範本中每個系統和自定義模組的字串化內容

    例如,IotEdgeModule1 的 映像createOptions 設定會如下所示:

    "IotEdgeModule1": {
    "version": "1.0.0",
    "type": "docker",
    "status": "running",
    "restartPolicy": "always",
    "settings": {
        "image": "myacr.azurecr.io/iotedgemodule1:0.0.1-amd64",
        "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
    }
    

使用 IoT Edge Azure CLI set-modules 命令,將模組部署至 Azure IoT 中樞。 例如,若要將 deployment.debug.amd64.json 檔案中定義的模組部署至ioT Edge裝置 my-device IoT 中樞 my-iot-hub,請使用下列命令:

az iot edge set-modules --hub-name my-iot-hub --device-id my-device --content ./deployment.debug.template.json --login "HostName=my-iot-hub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=<SharedAccessKey>"

提示

您可以在 [Azure IoT 中樞 安全性設定>共用存取原則] 底下的 [Azure 入口網站 中找到您的 IoT 中樞 連接字串。 >

確認裝置的部署

若要檢查 IoT Edge 模組是否已部署至 Azure,請登入您的裝置(或虛擬機),例如透過 SSH 或 Azure Bastion,然後執行 IoT Edge 清單命令。

   iotedge list

您應該會看到在裝置或虛擬機上執行的模組清單。

   NAME                        STATUS           DESCRIPTION      CONFIG
   SimulatedTemperatureSensor  running          Up a minute      mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.0
   edgeAgent                   running          Up a minute      mcr.microsoft.com/azureiotedge-agent:1.2
   edgeHub                     running          Up a minute      mcr.microsoft.com/azureiotedge-hub:1.2
   IotEdgeModule1              running          Up a minute      myacr.azurecr.io/iotedgemodule1:0.0.1-amd64.debug
   myIotEdgeModule2            running          Up a minute      myacr.azurecr.io/myiotedgemodule2:0.0.1-amd64.debug

使用 Docker 遠端 SSH 進行偵錯

Docker 和 Moby 引擎支援對容器的 SSH 連線,可讓您使用 Visual Studio 在遠端裝置上附加和偵錯程式碼。

  1. 從遠端 連線 Docker 需要根層級許可權。 請遵循以非根使用者身分管理 Docker 中的步驟,以允許連線到遠端裝置上的 Docker 精靈。 當您完成偵錯時,可能會想要從 Docker 群組中移除您的使用者。

  2. 請遵循步驟,使用 Visual Studio 附加 至遠端裝置上 Docker 容器 上執行的進程。

  3. 在 Visual Studio 中,在您的自定義模組中設定斷點。

  4. 叫用斷點時,您可以檢查變數、逐步執行程式代碼,以及對模組進行偵錯。

    附加至裝置上暫停斷點之遠端 Docker 容器的 Visual Studio 螢幕快照。

下一步