我在AWS IoT项目中有一个要求,其中需要更新AWS IoT连接的设备的应用程序代码或应用程序代码的某些部分,例如应用程序版本或应用程序时间表更新等。
我应该如何实现呢?到目前为止,我发现云前端或代码部署很有用,但并未直接用于此类目的。还有其他服务可以帮助我实现AWS所需的解决方案吗?
谢谢。
最佳答案
在所有设备上进行固件升级
合理的模式是使用AWS IoT中的Device Shadow以报告状态存储设备的当前固件信息。
{
"reported": {
"firmware": {
"version": "1.0.0",
"name": "linux-3.8.0-armeabi"
}
}
}
当您要在设备上触发固件升级时,可以引用新版本以及指向该新版本的指针(例如,指向S3存储桶)。
{
"reported": {
"firmware": {
"version": "1.0.0",
"name": "linux-3.8.0-armeabi"
}
},
"desired": {
"firmware": {
"version": "1.1.0",
"name": "linux-4.0.0-armeabi",
"url": "https://s3-<region>.amazonaws.com/<bucket>/<file>"
}
}
}
当发生此更改时,设备将收到一个增量事件,指示其影子文档中的更改,并且一旦他注意到以所需状态描述了新固件条目,它将开始下载新固件。
注意:此方法的一个优点是,即使设备处于脱机状态,该方法也将起作用,当它们重新联机时,它们将与影子同步。
选择性固件升级
有时,制造商希望控制在其设备机群中部署固件的方式,例如,他们可能希望:
为全球不同地区部署不同的固件。
为硬件稍有不同的设备部署不同的固件。
为已出售给不同制造商(B2B2C)的设备部署不同的固件。
跨不同区域逐步部署固件,而不是同时部署。
如果要细化部署,要考虑到这些矛盾,可以将上述方法与设备注册表中的Things Attributes结合使用,以便在更新所需状态时执行因此,只需选择与预定义属性匹配的设备即可。