Skip to main content

再次讨论Azure IoT Edge模块开发的环境准备

分类:  Azure物联网 标签:  #Azure #IoT Edge # 发布于: 2023-06-14 22:00:15

我们之前已经有了一篇文章来讨论如何准备开发环境,你可以从这个地址查看这篇文章:https://www.azuredeveloper.cn/article/how-to-setup-a-enviroment-for-azure-iot-edge-module-develop, 我们本章还是想再次总结一下如何为开发Azure IoT Edge模块准备开发环境的主要特点。

我们先总结一下最佳实践:

  • 准备一台用于开发的机器,我们称之为开发机,开发机最好和用于测试的Azure IoT Edge是两台机器,如果确实没有多余的机器,也可以使用虚拟机替代Azure IoT Edge的设备。
  • 开发机和用于测试的Azure IoT Edge关于容器要一致,例如开发机器是基于Linux 容器的,那么测试机器也应该是基于Linux容器的。另外需要注意的是Azure IoT Edge Runtime 1.2仅仅支持基于Linux的容器。
  • 设置项目的容器镜像使用远程的服务,包括docker hub或者是微软的Azure Containter register
  • 使用vs code开发调试时不一定非要使用插件remote-continaer, 也可以直接使用本机。
  • 如果需要在本机调试需要有python的安装,同时要安装包:pip install --upgrade iotedgehubdev, 主要用于模拟edgeHub模块处理消息的收发。

对于开发项目的整个准备checklist如下:

  1. 首先你需要一个Azure账号,该账号用于创建Azure IoT Hub的资源。
  2. 创建一个Azure IoT Hub的资源,并在该资源里创建一个Azure IoT Edge设备。
  3. 创建一个虚拟机,该虚拟机安装Azure IoT Edge Runtime, 并使用SAS Key配置该Azure IoT Edge设备,使得该设备可以连接上Azure IoT Hub
  4. 创建一个Docker Hub账号或者是Azure Container register实例,我们创建的Azure IoT Edge模块会被发布到这里。
  5. VS code需要安装插件Azure IoT ToolAzureDocker, 相关语言的插件,例如.Net的插件等。
  6. 需要在开发机器上安装一个容器,例如Docker Desktop,开发之前需要启动Docker
  7. VS code安装好插件之后,需要使用Azure IoT Hub插件选择您的默认Azure IoT Hub以及你注册的Azure IoT Edge设备。
  8. 创建新项目之后需要设置默认的Azure IoT Edge Runtime版本。
  9. 创建新项目之后需要设置默认的Azure IoT Edge Runtime运行的平台,例如是amd64还是arm64, 需要注意arm64目前还是在public preview阶段。
  10. 创建新项目之后需要设置默认的容器远程服务的认证,通过在文件.env中配置相应的变量:CONTAINER_REGISTRY_USERNAME_<服务名>以及CONTAINER_REGISTRY_PASSWORD_<服务名>

上述最佳实践和checklist完成之后,我们还需要熟悉一下由Azure IoT Edge插件创建的项目模板:

项目模板

使用Azure IoT Edge插件创建一个新的Azure IoT Edge项目之后,我们会有如下的目录结构,我们一一来讲解一下目录结构以及各文件的用途:


目录结构说明:

  1. .devcontainer: 如果需要在VS Code上使用插件remote-containerDocker容器里直接开发,那么插件就会使用这个目录用于构建一个remote-container的开发环境,您可以通过VS Code命令:Ctrl + Shift + P, 然后:Remote-containers:Open Folder in Containers 从docker里打开项目。
  2. .vsdoe: 用于vs code定义环境或者调试环境。
  3. modules: 我们定义的Azure IoT Edge模块代码全部组织在这个目录里,每一个模块一个目录,依据使用的语言不同,大家可以根据自己熟悉的语言来定制自己的项目代码,总体来说,是一个控制台应用。在这个文件夹上单机右键,可以选择添加新的模块。
  4. .env: 用于定义访问远端的容器镜像服务器的定义,这里定义的变量会用于上传镜像到指定的位置。
  5. deployment.template.jsondeployment.debug.template.json主要用于部署,其文件内容和我们之前学习的Azure IoT Edge自动部署大同小异。在这个文件上单击右键可以添加新的模块。