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

作业

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

作业关键概念

作业

作业是被发送到一台或多台连接到 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 是您链接到的存储桶中的对象。

超时

注意

作业超时功能目前在 AWS GovCloud(美国)区域中不可用。

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

创建作业时,您可以为可选 TimeoutConfig 对象的 inProgressTimeoutInMinutes 属性设置值。进行中计时器无法更新,将应用到该作业的全部作业执行。只要作业执行保持在 IN_PROGRESS 状态的时间长度超过了此间隔,作业执行将失败,并切换为最终 TIMED_OUT 状态。AWS 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 的步骤计时器来丢弃已经创建的步骤计时器。

本页内容: