

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

# 设备和任务
<a name="jobs-devices"></a>

设备可以使用 MQTT、HTTP 签名版本 4 或 HTTP TLS 与Amazon IoT任务通信。要确定您的设备与 Amazon IoT Jobs 通信时要使用的终端节点，请运行**DescribeEndpoint**命令。例如，如果您运行此命令：

```
aws iot describe-endpoint --endpoint-type iot:Data-ATS
```

您会获得与以下内容相似的结果：

```
{
    "endpointAddress": "a1b2c3d4e5f6g7-ats.iot.us-west-2.amazonaws.com"
}
```

## 使用 MQTT 协议
<a name="jobs-using-mqtt"></a>

设备可以使用 MQTT 协议与Amazon IoT任务通信。设备订阅 MQTT 主题是为了收到有关新任务的通知并接收来自Amazon IoT任务服务的响应。设备在 MQTT 主题上发布以查询或更新任务启动的状态。每台设备都有自己的一般 MQTT 主题。有关发布和订阅 MQTT 主题的更多信息，请参阅 [设备通信协议](protocols.md)。

通过这种通信方式，您的设备使用其设备专用证书和私钥向 Jobs 进行Amazon IoT身份验证。

您的设备可以订阅以下主题。`thing-name` 是与设备关联的事物名称。
+ 

**`$aws/things/thing-name/jobs/notify`**  
订阅此主题，以便在待处理任务启动列表中添加或删除任务启动时接收通知。
+ 

**`$aws/things/thing-name/jobs/notify-next`**  
订阅此主题，以在下一个待处理任务执行发生更改时通知您。
+ 

**`$aws/things/thing-name/jobs/request-name/accepted`**  
Amazon IoT作业服务发布有关 MQTT 主题的成功和失败消息。通过将 `accepted` 或 `rejected` 追加到用于发出请求的主题来构成该主题。这里，`request-name`是请求的名称，例如`Get`，主题可以是：`$aws/things/myThing/jobs/get`。 Amazon IoT然后，Jobs 会发布有关该`$aws/things/myThing/jobs/get/accepted`主题的成功消息。
+ 

**`$aws/things/thing-name/jobs/request-name/rejected`**  
此处，`request-name` 是请求的名称，例如 `Get`。如果请求失败，Amazon IoTJobs 将发布有关该`$aws/things/myThing/jobs/get/rejected`主题的失败消息。

您还可以使用以下 HTTPS API 操作：
+ 通过调用 [https://docs.amazonaws.cn/iot/latest/apireference/API_iot-jobs-data_UpdateJobExecution.html](https://docs.amazonaws.cn/iot/latest/apireference/API_iot-jobs-data_UpdateJobExecution.html) API 来更新任务执行的状态。
+ 通过调用 [https://docs.amazonaws.cn/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html](https://docs.amazonaws.cn/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html) API 来查询任务执行的状态。
+ 通过调用 [https://docs.amazonaws.cn/iot/latest/apireference/API_iot-jobs-data_GetPendingJobExecutions.html](https://docs.amazonaws.cn/iot/latest/apireference/API_iot-jobs-data_GetPendingJobExecutions.html) API 来检索待处理任务执行的列表。
+ 通过使用 `jobId` 作为 `$next` 调用 [https://docs.amazonaws.cn/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html](https://docs.amazonaws.cn/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html) API 来检索下一个待定任务执行。
+ 通过调用 [https://docs.amazonaws.cn/iot/latest/apireference/API_iot-jobs-data_StartNextPendingJobExecution.html](https://docs.amazonaws.cn/iot/latest/apireference/API_iot-jobs-data_StartNextPendingJobExecution.html) API 来获取和开启下一个待处理任务执行。

## 使用 HTTP Signature 版本 4
<a name="jobs-using-http-v4"></a>

设备可以在端口 443 上使用 HTTP 签名版本 4 与 Amazon IoT Job 通信。这是AmazonSDKs 和 CLI 使用的方法。有关这些工具的更多信息，请参阅[Amazon CLI命令参考： iot-jobs-data](https://docs.amazonaws.cn/cli/latest/reference/iot-jobs-data/index.html)或[AmazonSDKs 和工具](https://www.amazonaws.cn/tools/#sdk)，并参考您的首选语言 IotJobsDataPlane 部分。

通过这种通信方式，您的设备使用 IAM 凭证通过 Amazon IoT Jobs 进行身份验证。

可以使用此方法执行以下命令：
+ **DescribeJobExecution**

  `aws iot-jobs-data describe-job-execution ...` 
+ **GetPendingJobExecutions**

  `aws iot-jobs-data get-pending-job-executions ...` 
+ **StartNextPendingJobExecution**

  `aws iot-jobs-data start-next-pending-job-execution ...` 
+ **UpdateJobExecution**

  `aws iot-jobs-data update-job-execution ...` 

## 使用 HTTP TLS
<a name="jobs-using-http-tls"></a>

设备可以使用支持该协议的第三方软件客户端，在端口 8443 上使用 HTTP TLS 与 Amazon IoT Jobs 通信。

利用此方法，您的设备可使用基于 X.509 证书的身份验证（例如，其特定于设备的证书和私有密钥）。

可以使用此方法执行以下命令：
+ **DescribeJobExecution**
+ **GetPendingJobExecutions**
+ **StartNextPendingJobExecution**
+ **UpdateJobExecution**

## 对设备进行编程以使用任务
<a name="programming-devices"></a>

本部分中的示例使用 MQTT 来演示设备如何使用 Amazon IoT Jobs 服务。或者，您也可以使用相应的 API 或 CLI 命令。对于这些示例，我们假定名为 `MyThing` 的设备订阅以下 MQTT 主题：
+ `$aws/things/MyThing/jobs/notify` – 、 或 `$aws/things/MyThing/jobs/notify-next`
+ `$aws/things/MyThing/jobs/get/accepted`
+ `$aws/things/MyThing/jobs/get/rejected`
+ `$aws/things/MyThing/jobs/jobId/get/accepted`
+ `$aws/things/MyThing/jobs/jobId/get/rejected`

 如果您使用代码签名Amazon IoT，则您的设备代码必须验证代码文件的签名。该签名在任务文档中的 `codesign` 属性内。有关验证代码文件签名的更多信息，请参阅[设备代理示例](https://github.com/aws/aws-iot-device-sdk-js#jobsAgent)。

**Topics**
+ [对设备进行编程以使用任务](#programming-devices)
+ [设备工作流程](jobs-workflow-device-online.md)
+ [任务流](jobs-workflow-jobs-online.md)
+ [任务通知](jobs-comm-notifications.md)