Skip to main content

使用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 HubAzure 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

连接DPSAzure 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基本步骤。