向基于Linux的Azure IoT Edge设备部署现成的模块
分类: Azure物联网 ◆ 标签: #Azure #IoT Edge # ◆ 发布于: 2023-06-14 20:46:30

我们前面两篇文章介绍了Azure IoT Edge
的基本概念,我们本章来快速的学习一下如何通过Azure Portal
来向一个基于Linux
的Azure IoT Edge
设备部署一个现成的模块。
我们本章的目的是:
- 使用
Azure CLi
创建一个用于测试的Azure IoT Hub
- 使用
Azure CLi
在Azure IoT Hub
上注册一个IoT Edge
设备 - 使用
Azure Ubuntu 18.04
的虚拟机安装Azure IoT Edge runtime
, 并使得该虚拟机连接Azure IoT Hub
。 - 通过
Azure Portal
向创建好的Azure IoT Edge
设备安装一个现成的模块。
关于如何安装和配置Azure Cli
,以及安装Azure IoT
扩展,请参考文章:https://www.azuredeveloper.cn/article/azure-iot-hub-tools, 我们这里不详细的表述了,请参考如下的命令。
设置Azure Cli
请使用如下的命令来设置Azure Cli
:
az cloud list -o table # 显示cli支持的云环境 az cloud set --name AzureChinaCloud # 切换到默认中国的Azure 云环境 az login # 登录云环境 az account set --subscription [Your Subscrpiton id] # 设置默认的订阅, 之后查询和创建的资源都在这个订阅里了。
设置好Azure CLi
之后,安装必要的扩展:
az extension list-available --output table # 列出目前支持的所有扩展 az extension list # 列出已安装的扩展 az extension remove --name azure-cli-iot-ext #移除老版本的IoT 扩展 az extension add --name azure-iot
使用Azure Cli
来创建Azure IoT Hub
使用如下的命令来创建我们本次教程的Azure IoT Hub
az group create --name MyIoTGroupByCli --location chinaeast2 # 创建一个资源组 az iot hub create --resource-group MyIoTGroupByCli --name MyIoTHubByCli # 创建一个IoT Hub的资源
创建一个IoT Edge
设备
使用如下的命令来创建一个IoT Edge
设备:
az iot hub device-identity create --edge-enabled --device-id simDevice --hub-name MyIoTHubByCli
注意在命令行中的参数--edge-enabled
, 该参数表明该设备是一个IoT Edge
设备,如果没有该参数只是一个普通设备,同时由于没有指定该设备的认证模式,默认是通过SAS key
来认证的。
设备创建完成之后,我们需要取得该设备的Primary SAS Key
, 以便用于IoT Edge
设备配置,使用如下的命令显示连接字符串,并妥善保存:
az iot hub device-identity connection-string show --hub-name MyIoTHubByCli --device-id simDevice --resource-group MyIoTGroupByCli
创建一个基于Ubuntu 18.04
的虚拟机
我们在这个教程里使用基于Ubuntu 18.04
的虚拟机来安装Azure IoT Edge Runtime
,使得该虚拟机成为一个边缘计算设备,我们使用如下的命令在同一个资源组里创建一个虚拟机:
az vm create --public-ip-sku Standard \ --resource-group MyIoTGroupByCli \ --name IoTEdgeOnMyUbuntu1804 \ --image Canonical:UbuntuServer:18.04-LTS:18.04.202112020 \ --admin-username azureuser \ --admin-password <Your Password>
从返回的结果中拿到public ipaddress
:
{ "fqdns": "", "id": "/subscriptions/<your subscription>/resourceGroups/MyIoTGroupByCli/providers/Microsoft.Compute/virtualMachines/IoTEdgeOnMyUbuntu1804", "location": "chinaeast2", "macAddress": "00-17-FA-03-01-07", "powerState": "VM running", "privateIpAddress": "10.0.0.4", "publicIpAddress": "<your public ip address>", "resourceGroup": "MyIoTGroupByCli", "zones": "" }
配置虚拟机为IoT Edge
设备
使用上一步创建的虚拟机,用ssh等到虚拟机上:
ssh azureuser@<public ip address>
登录之后使用如下的命令安装Azure IoT Edge
, 详细的关于如何安装和初步配置Azure IoT Edge
, 您可以参考文章:https://www.azuredeveloper.cn/article/simple-introduce-azure-iot-edge, 这篇文章里有详细的讨论,我们这里只是罗列命令:
curl https://packages.microsoft.com/config/ubuntu/18.04/multiarch/packages-microsoft-prod.deb > ./packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb sudo apt update sudo apt-get install moby-engine sudo apt-get install aziot-edge
到这里就安装完成了,下一步我们需要配置并启动Azure IoT Edge runtime
:
请找好我们上面的步骤得到的IoT Edge Device
的连接字符串,详细您翻到本章前面如何取得设备的SAS
连接字符串。
sudo iotedge config mp --connection-string '您的连接字符串' sudo iotedge config apply -c '/etc/aziot/config.toml' sudo iotedge system restart
至此可以查看是否启动了:
sudo iotedge system status sudo iotedge list
这个时候应该只能看到一个模块在运行,我们下一步,来部署我们需要的自定义模块。
设置系统模块和部署自定义模块Simulated Temperature Sensor
我们这一节来引导大家如何设置系统模块和部署一个自定义的模块Simulated Temperature Sensor
, 这是一个模拟温度控制器的模块。
设置系统模块
设备上的Azure IoT Edge
runtime安装完成之后,我们需要重新设定一下模块edgeAgent
和edgeHub
, 这两个模块的设置,需要登录到Azure Portal, 找到Azure IoT Hub, 然后在左侧菜单里找到IoT Edge
, 如下图:
然后在左侧的列表中找到您的Azure IoT Edge
设备,选择该设备,点击进去,然后选择菜单Set Module
, 如下图:
在出现的界面里选择Runtime Setting
, 如下图:
在配置页面中更改edgeAgent
和edgeHub
的路径和版本如下:
如下图:
然后在配置页面选择Apply
按钮之后,回到配置页面就完成了系统模块EdgeAgent
和EdgeHub
的配置了,关于详细的解释,您还可以参考文档:https://www.azuredeveloper.cn/article/simple-introduce-azure-iot-edge
部署自定义模块
我们这里要部署的自定义模块是Simulated Temperature Sensor
, 一般情况下我们可以通过Azure IoT Edge Marketplace
来搜索这个模块,但是很不幸的是Azure IoT Edge Marketplace
经常抽风,有时候甚至干脆就不工作了,所以我们建议在部署自定义模块的时候,如果自己知晓模块的镜像地址,干脆就通过手动来部署就好了。我们可以通过github
站点来详细的了解一个镜像的手动引入格式是什么,具体文档在这里:https://github.com/microsoft/containerregistry, 通过这里文档,我们可以得知该模块的镜像地址是:mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:latest
, 可以通过地址找到它的所有版本:https://mcr.microsoft.com/v2/azureiotedge-simulated-temperature-sensor/tags/list。
下面我们接上一步来继续部署自定义模块。
在上一步返回的界面里,选择下侧的+Add
, 然后选择IoT Edge Module
, 如下图:
在出现的界面上,按如下的设置:
我们前面讨论过一个模块可以在多个设备上部署,也可以在一个设备上部署多个,关键是我们需要给这个部署起一个独一无二的名字,例如我们这里给该模块部署起一个名字:SimulatedTemperatureSensor
, 如下图:
然后选择Add
返回。
返回之后,需要注意的是,不要直接选择Review + Create
, 而是选择: Next + Routes
, 如下图:
在出现的界面上,我们需要配置消息的路由,我们前面的文章讨论过,Azure IoT Edge
主要是完成两类功能:
- 管理模块
- 消息通讯
我们使用edgeHub
来完成消息通讯,而edge Hub
使用来进行消息通讯有两种方式:
- 和
Azure IoT Hub
一样,使用消息路由。 EdgeHub
本身就实现了一个基于MQTT
协议的消息代理服务器,模块和设备通过MQTT
协议来基于edgeHub
来完成消息通讯。
我们在这个界面上来设置消息路由来完成模块和其他组件的通讯:
- 我们给该路由取一个名字:
SimulatedTemperatureSensorRoute
- 给该路由设置一个规则:
FROM /messages/modules/SimulatedTemperatureSensor/* INTO $upstream
如下图:
然后选择下一步,Review + Create
, 然后再下一步选择Create
, 从而完成自定义模块的部署和系统模块的设置。
然后界面后,您可以会看到如下的错误:
你要么等部署完成,要么点击箭头所示的错误,进入界面, 然后在该界面上点击restart
, 至此应该都完全Ok了。
在Azure 虚拟机上,您可以通过如下的命令来查看状态:
sudo iotedge list sudo iotedge logs SimulatedTemperatureSensor -f
至此全部结束了,别忘了结束了之后删除全部的资源:
az group delete --name MyIoTGroupByCli