在之前的使用 AWS IoT Device Management 进行在线升级的博文中,我们向您展示了如何创建简单的 AWS IoT 快照作业和跟踪其进度。在此博文中,我们将逐步向您展示如何配置和创建 AWS IoT 连续作业。连续作业是一个长时间运行的作业,它通过自动部署作业执行来响应部署目标的更改。例如,一个连续作业可以被部署为 100 个设备的初始组。当新设备被添加到部署组时,他们将自动收到有关连续作业的通知。
对设备进行恢复出厂设置重置时(假设此时为 v1 版本),v1 后将设备软件自动更新到最新版本时。
固件版本较旧的设备在仓库中存放几个月后被打开时。连续作业可以将设备固件更新到最新版本时。
可重新使用设备时。连续作业可以删除设备上所有待处理作业执行时。
在接下来的几个章节,我们将创建连续作业 continuous-job-V1-to-V2 用于将设备的固件版本从 V1 更新到 V2。固件版本为 V1 的设备按事物组 FirmwareV1Group 分组,固件版本为 V2 的设备按事物组 FirmwareV2Group 分组。当设备成功更新到固件 V2 时,预配置的 Lambda 函数会将此设备从 FirmwareV1Group 中自动移除,并添加到 FirmwareV2Group 中。当连续作业 continuous-job-V1-to-V2 运行时,已添加到 FirmwareV1Group 中的新设备也将自动获得 V2 固件更新作业。 步骤包括
创建固件部署组
添加事物到初始部署组中
配置并测试 Lambda 函数,以在部署组之间移动设备
创建连续作业,以将固件从 V1 更新到 V2
配置部署组
首先,我们将创建三个事物组,每个组都具有不同的固件版本(V1、V2、V3)。
在此示例中,使用事物名称 MyRaspberryPi 注册设备。添加 MyRaspberryPi 到事物组 FirmwareV1Group 中。
在设备启动的实际场景中,我们建议您运行启动程序来使您的设备上线及初始化其设置。在启动程序中,您可以将设备添加到相应的部署组中。此外,恢复设备出厂设置的程序还应包括将设备添加到相应部署组的步骤。
配置 Lambda 函数
我们将编写 Lambda 函数,当设备从固件版本 V1 成功更新到 V2 时,会触发此函数。此 Lambda 函数将执行以下程序:
将事物从事物组 FirmwareV1Group 中移除。
将事物添加到事物组 FirmwareV2Group 中。
首先,导航至 IAM 控制台,以使用以下策略创建角色 LambdaRoleForV1ToV2FirmwareUpdate。将 AWS_REGION 替换为您的 AWS 区域,并将 <AWS_ACCOUNT_ID> 替换为您的 AWS 账户 ID。
导航至 AWS Lambda 控制台。在创建函数页面上,选择蓝图。在蓝图下,选择 hello-world,然后选择配置。
在基本信息下,输入此 Lambda 函数的名称。对于角色,选择您在上一步中创建的角色 (LambdaRoleForV1ToV2FirmwareUpdate),然后选择创建函数。
在下一页中,使用以下代码片段更新函数代码,然后选择保存。
要配置此 Lambda 函数的触发器,在设计器下, 选择 AWS IoT。在配置触发器部分中,我们将创建自定义 IoT 规则,以使用作业 ID continuous-job-V1-to-V2 筛选连续作业的已成功作业执行事件。要详细了解作业事件,请参阅 AWS IoT 开发人员指南中的作业事件文档。创建名为“SucceededJobExecutionsForV1toV2Update”的新规则,并为规则查询语句输入以下 SQL 语句:
在您配置触发器后,单击添加,然后单击保存。
测试 Lambda 函数
要测试 Lambda 函数,在 AWS Lambda 控制台中配置测试事件。从选择测试事件中,选择配置测试事件。
将测试事件命名为 SucceededJobExecution,并将测试事件有效负载替换为以下作业执行事件有效负载。将 AWS_REGION 替换为您的 AWS 区域,并将 <AWS_ACCOUNT_ID> 替换为您的 AWS 账户 ID。选择创建以保存更改。
在您创建测试事件后,系统会将您定向回 AWS Lambda 控制台。选择 SucceededJobExecution 测试事件,然后选择测试。您应该会看到事物 MyRaspberryPi 从 FirmwareV1Group 中移除并在 AWS IoT 控制台中被添加到 FirmwareV2Group 中。有关创建 Lambda 函数及如何使用 CloudWatch 监控和调试 Lambda 函数的信息,请参阅 AWS Lambda 开发人员指南中的创建简单的 Lambda 函数。
创建连续作业以更新固件
现在,在事物组 FirmwareV1Group 中创建连续作业 continuous-job-V1-to-V2。
当作业 continuous-job-V1-to-V2 在进行中时,系统将向 FirmwareV1Group 事物组中所包含的所有目标设备通知该作业。每个设备都将执行该作业并报告其作业执行状态。对于每个成功的作业执行,作业服务将发送作业执行事件。作业执行事件将触发 Lambda 函数,以从 FirmwareV1Group 中移除设备,然后将设备添加到 FirmwareV2Group 中。
配置连续部署
我们已逐步介绍如何在部署组 FirmwareV1Group 上创建连续作业,以将设备上的固件版本从 V1 更新到 V2。我们已展示了如何从 FirmwareV1Group 中删除设备并在设备成功执行作业后将其添加到 FirmwareV2Group 中。那么,如何将 V2 设备更新到 V3?
要使设备固件保持最新版本,您可以在 FirmwareV2Group 部署组上创建另一个连续作业 continuous-job-V2-to-V3,并配置一个类似的 Lambda 函数以从 FirmwareV2Group 中移除设备并将其添加到 FirmwareV3Group 中。
连续作业不一定是增量的。无论您的更新模式是增量更新还是直接更新到特定版本,都很容易创建一个连续作业来使您的设备进入所需的状态。例如,假设您有 10 个可用的不同固件版本:V1 — V10。由于一些版本之间的兼容性问题,V1、V2 和 V3 只能直接更新到 V7,而不是 V10。所有其他版本都可以直接更新到 V10。使用连续作业,您可以为 V1、V2 和 V3 部署组轻松设置一个作业并将设备更新到 V7。您可以为 V4 — V9 部署组设置另一个作业并将设备更新到 V10。等到更新的版本 V11 发布时,您可以在 V10 部署组上轻松创建第三个连续作业,并将设备更新到 V11。
小结
有关作业的更多信息,请参阅 AWS IoT 开发人员指南中的作业和用 AWS IoT Device Management 进行在线升级博文。
请在评论中留下您的反馈。如果您对此解决方案的实施有任何疑问或问题,请在 AWS IoT 论坛中开一个新话题。
作者介绍:
Amanda Le
本文转载自 AWS 技术博客。
原文链接:
https://amazonaws-china.com/cn/blogs/china/using-continuous-jobs-with-aws-iot-device-management/
评论