

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# デバイスとジョブ
<a name="jobs-devices"></a>

デバイスは、MQTT、HTTP 署名バージョン 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 IoTジョブサービスからレスポンスを受信します。デバイスは、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 を呼び出して保留中のジョブの実行リストを取得します。
+ `jobId` を `$next` として [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_StartNextPendingJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_StartNextPendingJobExecution.html) API を呼び出して次の保留中のジョブ実行を取得して開始します。

## HTTP 署名バージョン 4 の使用
<a name="jobs-using-http-v4"></a>

デバイスは、ポート 443 の HTTP 署名バージョン 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` プロパティのジョブドキュメントにあります。コードファイル署名の検証の詳細については、「[Device Agent Sample](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)