部署已啟用 IoT Edge 的 Linux VM
若要測試您的 IoT Edge 設定,則需要將 IoT Edge 執行階段部署到虛擬機器 (VM)。
將 IoT Edge 裝置部署到商店之前,您想要驗證裝置如預期般運作。 為了測試您的情節,您計畫將 IoT Edge 執行階段部署至 Azure Linux VM,然後將 IoT Edge 模組部署到此 VM。
在這裡,您將審視一些核心 IoT Edge 概念、了解 IoT Edge 裝置如何連線到 IoT Central 應用程式,以及 Azure IoT Edge 如何將您的 IoT Edge 模組部署至 IoT Edge 執行階段。
什麼是 IoT Edge 執行階段?
Azure IoT Edge 執行階段可在 IoT Edge 裝置上使用自訂的雲端邏輯。 該執行階段位於 IoT Edge 裝置,且會執行管理和通訊作業。 執行階段:
在裝置上安裝和更新工作負載。
在裝置上維護 Azure IoT Edge 安全性標準。
確保 IoT Edge 模組一律在執行中
向雲端回報模組健康情況以進行遠程監視。
管理下列裝置之間的通訊:
- 下游裝置和 IoT Edge 裝置
- IoT Edge 裝置上的模組
- IoT Edge 裝置和雲端
- IoT Edge 裝置
什麼是 IoT Edge 模組?
IoT Edge 模組為執行單位,可在邊緣執行您的商務邏輯。 模組會做為 Docker 相容的容器實作。 您可以將多個模組設定為彼此通訊,藉此建立資料處理的管道。 您可開發自訂模組,或將某些 Azure 服務封裝為提供離線與邊緣見解的模組。 因為模組是在 Docker 容器中執行,所以其行為方式與安裝在 VM 或實體裝置上的方式相同。
在下一個單元中,您將安裝 IoT Edge 執行階段,並部署自訂模組,以收集要傳送至 Azure IoT Central 的環境資料。 然後,Azure IoT Central 操作員便可藉由在應用程式中查看儀表板上的遙測資料,來監視您商店中的環境條件。
IoT Edge 裝置如何連線到 Azure IoT Central?
IoT Edge 裝置和其他裝置一樣,使用 IoT 中樞裝置佈建服務 (DPS) 連線到 Azure IoT Central 應用程式。 在上一個單元中,當您將裝置新增至 Azure IoT Central 應用程式時,您已記下範圍識別碼和裝置金鑰。 您可以將這些值新增至 IoT Edge 裝置上的 IoT Edge 設定檔。 此 TOML 檔案的相關區段看起來會如下所示。 registration_id
是裝置識別碼:
[provisioning]
source = "dps"
global_endpoint = "https://global.azure-devices-provisioning.net"
id_scope = "YOUR_ID_SCOPE"
[provisioning.attestation]
method = "symmetric_key"
registration_id = "YOUR_DEVICE_ID"
symmetric_key = { value = "YOUR_DEVICE_KEY" }
在下一個單元中,您用於 IoT Edge 裝置的部署腳本會為您編輯設定檔。
Azure IoT Central 如何將模組部署到 IoT Edge 執行階段?
在上一個單元中,當您為環境感應器建立裝置範本時,已將部署資訊清單上傳至範本。 當 Azure IoT Central 執行階段連線到您的 IoT Central 應用程式時,便會下載部署資訊清單。 執行階段會使用部署資訊清單中的資訊來決定要安裝哪些模組,以及如何設定這些模組。 模組會從容器登錄下載,例如 Azure Container Registry 或 Docker Hub。
您使用的部署資訊清單會安裝兩個必要的系統模組,edgeAgent
和 edgeHub
,以及自訂的 SimulatedTemperatureSensor
模組。 此自訂模組會將環境和機器遙測傳送至 Azure IoT Central,且有兩個屬性 SendData 和 SendInterval,可供操作員用來設定模組:
{
"modulesContent": {
"$edgeAgent": {
"properties.desired": {
"schemaVersion": "1.0",
"runtime": {
"type": "docker",
"settings": {
"minDockerVersion": "v1.25",
"loggingOptions": "",
"registryCredentials": {}
}
},
"systemModules": {
"edgeAgent": {
"type": "docker",
"settings": {
"image": "mcr.microsoft.com/azureiotedge-agent:1.4",
"createOptions": "{}"
}
},
"edgeHub": {
"type": "docker",
"status": "running",
"restartPolicy": "always",
"settings": {
"image": "mcr.microsoft.com/azureiotedge-hub:1.4",
"createOptions": "{}"
}
}
},
"modules": {
"SimulatedTemperatureSensor": {
"version": "1.0",
"type": "docker",
"status": "running",
"restartPolicy": "always",
"settings": {
"image": "mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.4.6",
"createOptions": "{}"
}
}
}
}
},
"$edgeHub": {
"properties.desired": {
"schemaVersion": "1.0",
"routes": {
"route": "FROM /* INTO $upstream"
},
"storeAndForwardConfiguration": {
"timeToLiveSecs": 7200
}
}
},
"SimulatedTemperatureSensor": {
"properties.desired": {
"SendData": true,
"SendInterval": 10
}
}
}
}