Jobs - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

Jobs

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

提示

有关任务文档示例,请参阅适用于 JavaScript 的 Amazon IoT 软件开发工具包中的 jobs-agent.js 示例。

任务关键概念

任务

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

任务文档

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

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

target

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

任务执行

任务执行是目标设备上的任务的实例。目标通过下载任务文档来开始执行任务。目标随后会执行在文档中指定的操作并将其进度报告给 Amazon 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服务入门文档中的 Amazon Simple Storage Service

超时

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

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

您还可以在调用 UpdateJobExecution 时为 stepTimeoutInMinutes 设置一个值,从而为任务执行设置步骤计时器。步骤计时器仅应用于您更新的任务执行。您每次更新任务执行时,可以为此计时器设置新值。您还可在调用 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 的步骤计时器来丢弃已经创建的步骤计时器。