使用 Visual Studio 2022 來開發適用於 Azure IoT Edge 的模組,並對其進行偵錯
適用於: IoT Edge 1.5 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) 是開發慣用的工具。
- Azure IoT Edge tools for Visual Studio 延伸模組。 延伸模組目前是維護模式。
使用開頭的工具選取器按鈕,針對本文選擇您的工具選項。 這兩個集區皆提供下列優點:
- 在本機開發電腦上建立、編輯、建置、執行 IoT Edge 解決方案和模組並針對其進行偵錯。
- 以 C 或 C# 撰寫 Azure IoT 模組程式碼,並享有 Visual Studio 開發的優點。
- 透過 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 Tools 延伸模組目前處於維修模式。 慣用的開發工具是命令列 (CLI) Azure IoT Edge 開發工具。
提示
如果您使用 Visual Studio 2019,請從 Visual Studio 市集下載並安裝適用於 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 Registry 或 Docker Hub 來儲存模組映像。
提示
您可以使用本機 Docker 登錄作為原型並用於測試,而非使用雲端登錄。
安裝 Azure CLI。
若要在裝置上測試模組,您需要一個有效的 IoT 中樞,而且該中樞中至少必須有一個 IoT Edge 裝置。 若要建立 IoT Edge 裝置以進行測試,您可以在 Azure 入口網站中或使用 CLI 建立裝置:
在 Azure 入口網站中建立裝置是最快的方式。 從 Azure 入口網站移至您的 IoT 中樞資源。 選取 [裝置管理] 功能表下的 [裝置],然後選取 [新增裝置]。
在 [建立裝置] 中,使用 [裝置識別碼] 為您的裝置命名,核取 [IoT Edge 裝置],然後選取左下方的 [儲存]。
最後,從 [裝置管理] > [裝置] 功能表,確認您的新裝置存在於您的 IoT 中樞中。 如需關於透過 Azure 入口網站建立 IoT Edge 裝置的詳細資訊,請閱讀使用對稱金鑰在 Linux 上建立及佈建 IoT Edge 裝置。
若要使用 CLI 建立 IoT Edge 裝置,請遵循 Linux 或 Windows 快速入門中的步驟進行。 在註冊 IoT Edge 裝置的程序中,您會建立 IoT Edge 裝置。
如果您在開發電腦上執行 IoT Edge 精靈,則可能必須先停止 EdgeHub 與 EdgeAgent,才能開始在 Visual Studio 中進行開發。
建立 Azure IoT Edge 專案
Visual Studio 中的 IoT Edge 專案範本可建立一個解決方案,以部署到 IoT Edge 裝置。 首先,您會建立 Azure IoT Edge 解決方案。 然後,您會在該解決方案中建立模組。 每個 IoT Edge 解決方案都可以包含多個模組。
警告
適用於 Visual Studio 的 Azure IoT Edge Tools 延伸模組缺少 C 和 C# 模組的專案範本。 我們正著手解決問題。 如果您無法使用該延伸模組建立 IoT Edge 模組,請使用下列因應措施。
下載下列檔案,並將其放在列出的 Visual Studio 範本目錄中:
範本檔案 | 新增至目錄 |
---|---|
azureiotedgemodule-v0.0.4.zip | %userprofile%\Documents\Visual Studio 2022\Templates\ProjectTemplates\Visual C# |
azureiotedgevcmodulevs17-v0.0.9.zip | %userprofile%\Documents\Visual Studio 2022\Templates\ProjectTemplates\Visual C++ Project |
在我們的解決方案中,我們將建置三個專案。 包含 EdgeAgent 和 EdgeHub 的主要模組,以及溫度感應器模組。 接下來,您會再新增兩個 IoT Edge 模組。
重要
Visual Studio 所建立的 IoT Edge 專案結構與 Visual Studio Code 中的 IoT Edge 專案結構不同。
目前,Azure IoT Edge 開發工具 CLI 不支援建立 Visual Studio 專案類型。 您必須使用 Visual Studio IoT Edge 延伸模組來建立 Visual Studio 專案。
在 Visual Studio 中,建立新專案。
在 [建立新專案] 中,搜尋 Azure IoT Edge。 選取符合 IoT Edge 裝置所適用平台和架構的專案,然後選取 [下一步]。
在 [設定新專案] 中,輸入您專案的名稱、指定位置,然後選取 [建立]。
在 [新增模組] 中,選取您想要開發模組的類型。 如果您要將現有模組新增至您的部署,請選取 [現有模組]。
在 [模組名稱] 中,輸入模組的名稱。 選擇容器登錄內唯一的名稱。
在 [存放庫 URL] 中,提供模組映像存放庫的名稱。 Visual Studio 會自動以 localhost:5000/<您的模組名稱>填入模組名稱。 請使用您自己的登錄資訊加以取代。 如果您使用本機 Docker 登錄來進行測試,請使用 localhost。 如果您使用 Azure Container Registry,則請使用登錄設定中的登入伺服器。 登入伺服器看起來像 *<登錄名稱>*.azurecr.io。 僅取代字串的 localhost:5000 部分即可,因此最後的結果看起來像 *<登錄名稱>.azurecr.io/<您的模組名稱>。
選取 [新增] 將模組新增至專案。
注意
如果您有現有的 IoT Edge 專案,可以開啟 module.json 檔案來變更存放庫 URL。 存放庫 URL 位於 JSON 檔案的 repository 屬性中。
現在,您的 Visual Studio 解決方案中有 IoT Edge 專案和 IoT Edge 模組。
專案結構
在您的解決方案中,有兩個專案層級資料夾,包括主要專案資料夾和單一模組資料夾。 例如,您可能有名為 AzureIotEdgeApp1 的主要專案資料夾,以及名為 IotEdgeModule1 的模組資料夾。 主要專案資料夾包含您的部署資訊清單。
模組專案資料夾包含模組程式碼的檔案 (名為 Program.cs
或 main.c
),取決於您所選擇的語言。 此資料夾也包含名為 module.json
的檔案,其中描述模組的中繼資料。 此處包含的各種 Docker 檔案會提供建置模組做為 Windows 或 Linux 容器所需的資訊。
專案的部署資訊清單
您要編輯的部署資訊清單稱為 deployment.debug.template.json
。 此檔案是 IoT Edge 部署資訊清單的範本,可定義在裝置上執行的所有模組,以及其彼此通訊的方式。 如需部署資訊清單的詳細資訊,請參閱了解如何部署模組及建立路由。
如果您開啟此部署範本,會看到包含了兩個執行階段模組:edgeAgent 和 edgeHub,以及您在此 Visual Studio 專案中建立的自訂模組。 另外也包含名為 SimulatedTemperatureSensor 的第四個模組。 此預設模組會產生模擬資料,可供您用來測試模組,或視需要進行刪除。 若要查看模擬溫度感應器的運作方式,請檢視 SimulatedTemperatureSensor.csproj 原始程式碼。
設定 IoT Edge 執行階段版本
目前,最新的穩定 run-time 版本是 1.5 版。 您應該將 IoT Edge 執行階段版本更新為最新的穩定版本,或您想要針對裝置設定目標的版本。
在方案總管中,以滑鼠右鍵按一下主要專案的名稱,然後選取 [設定 IoT Edge 執行階段版本]。
使用下拉式功能表來選擇 IoT Edge 裝置正在執行的執行階段版本,然後選取 [確定] 以儲存變更。 如果未進行任何變更,請選取 [取消] 以結束。
目前,延伸模組不包含最新執行階段版本的選取項目。 如果您想要設定高於 1.2 的執行階段版本,請開啟 deployment.debug.template.json 部署資訊清單檔。 變更系統執行時間模組映像 edgeAgent 和 edgeHub 的執行時間版本。 例如,如果您想要使用 IoT Edge 執行階段 1.5 版,請在部署資訊清單檔中變更下列幾行:
"systemModules": { "edgeAgent": { //... "image": "mcr.microsoft.com/azureiotedge-agent:1.5" //... "edgeHub": { //... "image": "mcr.microsoft.com/azureiotedge-hub:1.5", //...
如果您已變更版本,請以滑鼠右鍵按一下專案的名稱,然後選取 [為 IoT Edge 產生部署],以重新產生部署資訊清單。 這會根據您的部署範本產生部署資訊清單,並會出現在 Visual Studio 專案的 config 資料夾中。
開啟 deployment.debug.template.json 部署資訊清單檔。 部署資訊清單是一份 JSON 文件,其中描述要在目標 IoT Edge 裝置上設定的模組。
變更系統執行時間模組映像 edgeAgent 和 edgeHub 的執行時間版本。 例如,如果您想要使用 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 開發人員工具提供本機開發和偵錯體驗。 該工具可協助您在沒有 IoT Edge 執行階段的情況下啟動 IoT Edge 模組,以便您在本機上建立、開發、測試、執行和偵測 IoT Edge 模組和解決方案。 您不需要將映像推送至容器登錄,並將映像部署到裝置進行測試。
如需詳細資訊,請參閱 Azure IoT EdgeHub 開發人員工具。
若要在 Visual Studio 中初始化工具:
從 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]
從 Visual Studio 的 [工具] 功能表中,選取 [Azure IoT Edge Tools]>[設定 IoT Edge 模擬器]。
貼上連接字串,然後選取 [確定]。
注意
您只需要在開發電腦上進行這些步驟一次,因為結果會自動套用至全部後續的 Azure IoT Edge 解決方案。 如果您要變更為不同的連接字串,可以再次進行此程序。
建置單一模組並針對其進行偵錯
一般而言,您為想要先針對每個模組進行測試和偵錯,然後在使用多個模組的整個解決方案中執行。 IoT Edge 模擬器工具可讓您以隔離方式執行單一模組,透過連接埠 53000 傳送訊息。
在 [方案總管] 中,選取並反白顯示模組專案資料夾(例如 IotEdgeModule1)。 將自訂模組設定為啟始專案。 從功能表中選取 [項目]>[設定為啟始專案]。
按 F5 或選取執行工具列按鈕,以啟動單一模組的 IoT Edge 模擬器。 一開始可能需要 10 到 20 秒的時間。
如果模組已成功初始化,您應該會看到顯示 .NET Core 主控台應用程式視窗。
設定中斷點來檢查模組。
- 如果是在 C# 中進行開發,請在 ModuleBackgroundService.cs 的
PipeMessage()
函式中設定中斷點。 - 若是使用 C,請在 main.c 的
InputQueue1Callback()
函式中設定中斷點。
- 如果是在 C# 中進行開發,請在 ModuleBackgroundService.cs 的
傳送訊息來測試模組。 當您針對單一模組進行偵錯時,模擬器會接聽預設連接埠 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 [區域變數] 視窗 (可在偵錯工具執行時找到) 中監看變數。 移至 [偵錯]>[Windows]>[區域變數]。
您應該會在 Bash 或殼層中看到
{"message":"accepted"}
確認。您應該會在 .NET 主控台中看到:
IoT Hub module client initialized. Received message: 1, Body: [hello world]
按下 Ctrl + F5 或選取 [停止] 按鈕以停止偵錯。
建置多重模組並針對其進行偵錯
您完成開發單一模組之後,您會想要執行使用多個模組的整個解決方案以及針對其進行偵錯。 IoT Edge 模擬器工具可讓您執行部署資訊清單中定義的所有模組,包括用於訊息路由的模擬 edgeHub。 在此範例中,您會執行兩個自訂模組和模擬的溫度感應器模組。 來自模擬溫度感應器模組的訊息會路由傳送至每個自訂模組。
在 [方案總管] 中,以滑鼠右鍵按一下主要專案資料夾,將第二個模組新增至解決方案。 在功能表上,選取 [新增]>[新增 IoT Edge 模組]。
在
Add module
視窗中,提供新模組的名稱,並將存放庫 URL 的localhost:5000
部分取代為您 Azure Container Registry 登入伺服器,如同您先前所做的一樣。開啟
deployment.debug.template.json
檔案,可查看新模組已新增至 [模組] 區段中。 新的路由也會新增至EdgeHub
中的 [路由] 區段,以將訊息從新模組傳送至 IoT 中樞。 若要將資料從模擬溫度感應器傳送至新的模組,請新增另一個路由,其中包含下列JSON
這一行。 以您自己的模組名稱取代<NewModuleName>
(兩個位置中)。"sensorTo<NewModuleName>": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/<NewModuleName>/inputs/input1\")"
以滑鼠右鍵按一下主要專案 (例如,AzureIotEdgeApp1),然後選取 [設定為啟始專案]。 將主要專案設定為啟始專案後,解決方案中的所有模組都會執行。 這包括您新增至解決方案、模擬溫度感應器模組和模擬 Edge 中樞的這兩個模組。
按 F5 或選取執行工具列按鈕以執行解決方案。 一開始可能需要 10 到 20 秒的時間。 請確定您沒有其他執行中的 Docker 容器,其可能會繫結此專案所需的連接埠。
您應該會看到兩個 .NET Core 主控台應用程式視窗針對每個模組各顯示一個。
設定中斷點來檢查模組。
- 如果是在 C# 中進行開發,請在 ModuleBackgroundService.cs 的
PipeMessage()
函式中設定中斷點。 - 若是使用 C,請在 main.c 的
InputQueue1Callback()
函式中設定中斷點。
- 如果是在 C# 中進行開發,請在 ModuleBackgroundService.cs 的
在每個模組中建立中斷點,然後按下 F5,同時執行多個模組並針對其進行偵錯。 您應該會看到多個 .NET Core 主控台應用程式視窗,每個視窗都代表不同的模組。
按下 Ctrl + F5 或選取 [停止] 按鈕以停止偵錯。
建置映像並推送至登錄
開發模組並針對模組進行偵錯之後,您就可以建置模組映像,並將模組映像推送至您的 Azure Container Registry。 接著,您可以將模組部署到您的 IoT Edge 裝置。
將主要 IoT Edge 專案設定為啟始專案,而非其中一個個別模組。
選取 [偵錯] 或 [發行] 做為要對於模組映像建置的設定。
注意
選擇 [偵錯] 時,Visual Studio 將使用
Dockerfile.(amd64|windows-amd64).debug
來建置 Docker 映像。 這包含建置它時容器映像中的 .NET Core 命令列偵錯工具 VSDBG。 對於生產就緒 IoT Edge 模組,建議您使用 [發行] 設定,此設定會使用無 VSDBG 的Dockerfile.(amd64|windows-amd64)
。如果您使用私人登錄,例如 Azure Container Registry (ACR),請使用下列 Docker 命令來登入。 您可在 Azure 入口網站中,從您登錄的 [存取金鑰] 頁面取得使用者名稱和密碼。
docker login <ACR login server>
讓我們將 Azure Container Registry 登入資訊新增至
deployment.debug.template.json
檔案中找到的執行階段設定。 做法有二種。 您可以將登錄認證新增至您的.env
檔案 (最安全的),或將其直接新增至您的deployment.debug.template.json
檔案。將認證新增至您的
.env
檔案:在 [方案總管] 中,選取 [顯示所有檔案] 工具列按鈕。
.env
檔案隨即出現。 將您的 Azure Container Registry 使用者名稱和密碼新增至您的.env
檔案。 您可以在 Azure 入口網站中,從您 Azure Container Registry 的 [存取金鑰] 頁面上找到這些認證。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 使用系統管理員登入認證,可便於開發和測試案例使用。 當您準備好進行生產案例時,建議使用最低權限驗證選項,例如服務主體。 如需詳細資訊,請參閱管理您容器登錄的存取權。
如果您使用的是本機登錄,可以執行本機登錄。
最後,在 [方案總管] 中,以滑鼠右鍵按一下主要專案資料夾,然後選取 [建置及推送 IoT Edge 模組],以建置及推送每個模組的 Docker 映像。 這可能需要一分鐘的時間。 當您在 Visual Studio 的 [輸出] 主控台中看到
Finished Build and Push IoT Edge Modules.
時,代表您已完成。
部署解決方案
現在您已建置模組映像並將其推送至 Azure Container Registry,即可將解決方案部署至 IoT Edge 裝置。 您已擁有在本教學課程中所觀察到的部署資訊清單範本。 讓我們在其中產生部署資訊清單,然後使用 Azure CLI 命令將您的模組部署至 Azure 中的 IoT Edge 裝置。
以滑鼠右鍵按一下 Visual Studio 方案總管中的主要專案,然後選擇 [為 IoT Edge 產生部署]。
移至本機 Visual Studio 主要專案資料夾,然後查看
config
資料夾。 檔案路徑看起來可能像這樣:C:\Users\<YOUR-USER-NAME>\source\repos\<YOUR-IOT-EDGE-PROJECT-NAME>\config
。 您可以在這裡找到所產生的部署資訊清單,例如deployment.amd64.debug.json
。請檢查您的
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 結構描述。 不過,您可以視需要手動變更deployment.amd64.debug.json
(所產生的資訊清單),然後再將其部署至 Azure。重要
在您部署 IoT Edge 裝置之後,若其使用結構描述 1.2 版,目前在 Azure 入口網站中不會正確顯示 (1.1 版可正確顯示)。 這是已知的錯誤,將會盡快進行修正。 不過,這不會影響您的裝置,因為其在 IoT 中樞中仍為連線狀態,且可以隨時使用 Azure CLI 進行通訊。
現在讓我們使用 Azure CLI 命令來部署資訊清單。 開啟 Visual Studio [開發人員命令提示字元],並變更為 [組態] 目錄。
cd config
將 IoT Edge 裝置的資訊清單部署至 IoT 中樞。 命令會將裝置設定為使用解決方案中所開發的模組。 部署資訊清單已在上一個步驟中建立,並且儲存在 config 資料夾中。 從您的 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
執行命令之後,您會在命令提示字元中,看到列印在
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 模組的容器建立選項。
如果您使用 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" } } } }, //...
將 image 屬性值取代為您推送至登錄的模組映像名稱。 例如,如果您針對自訂模組 IotEdgeModule1 推送標記
myacr.azurecr.io/iotedgemodule1:0.0.1-amd64
的映像,請將 image 屬性值取代為標記值。針對部署範本中的每個系統和自訂模組新增 createOptions 值或將此值取代為字串化內容。
例如,IotEdgeModule1 的 image 和 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 中樞 IoT Edge 裝置 my-device 的 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 list 命令。
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 在遠端裝置連結程式碼並針對程式碼進行偵錯。
遠端連線到 Docker 需要根層級使用權限。 請遵循以非根使用者身分管理 Docker 中的步驟,以允許遠端裝置上的 Docker 精靈連線。 完成偵錯之後,您可能會想要從 Docker 群組中移除您的使用者。
請遵循下列步驟,在遠端裝置上使用 Visual Studio 連結至 Docker 容器上執行的程序。
在 Visual Studio 中,在您的自訂模組中設定中斷點。
觸及中斷點時,您可以檢查變數、逐步檢查程式碼,以及對模組進行偵錯。
下一步
若要為您的 IoT Edge 裝置開發自訂模組,請了解及使用 Azure IoT 中樞 SDK。
若要監視特定 IoT Edge 裝置的裝置到雲端 (D2C) 訊息,請檢閱教學課程:監視 IoT Edge 裝置以開始使用。