快速入门:使用 Azure CLI 管理单个虚拟 IoT 设备
重要
此文档不再更新,将被删除。 有关尝试 OSConfig 方案的 up-to日期说明:
- 首先,在 5 分钟内按照 创建 OSConfig(使用 Azure IoT)实验室环境的步骤操作
- 接下来,尝试以下任一方案:可以预配和管理哪些方案?
本快速入门的目标是通过 OSConfig for IoT 熟悉 IoT/Edge 设备的远程管理。 在第 1 部分中,将设置测试环境,包括创建 VM 以充当虚拟 IoT 设备。 在第 2 部分中,你将执行多个设备管理操作,例如:
- 远程检索设备的 IP 地址
- 从设备的角度远程测试终结点连接
- 远程重启设备
- 和更多
本快速入门使用单个示例设备。 若要大规模使用 OSConfig,请使用 Iot Hub 设备管理 服务作为控制平面,而不是单独的 Azure CLI 命令。
先决条件
- 需要具有活动订阅的 Azure 帐户。 如果需要,可以 免费创建帐户。
- 将使用 Azure Cloud Shell
bash
环境- 注意:如果这是你第一次使用 Azure Cloud Shell,门户将引导你在继续之前创建一些存储空间。 这是正常的。
- 注意:Azure Cloud Shell 已有最新的 Azure CLI 工具,并且会自动登录到 Azure 帐户。 如果想要使用自己的
bash
环境,而不是 cloud shell,可以在自己的bash
环境中 安装和配置 Azure CLI。
- 需要使用适用于 Azure CLI 的 Azure IOT 扩展,可以使用以下命令添加该扩展:
az extension add --name azure-iot
显示 az extension add --name azure-iot 的
验证先决条件
- 从 Azure Cloud Shell(或备用
bash
环境),确保 Azure CLI 登录到要使用的 Azure 帐户和订阅上下文。
az account show
命令的
如果需要使用不同的帐户登录或更改订阅,可以使用 az login
和 az account set
命令。
快速入门环境概述
第 1 部分:设置环境
1.1:创建 Azure IoT 资源
1.1.1:为 IoT 中心定义唯一名称
需要为 IoT 中心创建唯一名称,例如 “QuickStart12345” 或 “HelloWorld98765”。 该名称将在后面的命令中重复使用,因此我们会将其存储在 bash 变量中,如下所示:
# In the following command replace <Your_Made_Up_Name_Here>
# with your own preferred hub name, for example:
# MY_IOT_HUB_NAME="MyQuickStart54321"
MY_IOT_HUB_NAME="<Your_Made_Up_Name_Here>"
将 IOT 中心选择的唯一名称分配给变量MY_IOT_HUB_NAME的 bash 示例
1.1.2:创建资源组和 IoT 中心
az group create --resource-group QuickstartOSConfig --location westus
az iot hub create --resource-group QuickstartOSConfig --name "$MY_IOT_HUB_NAME" --query id
az group create 命令 的
az iot hub create 命令 的
提示
如果 az iot hub create...
命令失败,并出现名称不可用的错误,则表示所选名称已在 Azure 中的其他位置使用。 若要解决此问题,请使用新的更唯一的名称重复上述 MY_IOT_HUB_NAME="<Your_Made_Up_Name_Here>"
步骤,然后再次尝试 az iot hub create ...
命令。
提示
az iot hub create...
命令完成几分钟并不罕见。
1.1.3:创建设备 ID 并获取设备连接字符串
az iot hub device-identity create --hub-name "$MY_IOT_HUB_NAME" -d device01 --query deviceId
az iot hub device-identity connection-string show --hub-name "$MY_IOT_HUB_NAME" --device-id device01
示例 az iot 命令 的
提示
记下最后一个命令返回的 connectionString
值(以 HostName=
开头)。 将在后面的步骤中使用此连接字符串。
1.2:创建 Azure VM 以充当虚拟 IoT 设备
使用以下命令创建虚拟机。
az vm create --resource-group QuickstartOSConfig --name device01 --image Canonical:UbuntuServer:18.04-lts:latest --admin-username azureuser --generate-ssh-keys --query publicIpAddress
az vm create 命令 的
提示
记下最后一个命令返回的 IP 地址。 在以下步骤中,你将使用此地址。
1.3:在虚拟 IoT 设备上安装客户端软件
1.3.1:建立对虚拟设备的 终端访问
接下来的几个命令需要在刚创建的 VM 上运行 。 使用 SSH 进行连接:
# In the following command, replace <public ip address from previous step> with
# the actual IP address. For example:
# ssh azureuser@1.2.3.4
ssh azureuser@<ip address from previous step>
ssh 命令 的
提示
ssh 客户端可能需要键入 yes
才能继续。 这是正常的。
提示
在继续操作之前,请检查你现在是否已连接到虚拟 IoT 设备。 命令提示符应已从 <your name>@azure:
更改为 azureuser@device01:
。 如果命令提示符未更改为 azureuser@device01:
,请再次运行上述 ssh
命令。
1.3.2:在虚拟设备上,安装 aziot-identity-service
sudo apt-get update
curl -sSL https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add
sudo apt-add-repository https://packages.microsoft.com/ubuntu/18.04/multiarch/prod
sudo apt-get update
sudo apt install -y aziot-identity-service
apt 命令 的
apt 命令 的
1.3.3:在虚拟设备上,应用连接字符串
使用以下命令将设备配置为向 Azure IoT 进行身份验证。 将使用之前在 创建 Azure IoT 资源获取的连接字符串值。
sudo aziotctl config mp --connection-string "<your connection string>"
sudo aziotctl config apply
aziotctl 命令 的
1.3.4:在虚拟设备上,安装 OSConfig 包 并观察它正在运行
sudo apt install -y osconfig
sudo systemctl status osconfig | grep --color=never Active
sudo apt install -y osconfig 的
1.2.5:退出 SSH 会话
exit
第 2 部分:使用适用于 IoT 的 OSConfig
你做了! 准备好环境后,我们便可以开始使用 OSConfig 通过 IoT 中心获取和设置主机级配置和状态。 在 Azure Cloud Shell 或计算机中,使用以下 Azure CLI 命令完成每个示例。
2.1:这是否在?
我们将首先获取设备的 IoT 中心 deviceId
,并显示 OSConfig 处于活动状态。
az iot hub query --hub-name "$MY_IOT_HUB_NAME" -q "select deviceId,moduleId,connectionState from devices.modules where deviceID='device01' and moduleId='osconfig'"
az iot hub query 命令 的
2.2:获取 IoT 中心中任何已启用 OSConfig 的设备的设备网络状态,例如 IP 地址和 DNS 服务器
报告托管设备中的网络状态有许多用例。 例如,可能需要本地 IP 地址来连接本地 IP 视频流。同样,你可能希望报告 DNS 服务器用于故障排除或确保设备使用预期的网络基础结构。 以下示例检索分配给每个网络适配器的 IP 地址和 DNS 服务器。
az iot hub query --hub-name "$MY_IOT_HUB_NAME" -q "select deviceId,properties.reported.Networking.NetworkConfiguration.IpAddresses,properties.reported.Networking.NetworkConfiguration.DnsServers from devices.modules where moduleId='osconfig'"
az iot query (其他) 的
提示
返回的 IP 信息从设备的角度来看,与在设备上本地运行 ifconfig
或 ip address
的内容相匹配。 Azure 公共 IP 地址(以前用于 SSH)是在 VM 外部路由的 NAT,因此此处未显示此地址。
2.3:配置 Azure 设备运行状况服务(ADHS)遥测策略,并验证符合性
ADHS 是某些设备中包含的诊断代理。 刚刚创建的 VM 未安装 ADHS,但仍可以主动将策略设置为示例。
第一个命令将 ADHS 的孪生所需属性设置为 2
(这意味着选择加入)。 第二个命令比较所需(由你、管理员设置)和报告(由设备发送)版本的属性,以验证设备是否已收到并应用策略。
az iot hub module-twin update --hub-name "$MY_IOT_HUB_NAME" -d device01 -m osconfig --desired '{"Settings":{"__t":"c","DeviceHealthTelemetryConfiguration":2}}' > /dev/null
az iot hub query --hub-name "$MY_IOT_HUB_NAME" -q "select deviceId,properties.desired.Settings.DeviceHealthTelemetryConfiguration AS ADHSLevel_Desired,properties.reported.Settings.DeviceHealthTelemetryConfiguration.value AS ADHSLevel_Reported from devices.modules where moduleId='osconfig'"
az iot query 的
2.4:应用自定义配置(时区示例)
OSConfig 的 CommandRunner
功能使你能够获取和设置设备上的几乎所有内容。 本示例将设备的 OS 时区设置为 UTC。 在终结点上强制实施统一时区(无论其物理位置如何),是在整个分布式解决方案中改进时间戳处理的常见做法。
以下 Azure CLI 命令告知 OSConfig 使用 timedatectl
设置时区,并报告生成的时区。
az iot hub module-twin update --hub-name "$MY_IOT_HUB_NAME" -d device01 -m osconfig --desired '{"CommandRunner":{"__t":"c","CommandArguments":{"CommandId":"my_timezone_config", "Action":3, "Arguments": "timedatectl set-timezone UTC; timedatectl | grep zone | tr -d '[:space:]'"}}}' --query "properties.desired.CommandRunner"
az iot hub module-twin update 命令 的
输出显示我们在孪生体中设置了所需的命令。 若要确认它正常工作,我们将采取其他步骤。 首先,我们将等待至少 30 秒 让设备接收命令、处理命令,并使用结果更新孪生体。
自上一个命令以来, 至少等待了 30 秒
az iot hub query --hub-name "$MY_IOT_HUB_NAME" -q "select deviceId,properties.reported.CommandRunner.CommandStatus from devices.modules where moduleId='osconfig'"
az iot query (时区示例)
2.5:测试设备连接(ping 示例)
此示例使用 CommandRunner
功能以及 ping
从设备的角度测试网络连接。
az iot hub module-twin update --hub-name "$MY_IOT_HUB_NAME" -d device01 -m osconfig --desired '{"CommandRunner":{"__t":"c","CommandArguments":{"CommandId":"connectivity_test_1", "Action":3, "Arguments":"ping -c 2 example.com"}}}' --query "properties.desired.CommandRunner"
的屏幕截图
与前面的示例一样,az iot hub module-twin update
的输出显示我们在孪生体上设置了所需的命令属性,我们将使用第二步来检索结果。
自上一个命令以来,至少等待了 30 秒,请使用以下命令检索结果:
az iot hub query --hub-name "$MY_IOT_HUB_NAME" -q "select deviceId,properties.reported.CommandRunner.CommandStatus from devices.modules where moduleId='osconfig'"
az iot query (ping example) 的
2.6:使用 CommandRunner 预定义的操作重新启动或关闭
以下示例重新启动设备。 若要改为关闭,请将 Action: 1
更改为所需属性值中的 Action: 2
。
az iot hub module-twin update --hub-name "$MY_IOT_HUB_NAME" -d device01 -m osconfig --desired '{"CommandRunner":{"__t":"c","CommandArguments":{"CommandId":"my_reboot_command", "Action":1}}}' --query "properties.desired.CommandRunner"
的屏幕截图
清理资源
如果不打算保留任何资源,可以通过删除之前创建的资源组来删除它们。
az group delete --resource-group QuickstartOSConfig
后续步骤
- 本指南仅使用一台设备快速入门。 若要大规模配置设备,可以将 OSConfig 与 IoT 中心设备管理 与 OSConfig 配合使用。
- 若要了解有关 OSConfig 的详细信息,请参阅:OSConfig 文档。