亚马逊AWS官方博客
Step-by-Step 快速上手 AWS IoT OTA 固件升级
为了保证物联网设备能够保持在功能上随时更新,并且在出现问题的时候及时得到修复。小到智能手环,空气净化器,大到家用汽车,设备厂商无不是通过提供OTA(Over-The-Air)功能来提高用户满意度。而利用 AWS IoT Device Management 中的 Jobs 组件,可以帮助客户非常快速的开发出物联网设备的 OTA 功能。本文旨在帮助读者一步步的快速上手并理解 OTA 升级流程,其中会使用到 AWS IoT Core, IoT Device Management, EC2 以及 S3 的相关功能。关于在开发过程中的具体流程可以配合参考 AWS IoT Device SDK 文档。
准备工作
- 使用具有 admin 权限的用户登陆 AWS Console。
- 本文中的AWS IoT 设备会使用一台Amazon Linux EC2实例模拟,Amazon Linux EC2 实例上默认安装了AWS 命令行工具AWSCLI,接下来的所有操作都是以 AWS 北京区为示例。启动一台 Amazon Linux EC2 实例作为模拟的IoT设备,由于后面安装要安装的rpm包有依赖关系,这里要确保使用的是 Amazon Linux AMI 2018.03.0 (HVM)。另外为了保证网络畅通,在实验环节Security Group建议开放全部的IP和端口。
- 在 AWS Console 上赋予这台 EC2 实例一个具有足够权限的 Role,测试中可以直接用admin权限。
- 登陆到 EC2 实例上使用 aws configure 命令配置好默认 Region 为 cn-north-1。
操作流程
- 环境准备
- 在 AWS 上创建 IoT Thing
- 编写 AWS IoT Jobs 文档
- 运行 IoT 设备端程序
- 创建 AWS IoT Jobs 进行固件升级
- 验证固件升级是否成功
第一步 – 环境准备
- 登陆 EC2 实例,安装 git
- 安装 node.js
- 安装 AWS IoT Device SDK – Javascript
- 下载两个不同版本的 telnet 程序包,后续模拟固件升级时使用
- 安装旧版本 telnet 程序,后续我们会通过 OTA 完成这个程序从 telnet-0.17-48.el6.x86_64 版本到 telnet-0.17-64.el7.x86_64 版本的升级
- 创建一个 S3 bucket 作为新固件的存储位置,并上传新版本的 telnet 程序
第二步 – 在 AWS 上创建 IOT thing
- 创建 IoT thing,记录下输出中的 thingArn:
- 下载 AWS IoT 根证书,创建 IoT 设备证书和密钥,记录下生成的 certificateArn:
- 创建一个 IoT Policy,挂载给证书并激活证书:
第三步 – 编写 AWS IoT Jobs 文档
- 编写一个 IoT Jobs 文档。关于文档编写的格式,请参考 https://github.com/aws/aws-iot-device-sdk-js#jobsAgent。当IoT 设备请求 IoT Jobs 文档时,AWS IoT 会生成预签名 URL 并使用预签名 URL 替换占位符 URL。然后将 IoT Jobs 文档发送到设备,设备会通过这个预签名 URL 取得访问 S3 bucket 中固件的权限。
- 上传 IoT Jobs 文档到 S3 bucket
- 在创建使用预签名 Amazon S3 URL 的 Job 时,您必须提供一个 IAM 角色,该角色可授予 AWS IoT 服务从 Amazon S3 存储桶中下载文件的权限。该角色还必须向 AWS IoT 授予 assumeRole 的权限,也就是让 AWS IoT 具有代表设备去 S3 上面下载固件的权限。
第四步 – 运行 IoT 设备端程序
第五步 – 创建 AWS IoT Jobs 进行固件升级
- 新开一个命令行窗口到 EC2 实例,查看当前固件版本
- 创建 AWS IoT Jobs
第六步 – 验证固件升级是否成功
- 查看之前 IoT设备端程序输出
- 查看 IoT Job 状态
- 查看固件版本号
到此为止,通过以上几步简单的动手环节,您已成功的完成了 OTA 升级。