

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 裝置和任務
<a name="jobs-devices"></a>

裝置可以使用 MQTT、HTTP Signature 第 4 版或 HTTP TLS 與AWS IoT任務通訊。若要判斷裝置與 AWS IoT任務通訊時要使用的端點，請執行 **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 通訊協定與AWS IoT任務通訊。裝置訂閱 MQTT 主題以接收新任務的通知，以及接收來自 AWS IoTJobs 服務的回應。裝置發佈於 MQTT 主題來查詢或更新任務啟動的狀態。每項裝置皆有其一般性 MQTT 主題。如需發佈與訂閱 MQTT 主題的詳細資訊，請參閱 [裝置通訊協定](protocols.md)。

透過此通訊方法，您的裝置會使用其裝置特定的憑證和私有金鑰來驗證 AWS IoT任務。

裝置可以訂閱下列主題。`thing-name` 是與裝置關聯的事物名稱。
+ 

**`$aws/things/{{thing-name}}/jobs/notify`**  
訂閱此主題，即可在待定任務啟動清單中新增或移除任務啟動時通知您。
+ 

**`$aws/things/{{thing-name}}/jobs/notify-next`**  
訂閱此主題，即可在下一個待處理任務執行項目發生變更時接收通知。
+ 

**`$aws/things/{{thing-name}}/jobs/{{request-name}}/accepted`**  
AWS IoTJobs 服務會在 MQTT 主題上發佈成功和失敗訊息。主題是透過將 `accepted` 或 `rejected` 附加到用於發出請求的主題來形成。在這裡， `request-name` 是請求的名稱，例如 `Get`，而主題可以是：`$aws/things/myThing/jobs/get`.AWS IoTJobs 接著會發佈`$aws/things/myThing/jobs/get/accepted`主題的成功訊息。
+ 

**`$aws/things/{{thing-name}}/jobs/{{request-name}}/rejected`**  
在此例中，`request-name` 是請求的名稱，例如 `Get`。如果請求失敗，AWS IoTJobs 會在`$aws/things/myThing/jobs/get/rejected`主題上發佈失敗訊息。

您也可以使用下列 HTTPS API 操作：
+ 藉由呼叫 [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_UpdateJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_UpdateJobExecution.html) API 來更新任務執行的狀態。
+ 藉由呼叫 [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html) API 來查詢任務執行的狀態。
+ 藉由呼叫 [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_GetPendingJobExecutions.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_GetPendingJobExecutions.html) API 來擷取待定任務執行的清單。
+ 呼叫 [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html) API (其中 `jobId` 作為 `$next`) 來擷取下一個待定任務執行。
+ 藉由呼叫 [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_StartNextPendingJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_StartNextPendingJobExecution.html) API 來取得並開始下一個待定任務執行。

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

裝置可以在連接埠 443 上使用 HTTP Signature 第 4 版與AWS IoT任務通訊。此為 AWS SDK 與 CLI 使用的方法。如需這些工具的詳細資訊，請參閱 [AWS CLI 命令參考：iot-jobs-data](https://docs.aws.amazon.com/cli/latest/reference/iot-jobs-data/index.html) 或 [AWS SDK 與工具](https://aws.amazon.com/tools/#sdk)，並參閱您慣用語言的 IotJobsDataPlane 章節。

透過此通訊方法，您的裝置會使用 IAM 登入資料向 AWS IoT任務進行驗證。

使用此方法可運用下列命令：
+ **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 與AWS IoT任務通訊。

若使用此方法，您的裝置會使用 X.509 憑證型身分驗證 (例如，其裝置專屬的憑證與私有金鑰)。

使用此方法可運用下列命令：
+ **DescribeJobExecution**
+ **GetPendingJobExecutions**
+ **StartNextPendingJobExecution**
+ **UpdateJobExecution**

## 設定裝置與任務合作
<a name="programming-devices"></a>

本節中的範例使用 MQTT 說明裝置與 AWS IoT 任務服務之間如何運作。或者，您可以使用對應的 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`

 如果您使用 的程式碼簽署AWS 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)