Jobs - AWS IoT Core

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Jobs

AWS IoT 作业可用于定义一组远程操作,这些操作被发送到一个或多个连接到 AWS IoT 的设备并在这些设备上执行。

提示

有关作业文档示例,请参阅jobs-agent.js示例中的AWS IoT适用于 JavaScript 的开发工具包。

作业关键概念

作业

作业是被发送到一台或多台连接到 AWS IoT 的设备并在这些设备上执行的操作。例如,您可以定义一个作业,该作业指示一组设备下载并安装应用程序或固件更新、重启、轮换证书或执行远程故障排除操作。

作业文档

要创建作业,您必须先创建一个作业文档,该文档是要由设备执行的远程操作的描述。

作业文档是 UTF-8 编码的 JSON 文档,应包含您的设备执行作业所需的信息。作业文档包含一个或多个 URL,设备可从这些 URL 下载更新或一些其他数据。任务文档可存储在 Amazon S3 存储桶中,或者与用于创建任务的命令内联包含。

target

在创建作业时,您需要指定一系列目标,它们是应执行操作的设备。目标可以是事物和/或事物组。AWS IoT Jobs 会向每个目标发送一条消息以向该目标告知任务可用。

作业执行

作业执行是目标设备上的作业的实例。目标通过下载作业文档来开始执行作业。目标随后会执行在文档中指定的操作并将其进度报告给 AWS IoT。执行编号是特定目标上的作业执行的唯一标识符。Jobs 服务提供的命令可跟踪目标上作业执行的进度以及某个作业在跨所有目标执行的进度。

快照作业

默认情况下,作业将发送到您在创建该作业时指定的所有目标。在这些目标完成作业 (或报告它们无法执行此操作) 后,作业即完成。

持续作业

持续的作业将发送到您在创建该作业时指定的所有目标。它继续运行并发送到添加到目标组的任何新设备(事物)。例如,在将设备添加到组时,可使用持续作业加入或升级设备。您可以通过在创建任务时设置可选参数,来使任务成为持续任务。

推出

您可以指定向目标发送待处理作业执行通知的速度。这样,您就可以创建一个分段推出以更好地管理更新、重启和其他操作。

可将以下字段添加到 CreateJob 请求,以指定每分钟可通知的最大作业目标数。此示例设置静态推出速率。

"jobExecutionRolloutConfig": { "maximumPerMinute": "integer" }

您还可以使用 exponentialRate 字段设置可变推出速率。以下示例创建具有指数速率的推出。

"jobExecutionsRolloutConfig": { "exponentialRate": { "baseRatePerMinute": integer, "incrementFactor": integer, "rateIncreaseCriteria": { "numberOfNotifiedThings": integer, // Set one or the other "numberOfSucceededThings": integer // of these two values. }, "maximumPerMinute": integer } }

有关配置作业推出的更多信息,请参阅作业推出和中止配置

abort

您可以创建一组条件以在满足您指定的特定条件时中止推出。有关更多信息,请参阅作业推出和中止配置

预签名 URL

要使设备能够对任务文档本身包含的数据之外的其他数据进行限定时间的安全访问,您可以使用预签名 Amazon S3 URL。您可以将数据放置在 Amazon S3 存储桶中,并添加一个指向作业文档中的数据的占位符链接。当 Jobs 服务收到作业文档的请求时,它会分析作业文档以查找占位符链接并将其替换为预签名 Amazon S3 URL。

占位符链接采用以下形式:

${aws:iot:s3-presigned-url:https://s3.amazonaws.com/bucket/key}

其中 bucket 是您的存储桶名称,key 是您链接到的存储桶中的对象。

在北京和宁夏区域,仅当资源拥有者具有 ICP 许可证时,预签名 URL 才起作用。有关更多信息,请参阅 。Amazon Simple Storage Service中的入门AWS服务在中国文档中)。

超时

借助作业超时,只要当作业执行卡在 IN_PROGRESS 状态的时间超出预期,您就可以收到通知。有两种类型的计时器:进行中计时器和步骤计时器。

在创建作业时,可以为inProgressTimeoutInMinutes属性TimeoutConfig对象。进行中计时器无法更新,将应用到该作业的全部作业执行。只要作业执行保持在 IN_PROGRESS 状态的时间长度超过了此间隔,作业执行将失败,并切换为最终 TIMED_OUT 状态。AWS IoT 还将发布 MQTT 通知。

您还可以设置任务执行的步骤计时器,方法是设置stepTimeoutInMinutes当你调用UpdateJobExecution。步骤计时器仅应用于您更新的作业执行。您每次更新作业执行时,可以为此计时器设置新值。您还可在调用 StartNextPendingJobExecution 时创建步骤计时器。如果作业执行保持在 IN_PROGRESS 状态的时间长度超过了此步骤计时器间隔,它将失败,并切换为最终 TIMED_OUT 状态。步骤计时器对您在创建作业时设置的进行中计时器没有任何影响。

下图和描述说明了进行中计时器和步骤计时器的彼此交互方式。

作业创建:CreateJob 设置一个在 20 分钟后过期的进行中计时器。此计时器应用到所有作业执行且无法更新。

12:00: 任务执行启动并切换为IN_PROGRESS状态。进行中计时器开始运行。

中午 12:05:UpdateJobExecution 创建值为 7 分钟的步骤计时器。如果未创建新步骤计时器,作业执行会在中午 12:12 超时。

中午 12:10:UpdateJobExecution 创建值为 5 分钟的新步骤计时器。之前的步骤计时器都将丢弃。如果未创建新步骤计时器,作业执行会在中午 12:15 超时。

中午 12:13:UpdateJobExecution 创建值为 9 分钟的新步骤计时器。作业执行在 12:20 超时,因为进行中计时器在 12:20 超时。步骤计时器不能超过进行中计时器创建的绝对界限。

UpdateJobExecution 也可以通过创建值为 -1 的步骤计时器来丢弃已经创建的步骤计时器。