使用AWS Jobs升级配置物联网设备:实战指南
Amazon Web Services (AWS) 是物联网 (IoT) 领域领先云平台之一,仅与Microsoft Azure和Google Cloud IoT匹敌。智能设备通常使用MQTT协议通过互联网连接AWS,并与丰富云服务交互。除设备通信外,AWS还提供强大数据存储、分析(含AI)、访问控制等能力,赋能端到端物联网解决方案。
数据持久化方面,AWS提供简单存储服务(S3),可扩展分层文件系统。S3中每个对象拥有唯一URL,具备适当权限时可通过浏览器公开访问。当对象包含HTML页面时,嵌入JavaScript可调用AWS API,实现交互式仪表盘和浏览器直接控制设备。
Lambda函数
Lambda让你无需预置服务器即可运行代码。可用Python、Java、C#或Node.js编写函数,存储云端,通过HTTP请求、其他Lambda调用或设备MQTT消息触发。Lambda充当中间件,将设备数据转为数据库操作,或渲染响应用户界面(见图1)。
点击查看大图
图1. AWS组件交互架构(来源:Auriga)
AWS对Lambda施加限制:每请求最大执行时间、内存使用、包大小。超限即终止执行,限制可部署时配置但不可超越AWS硬性上限。
物联网设备通常建立TCP连接到AWS IoT Core端点。TCP保证数据完整性和缓冲,确保间歇链路下消息仍能发送。AWS在TCP基础上构建自有重连逻辑,设备网络中断后自动重连。
因MQTT对命令是单向的,连接抖动很少影响Lambda调用。Lambda可发布MQTT命令给设备并立即返回;任何响应由订阅设备主题的独立Lambda处理。
AWS Jobs
AWS Jobs是设计用于在单台或多台物联网设备上调度、启动和监控长时间任务的服务。虽比许多AWS服务新,但与控制台和SDK无缝集成。
设备侧操作通过MQTT暴露。GetPendingJobExecutions、StartNextPendingJobExecution、UpdateJobExecution、DescribeJobExecution等函数让设备轮询待处理作业、确认进度、报告完成。
管理操作使用HTTPS,面向Web客户端、Lambda代码或交互使用。包括CreateJob、DeleteJob、DescribeJob、ListJobs、ListJobExecutionsForThing。
每个作业由JSON 作业文档 定义,传输给目标设备。文档通常含操作名和一个或多个指向作业参数的URL。这些URL可由AWS用户预签名,授予设备临时、有范围的访问权限以获取原本无法检索的对象。预签名URL自动过期,增强安全性。
作业文档可在定义作业时动态创建,或作为S3对象存储、创建作业时引用。
作业属性
- 目标:单台设备或设备组。若指定组,作业在所有当前成员上运行。
- 作业类型:快照作业在选定设备运行完即完成。持续作业保持活跃,自动在后加入组的设备上运行。
执行时作业遵循有限状态机。有效状态含QUEUED、IN_PROGRESS、FAILED、SUCCESS、CANCELED、REJECTED、REMOVED。设备通过UpdateJobExecution更新状态,管理员可用CancelJob等API调用变更。通常作业执行中转IN_PROGRESS,完成后转SUCCESS或FAILED。
点击查看大图
图2. AWS Jobs执行状态图(来源:Auriga)
物联网技术