ジョブワークフロー - AWS IoT Core

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

ジョブワークフロー

以下に、新しいジョブの開始からジョブ実行の完了ステータスのレポートまで、ジョブワークフローのさまざまなステップを示しています。

新しいジョブを開始する

新しいジョブが作成されると、 AWS IoT Jobs は各ターゲットデバイスの $aws/things/thing-name/jobs/notifyトピックにメッセージを発行します。

メッセージには、次に示す情報が含まれます。

{ "timestamp":1476214217017, "jobs":{ "QUEUED":[{ "jobId":"0001", "queuedAt":1476214216981, "lastUpdatedAt":1476214216981, "versionNumber" : 1 }] } }

デバイスは、ジョブの実行がキューに入れられたときに、'$aws/things/thingName/jobs/notify' トピックでこのメッセージを受け取ります。

注記

オプションの SchedulingConfig 付きのジョブの場合、そのジョブの初期状態は SCHEDULED に維持されます。ジョブが選択した startTime に達すると、次の処理が実行されます。

  • ジョブの状態は IN_PROGRESS に更新されます。

  • ジョブによって、対象グループ内のすべてのデバイスに対し、ジョブドキュメントのロールアウトを開始します。

ジョブ情報を取得する

ジョブの実行に関する詳細情報を取得するには、デバイスは includeJobDocument フィールドを true に設定して DescribeJobExecution MQTT API を呼び出します (デフォルト)。

リクエストが成功すると、 AWS IoT ジョブサービスは $aws/things/MyThing/jobs/0023/get/acceptedトピックにメッセージを発行します。

{ "clientToken" : "client-001", "timestamp" : 1489097434407, "execution" : { "approximateSecondsBeforeTimedOut": number, "jobId" : "023", "status" : "QUEUED", "queuedAt" : 1489097374841, "lastUpdatedAt" : 1489097374841, "versionNumber" : 1, "jobDocument" : { < contents of job document > } } }

リクエストが失敗すると、 AWS IoT ジョブサービスは $aws/things/MyThing/jobs/0023/get/rejectedトピックにメッセージを発行します。

デバイスにはジョブドキュメントがあるようになり、これを使用してジョブのリモートオペレーションを実行できます。ジョブドキュメントに Amazon S3 の署名付き URL が含まれている場合、デバイスはその URL を使用してジョブに必要なファイルをダウンロードできます。

ジョブの実行ステータスレポート

デバイスがジョブを実行しているときに、UpdateJobExecution MQTT API を呼び出してジョブの実行ステータスを更新できます。

たとえば、デバイスは、IN_PROGRESS トピックに次のメッセージを公開することによって、ジョブの実行ステータスを $aws/things/MyThing/jobs/0023/update に更新することができます。

{ "status":"IN_PROGRESS", "statusDetails": { "progress":"50%" }, "expectedVersion":"1", "clientToken":"client001" }

ジョブは、$aws/things/MyThing/jobs/0023/update/accepted トピックまたは $aws/things/MyThing/jobs/0023/update/rejected トピックにメッセージを公開して応答します。

{ "clientToken":"client001", "timestamp":1476289222841 }

デバイスは、StartNextPendingJobExecution を呼び出すことによって以前の 2 つのリクエストを組み合わせることができます。これは、次の保留中のジョブ実行を取得して開始し、デバイスがジョブ実行ステータスを更新できるようにします。このリクエストは、ジョブの実行が保留中の場合にもジョブドキュメントを返します。

ジョブに が含まれている場合TimeoutConfig、進捗タイマーが実行を開始します。を呼び出すstepTimeoutInMinutesときに の値を設定することで、ジョブ実行のステップタイマーを設定することもできますUpdateJobExecution。ステップタイマーは更新するジョブ実行にのみ適用されます。ジョブの実行を更新するたびに、このタイマーに新しい値を設定できます。を呼び出すときにステップタイマーを作成することもできますStartNextPendingJobExecution。ジョブの実行がステップタイマーの間隔より長い間、IN_PROGRESS ステータスのままになる場合、ジョブの実行は失敗し、終了ステータス TIMED_OUT に切り替わります。ステップタイマーは、ジョブの作成時に設定した進捗タイマーには影響を与えません。

status フィールドは、IN_PROGRESSSUCCEEDED、または FAILED に設定できます。すでにターミナル状態になっているジョブの実行ステータスは更新できません。

レポート実行の完了

ジョブの実行が終了すると、デバイスは UpdateJobExecution MQTT API を呼び出します。ジョブが正常に行われた場合は、statusSUCCEEDED に設定し、メッセージペイロードの statusDetails にジョブに関する他の情報を名前と値のペアとして追加します。ジョブの実行が完了すると、進捗タイマーとステップタイマーが終了します。

以下に例を示します。

{ "status":"SUCCEEDED", "statusDetails": { "progress":"100%" }, "expectedVersion":"2", "clientToken":"client-001" }

ジョブが失敗した場合は、statusFAILED に設定し、statusDetails に発生したエラーに関する情報を追加します。

{ "status":"FAILED", "statusDetails": { "errorCode":"101", "errorMsg":"Unable to install update" }, "expectedVersion":"2", "clientToken":"client-001" }
注記

statusDetails 属性には、任意の数の名前と値のペアを含めることができます。

AWS IoT ジョブサービスがこの更新を受け取ると、 $aws/things/MyThing/jobs/notifyトピックにメッセージを発行して、ジョブの実行が完了したことを示します。

{ "timestamp":1476290692776, "jobs":{} }

その他のジョブ

デバイスに対して保留中の他のジョブの実行がある場合、それらは $aws/things/MyThing/jobs/notify に公開されたメッセージに含まれます。

以下に例を示します。

{ "timestamp":1476290692776, "jobs":{ "QUEUED":[{ "jobId":"0002", "queuedAt":1476290646230, "lastUpdatedAt":1476290646230 }], "IN_PROGRESS":[{ "jobId":"0003", "queuedAt":1476290646230, "lastUpdatedAt":1476290646230 }] } }