Skip to main content

向基于Linux的Azure IoT Edge设备部署现成的模块

分类:  Azure物联网 标签:  #Azure #IoT Edge # 发布于: 2023-06-14 20:46:30

我们前面两篇文章介绍了Azure IoT Edge的基本概念,我们本章来快速的学习一下如何通过Azure Portal来向一个基于LinuxAzure IoT Edge设备部署一个现成的模块。

我们本章的目的是:

  • 使用Azure CLi创建一个用于测试的Azure IoT Hub
  • 使用Azure CLiAzure 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安装完成之后,我们需要重新设定一下模块edgeAgentedgeHub, 这两个模块的设置,需要登录到Azure Portal, 找到Azure IoT Hub, 然后在左侧菜单里找到IoT Edge, 如下图:


然后在左侧的列表中找到您的Azure IoT Edge设备,选择该设备,点击进去,然后选择菜单Set Module, 如下图:


在出现的界面里选择Runtime Setting, 如下图:


在配置页面中更改edgeAgentedgeHub的路径和版本如下:

如下图:


然后在配置页面选择Apply按钮之后,回到配置页面就完成了系统模块EdgeAgentEdgeHub的配置了,关于详细的解释,您还可以参考文档: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来完成消息通讯。

我们在这个界面上来设置消息路由来完成模块和其他组件的通讯:

  1. 我们给该路由取一个名字:SimulatedTemperatureSensorRoute
  2. 给该路由设置一个规则: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