AWS IoT
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

创建并跟踪 AWS IoT 作业

借助 AWS IoT 作业,您可以部署和跟踪您设备队列中的管理任务。您可以使用作业一次向一个或多个设备发送远程操作,控制设备中的作业部署,以及跟踪每个设备当前和过去的作业执行状态。

本主题说明如何创建一个示例作业并将其部署到设备。它将指导您完成所需步骤,以创建作业并跟踪其在设备上的活动,该设备已经过配置可与 AWS IoT进行通信。编写这些说明时,假定您使用的是 Raspberry Pi,但这些说明经过改写也可用于其他基于 Linux 的设备。

以下是一些可能需要使用作业的场景:

  • 更新设备固件、软件或文件,如安全证书。

  • 执行管理任务,如重新启动设备或执行诊断。

  • 将设备还原到出厂设置或其他已知的良好状态。

将设备连接到 AWS IoT

执行以下步骤,将 Raspberry Pi 连接到 AWS IoT。

  1. 完成连接 Raspberry Pi 教程。完成后,您的 AWS 账户中会注册一个名为 MyRaspberryPi 的 AWS IoT 事物。此外,您的设备上会有完全配置的安全证书。

  2. 完成使用适用于 JavaScript 的 AWS IoT 设备开发工具包教程。完成后,您的设备连接到 AWS IoT,并且您能够运行 适用于 JavaScript 的 AWS IoT 设备开发工具包 附带的示例代码。

现在,您的设备已能够使用 AWS IoT 作业。

运行作业示例

适用于 JavaScript 的 AWS IoT 设备开发工具包 包含一个名为 jobs-example.js 的示例。此示例可以从 AWS IoT 控制台接收消息以验证连接情况。它还可以接收和处理源自 AWS IoT 作业服务的作业执行。

您可以通过以下命令运行此示例。使用 Raspberry Pi 的 REST 终端节点作为 -H 参数的值。

node examples/jobs-example.js -f ~/certs -H <PREFIX>.iot.<REGION>.amazonaws.com -T thingName

如果您已创建一个配置文件,其中包含事物名称和主机终端节点(您设备的 REST 终端节点),您就可以使用以下命令。

node examples/jobs-example.js –f ./certs –F your config file name.json

创建作业文档

作业文档是一个 JSON 文档,其中提供了您的设备执行作业需要的所有信息。适用于 JavaScript 的 AWS IoT 设备开发工具包 使用名为 operation 的属性将作业文档路由到特定的处理程序。jobs-example.js 程序针对名为 customJob 的操作提供了一个示例处理程序。要为此处理程序创建名为 example-job.json 的作业文档,此文件应包含以下 JSON 对象。

{ "operation":"customJob", "otherInfo":"someValue" }

有关更多示例作业文档,请参阅 jobs-agent.js 示例的文档。

创建作业

现在,您可以创建一个作业,使之将作业文档提供给您指定的所有设备。您可以使用 AWS IoT 控制台、AWS IoT 软件工具包或 AWS IoT CLI 来创建作业。

以下示例说明如何使用 AWS IoT CLI 创建作业。

aws iot create-job \ --job-id "example-job-01" \ --targets "arn:aws:iot:::thing/MyRaspberryPi" \ --document file:///example-job.json \ --description "My First test job" \ --target-selection SNAPSHOT

如果您将作业文档存储在 Amazon Simple Storage Service 中,可使用 –document-source 参数(而非 –document 参数)为作业文档指定 Amazon S3 URL。

如果您更喜欢使用 AWS IoT 控制台,请按照以下步骤创建作业。

  1. 将作业文档上传到 Amazon S3 存储桶。有关信息,请参阅 Amazon Simple Storage Service 控制台用户指南 中的如何将文件和文件夹上传至 S3 存储桶?

  2. 在 AWS IoT 控制台中,选择管理,然后选择作业

  3. 选择创建作业

  4. 选择作业页面上,选择创建自定义作业

  5. 创建作业页面上,输入一个唯一的作业 ID。

    注意

    我们建议您不要在作业 ID 中使用个人身份信息。

    选择要更新的设备下,选择您连接到 AWS IoT 的设备。

  6. 向下滚动到添加作业文件,然后选择您上传到 Amazon S3 的作业文档文件。在作业类型下,选择您的作业在部署到所选的设备/组后将会完成(快照)。(另一个选项您的作业将继续部署到所选组中添加的所有设备(持续),用于在向每个组添加设备时将作业部署到设备组。) 作业执行推出配置保持不变。选择创建

  7. 您的新作业将显示在作业页面上。

有关创建和部署作业的更多信息,请参阅 AWS IoT 作业

在设备上执行作业

您的作业创建后,作业服务将向您的设备发送待处理作业通知。您的设备会通过 NextJobExecutionChanged API 获取作业详细信息和作业文档。您已经运行的 jobs-example.js 示例会在设备上执行作业。作业完成后,该示例会使用 UpdateJobExecution API 发布已完成状态。在设备上运行示例时,您会看到如下输出。

node examples/jobs-example.js -f ./certs -F config.json connect startJobNotifications completed for thing: MyRaspberryPi customJob operation handler invoked, jobId: example-job-01

刷新作业页面后,您可以看到您的作业已成功完成。

利用作业事件和作业执行事件跟踪作业进度

您可以使用 Job 事件和 JobExecution 事件来跟踪您作业的进度。

这是一种非常有用的方式,可以提醒用户、系统管理员或您系统的其他成员作业已完成或作业执行已更改状态。例如,您可以提醒用户设备上的固件更新,或告知系统管理员其设备队列需要调查和解决的问题。

在本示例中,作业完成或取消后,该作业的作业事件会发布到以下主题。

$aws/events/job/example-job-01/completed $aws/events/job/example-job-01/canceled

在本示例中,当作业执行达到一种可能的最终状态时,该作业的作业执行事件会被发送到以下主题。

$aws/events/jobExecution/example-job-01/succeeded $aws/events/jobExecution/example-job-01/failed $aws/events/jobExecution/example-job-01/rejected $aws/events/jobExecution/example-job-01/canceled $aws/events/jobExecution/example-job-01/removed

作业在您的设备上成功执行后,AWS IoT 会发布 JobExecution 已成功事件。导航至 测试页面并在 MQTT 客户端订阅 AWS IoT 主题,即可查看此事件。$aws/events/jobExecution/example-job-01/succeeded

您设备的作业执行成功完成后,系统会显示以下消息。

AWS IoT 还会发布已完成的 job 事件。在 MQTT 客户端订阅 $aws/events/job/example-job-01/completed 主题,即可查看此事件。