使用Azure IoT Hub Device Provisioning Service部署大量的Azure IoT Edge设备
分类: Azure物联网 ◆ 标签: #Azure #IoT Edge # ◆ 发布于: 2023-06-14 21:17:51

我们之前的几篇文章都是在单个的Azure IoT Edge
设备上讨论如何安装和部署,如果我们需要大量的Azure IoT Edge
设备,该如何处理?这个时候我们就需要使用Azure IoT Hub Device Provisioning Service
了,关于什么是DPS
服务,以及DPS
相关的文档,您可以参考这个文档列表:https://www.azuredeveloper.cn/article/azure-iot-hub-device-provisioning-service
了解Azure IoT Hub DPS
服务,就知道它是通过两种方式来登记和注册设备的,单个设备登记和注册,分组登记和注册,如果需要大量的设备,我们建议使用分组登记和注册。关于设备的认证,我们这里仍然采用SAS Key
的形式。
本节使用DPS
服务的分组登记来处理大量部署Azure IoT Edge
设备。
本节的目的:
- 使用
Azure Cli
创建Azure IoT Hub
以及Azure IoT Hub DPS
服务,并连接DPS
和IoT Hub - 在
DPS
服务中登记分组。 - 安装基于
Ubuntu 18.04
的IoT Edge Runtime, 并使用DPS
登记注册。
创建Azure IoT Hub
和Azure IoT Hub DPS
服务,并连接他们。
我们这里仍然使用Azure CLi
的IoT扩展,关于如何安装该工具,请参考文档:https://www.azuredeveloper.cn/article/azure-iot-hub-tools
请使用如下的命令来设置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的资源
创建DPS
服务:
az iot dps create --name my-sample-dps --resource-group MyIoTGroupByCli --location chinaeast2
下面我们需要将DPS
服务和Azure IoT Hub
连接起来
使用如下的命令得到Azure IoT Hub
的连接字符串:
az iot hub show-connection-string --name MyIoTHubByCli --key primary --query connectionString -o tsv
连接DPS
和Azure IoT Hub
:
az iot dps linked-hub create --dps-name my-sample-dps --resource-group MyIoTGroupByCli --connection-string <您的连接字符串> --location chinaeast2
使用如下的命令来检验已经创建好的DPS
服务:
az iot dps show --name my-sample-dps
在Azure IoT Hub DPS
中登记分组
请使用如下的命令创建分组设备登记:
az iot dps enrollment-group create -g my-sample-resource-group --dps-name my-sample-dps --enrollment-id my-first-enrollment-group
取回DPS
服务的idScope
:
az iot dps show --name my-sample-dps -g my-sample-resource-group | jq .properties.idScope
请注意这里需要安装工具jq, 请参考网站:https://stedolan.github.io/jq/
使用如下的取回SAS Key
az iot dps enrollment-group show --dps-name my-sample-dps -g my-sample-resource-group --enrollment-id my-first-enrollment-group --show-key
如下图:
请保存好我们如图所示的primary key。
创建基于Ubuntu 18.04
的虚拟机,并安装IoT Edge
我们在这个教程里使用基于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
配置Azure IoT Edge
通过DPS
分组登记,我们需要计算每个设备的设备Key, 关于设备的Key解释,您可以参考文档:https://www.azuredeveloper.cn/article/how-to-sas-key-group-dps, 我们这里假定客户在使用windows, 并有powershell, 我们采用如下的代码来计算设备的Key:
$KEY='PASTE_YOUR_ENROLLMENT_KEY_HERE' $REG_ID='PASTE_YOUR_REGISTRATION_ID_HERE' $hmacsha256 = New-Object System.Security.Cryptography.HMACSHA256 $hmacsha256.key = [Convert]::FromBase64String($KEY) $sig = $hmacsha256.ComputeHash([Text.Encoding]::ASCII.GetBytes($REG_ID)) $derivedkey = [Convert]::ToBase64String($sig) echo "`n$derivedkey`n"
注意这里的值就是设备的key
。
ssh登录到虚拟机之后,采用如下的方式来设定:
sudo cp /etc/aziot/config.toml.edge.template /etc/aziot/config.toml sudo nano /etc/aziot/config.toml
更改该文件内容如下:
# DPS provisioning with symmetric key [provisioning] source = "dps" global_endpoint = "global.azure-devices-provisioning.cn" id_scope = "PASTE_YOUR_SCOPE_ID_HERE" [provisioning.attestation] method = "symmetric_key" registration_id = "PASTE_YOUR_REGISTRATION_ID_HERE" symmetric_key = "PASTE_YOUR_PRIMARY_KEY_OR_DERIVED_KEY_HERE"
保存该文件之后,运行:
sudo iotedge config apply
到这里完成了通过DPS来大量注册Azure IoT Edge
基本步骤。