在 Ubuntu 虚拟机上运行 Azure IoT Edge

适用于:IoT Edge 1.4 checkmark IoT Edge 1.4

使用 Azure IoT Edge 运行时可将设备转变为 IoT Edge 设备。 该运行时可以部署在像 Raspberry Pi 一样小的设备上,也可以部署在像工业服务器一样大的设备上。 使用 IoT Edge 运行时配置设备后,即可开始从云中部署业务逻辑。

若要了解有关 IoT Edge 运行时如何工作以及包含哪些组件的详细信息,请参阅了解 Azure IoT Edge 运行时及其体系结构

本文列出了部署一个使用预先提供的设备连接字符串安装并配置了 Azure IoT Edge 运行时的 Ubuntu 20.04 LTS 虚拟机的步骤。 部署是使用 iotedge-vm-deploy 项目存储库中维护的基于 cloud-initAzure 资源管理器模板完成的。

首次启动时,该虚拟机会通过 cloud-init 安装最新版本的 Azure IoT Edge 运行时。 在运行时启动之前,该虚拟机还会设置提供的连接字符串,使你可以轻松配置和连接 IoT Edge 设备,而无需启动 SSH 或远程桌面会话。

使用“部署到 Azure”按钮进行部署

使用“部署到 Azure”按钮可以简化 GitHub 中维护的 Azure 资源管理器模板的部署。 本部分将演示 iotedge-vm-deploy 项目存储库中包含的“部署到 Azure”按钮的用法。

  1. 我们将使用 iotedge-vm-deploy Azure 资源管理器模板部署支持 Azure IoT Edge 的 Linux VM。 若要开始,请单击下面的按钮:

    Deploy to Azure Button for iotedge-vm-deploy

  2. 在新启动的窗口中,填写可用的窗体字段:

    Screenshot showing the iotedge-vm-deploy template

    字段 说明
    订阅 要将虚拟机部署到的活动 Azure 订阅。
    资源组 用于包含该虚拟机及其相关资源的现有或新建的资源组。
    区域 要部署虚拟机的地理区域,此值默认为所选资源组的位置。
    DNS 标签前缀 必需的值,用作虚拟机主机名的前缀。
    管理员用户名 一个用户名,将为其提供对部署的 root 特权。
    设备连接字符串 在预期 IoT 中心内创建的设备的设备连接字符串
    VM 大小 要部署的虚拟机的大小
    Ubuntu OS 版本 要在基础虚拟机上安装的 Ubuntu OS 版本。
    身份验证类型 根据偏好选择“sshPublicKey”或“密码”。
    管理员密码或密钥 SSH 公钥的值或密码的值,具体取决于所选的身份验证类型。

    填写完所有字段后,单击底部的按钮移动到 Next : Review + create,可以在其中查看条款,然后单击“创建”开始部署。

  3. 验证部署是否已成功完成。 虚拟机资源应已部署到所选的资源组中。 请记下计算机名称,此名称应采用 vm-0000000000000 格式。 另外,请记下关联的“DNS 名称”,其格式应为 <dnsLabelPrefix>.<location>.cloudapp.chinacloudapi.cn。

    可以从 Azure 门户中新部署的虚拟机的“概述”部分获取“DNS 名称”。

    Screenshot showing the dns name of the iotedge vm

  4. 设置后若要通过 SSH 连接到此 VM,请在命令中使用关联的“DNS 名称”:ssh <adminUsername>@<DNS_Name>

从 Azure CLI 部署

  1. 使用以下命令来确保已安装 Azure CLI IoT 扩展:

    az extension add --name azure-iot
    
  2. 接下来,如果在桌面上使用 Azure CLI,请先登录:

    az login
    
  3. 如果你有多个订阅,请选择要使用的订阅:

    1. 列出订阅:

      az account list --output table
      
    2. 复制要使用的订阅的 SubscriptionID 字段。

    3. 使用复制的 ID 设置工作订阅:

      az account set -s <SubscriptionId>
      
  4. 创建新资源组(或者在后续步骤中指定现有的资源组):

    az group create --name IoTEdgeResources --location chinanorth2
    
  5. 创建新虚拟机:

    若要为 authenticationType 使用 password,请参阅以下示例:

    az deployment group create \
    --resource-group IoTEdgeResources \
    --template-uri "https://raw.githubusercontent.com/Azure/iotedge-vm-deploy/1.4/edgeDeploy.json" \
    --parameters dnsLabelPrefix='my-edge-vm1' \
    --parameters adminUsername='<REPLACE_WITH_USERNAME>' \
    --parameters deviceConnectionString=$(az iot hub device-identity connection-string show --device-id <REPLACE_WITH_DEVICE-NAME> --hub-name <REPLACE-WITH-HUB-NAME> -o tsv) \
    --parameters authenticationType='password' \
    --parameters adminPasswordOrKey="<REPLACE_WITH_SECRET_PASSWORD>"
    

    若要使用 SSH 密钥进行身份验证,可为 authenticationType 指定 sshPublicKey,然后在 adminPasswordOrKey 参数中提供 SSH 密钥的值。 下面显示了一个示例。

    #Generate the SSH Key
    ssh-keygen -m PEM -t rsa -b 4096 -q -f ~/.ssh/iotedge-vm-key -N ""
    
    #Create a VM using the iotedge-vm-deploy script
    az deployment group create \
    --resource-group IoTEdgeResources \
    --template-uri "https://raw.githubusercontent.com/Azure/iotedge-vm-deploy/1.4/edgeDeploy.json" \
    --parameters dnsLabelPrefix='my-edge-vm1' \
    --parameters adminUsername='<REPLACE_WITH_USERNAME>' \
    --parameters deviceConnectionString=$(az iot hub device-identity connection-string show --device-id <REPLACE_WITH_DEVICE-NAME> --hub-name <REPLACE-WITH-HUB-NAME> -o tsv) \
    --parameters authenticationType='sshPublicKey' \
    --parameters adminPasswordOrKey="$(< ~/.ssh/iotedge-vm-key.pub)"
    
  6. 验证部署是否已成功完成。 虚拟机资源应已部署到所选的资源组中。 请记下计算机名称,此名称应采用 vm-0000000000000 格式。 另外,请记下关联的“DNS 名称”,其格式应为 <dnsLabelPrefix>.<location>.cloudapp.chinacloudapi.cn。

    可以从上一步骤的 JSON 格式输出中获取“DNS 名称”,它作为“公共 SSH”条目的一部分显示在 outputs 节中。 使用此条目的值可以通过 SSH 连接到新部署的计算机。

    "outputs": {
      "public SSH": {
        "type": "String",
        "value": "ssh <adminUsername>@<DNS_Name>"
      }
    }
    

    也可以从 Azure 门户中新部署的虚拟机的“概述”部分获取“DNS 名称”。

    Screenshot showing the dns name of the iotedge vm

  7. 设置后若要通过 SSH 连接到此 VM,请在命令中使用关联的“DNS 名称”:ssh <adminUsername>@<DNS_Name>

后续步骤

预配了安装运行时的 IoT Edge 设备后,现在可以部署 IoT Edge 模块

如果无法正确安装 IoT Edge 运行时,请参阅故障排除页。

若要将现有安装更新到最新版本的 IoT Edge,请参阅更新 IoT Edge 安全守护程序和运行时

若要通过 SSH 或其他入站连接打开端口以访问 VM,请参阅有关打开 Linux VM 的端口和终结点的 Azure 虚拟机文档