ジョブの通知 - AWS IoT Core

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

ジョブの通知

AWS IoT ジョブサービスは、ジョブが保留中の場合や、リスト内の最初のジョブ実行が変更された場合に、MQTT メッセージを予約済みトピックに発行します。デバイスでは、これらのトピックにサブスクライブすることによって、保留中のジョブを追跡できます。

ジョブ通知タイプ

ジョブ通知は、MQTT トピックに JSON ペイロードとして発行されます。通知は 2 種類あります。

ListNotification

ListNotification には、15 件を超えない保留中のジョブの実行リストが含まれます。ステータスによってソートされた後 (IN_PROGRESS ジョブ実行の前に QUEUED ジョブ実行)、キューに入れられた時刻によってソートされます。

ListNotification は、次のいずれかの条件が満たされると必ず発行されます。

  • 新しいジョブ実行がキューに登録されたか、非ターミナルステータス (IN_PROGRESS または QUEUED) に変わった。

  • 古いジョブの実行が終了ステータスに変わった (FAILEDSUCCEEDEDCANCELEDTIMED_OUTREJECTED、または REMOVED)。

リスト通知 (QUEUED または IN_PROGRESS での保留中のジョブの実行が最大 15 件)

オプションのスケジュール設定と定期的なメンテナンスウィンドウがない場合

(最大 10 件のジョブの実行)

オプションのスケジュール設定と定期的なメンテナンスウィンドウがある場合

(最大 5 件のジョブの実行)

には常に が表示されます ListNotification。

メンテナンスウィンドウ ListNotification 中にのみ に表示されます

NextNotification

  • NextNotification には、キュー内の次のジョブ実行に関する概要が含まれています。

    NextNotification は、リスト内の最初のジョブ実行が変更されると必ず発行されます。

    • 新しいジョブ実行は QUEUED としてリストに追加され、リスト内の最初の項目になります。

    • リスト内の最初の項目でない既存のジョブ実行のステータスは、QUEUED から IN_PROGRESS に変わり、リストにある最初の項目になります。(これは、リスト内に他の IN_PROGRESS ジョブ実行がない場合や、ステータスが QUEUED から IN_PROGRESS に変わったジョブ実行がリスト内の他の IN_PROGRESS ジョブ実行より早くキューに登録された場合に発生します)。

    • リスト内の最小にあるジョブ実行のステータスがターミナルステータスに変更され、リストから削除されます。

MQTT トピックのパブリッシュとサブスクライブの詳細については、「デバイス通信プロトコル」を参照してください。

注記

ジョブとの通信に HTTP 署名バージョン 4 あるいは HTTP TLS を使用する場合、通知は利用できません。

ジョブの保留

AWS IoT ジョブサービスは、モノの保留中のジョブ実行のリストにジョブが追加されたり削除されたりするか、リスト内の最初のジョブ実行が変更されたりすると、MQTT トピックにメッセージを発行します。

  • $aws/things/thingName/jobs/notify

  • $aws/things/thingName/jobs/notify-next

メッセージには、次のペイロード例が含まれています。

$aws/things/thingName/jobs/notify:

{ "timestamp" : 10011, "jobs" : { "IN_PROGRESS" : [ { "jobId" : "other-job", "queuedAt" : 10003, "lastUpdatedAt" : 10009, "executionNumber" : 1, "versionNumber" : 1 } ], "QUEUED" : [ { "jobId" : "this-job", "queuedAt" : 10011, "lastUpdatedAt" : 10011, "executionNumber" : 1, "versionNumber" : 0 } ] } }

this-job というジョブの実行が、オプションのスケジュール設定が選択されているジョブから開始され、ジョブドキュメントのロールアウトがメンテナンスウィンドウ中に実行されるようにスケジュールされている場合、そのジョブは定期的なメンテナンスウィンドウ中にのみ表示されます。メンテナンスウィンドウ以外では、this-job というジョブは、次の例に示すように、保留中のジョブの実行リストから除外されます。

{ "timestamp" : 10011, "jobs" : { "IN_PROGRESS" : [ { "jobId" : "other-job", "queuedAt" : 10003, "lastUpdatedAt" : 10009, "executionNumber" : 1, "versionNumber" : 1 } ], "QUEUED" : [] } }

$aws/things/thingName/jobs/notify-next:

{ "timestamp" : 10011, "execution" : { "jobId" : "other-job", "status" : "IN_PROGRESS", "queuedAt" : 10009, "lastUpdatedAt" : 10009, "versionNumber" : 1, "executionNumber" : 1, "jobDocument" : {"c":"d"} } }

other-job というジョブの実行が、オプションのスケジュール設定が選択されているジョブから開始され、ジョブドキュメントのロールアウトがメンテナンスウィンドウ中に実行されるようにスケジュールされている場合、そのジョブは定期的なメンテナンスウィンドウ中にのみ表示されます。メンテナンスウィンドウ以外では、other-job というジョブは、次の例に示すように、次のジョブの実行として表示されません。

{} //No other pending jobs
{ "timestamp" : 10011, "execution" : { "jobId" : "this-job", "queuedAt" : 10011, "lastUpdatedAt" : 10011, "executionNumber" : 1, "versionNumber" : 0, "jobDocument" : {"a":"b"} } } // "this-job" is pending next to "other-job"

有効なジョブの実行ステータス値は QUEUEDIN_PROGRESSFAILEDSUCCEEDEDCANCELEDTIMED_OUTREJECTEDREMOVED です。

以下の一連の例では、ジョブ実行が作成、および 1 つの状態から別の状態に変更される各トピックに発行される通知を示しています。

まず、job1 という名の 1 つのジョブが作成されます。この通知は、jobs/notify トピックに発行されます。

{ "timestamp": 1517016948, "jobs": { "QUEUED": [ { "jobId": "job1", "queuedAt": 1517016947, "lastUpdatedAt": 1517016947, "executionNumber": 1, "versionNumber": 1 } ] } }

この通知は、jobs/notify-next トピックに発行されます。

{ "timestamp": 1517016948, "execution": { "jobId": "job1", "status": "QUEUED", "queuedAt": 1517016947, "lastUpdatedAt": 1517016947, "versionNumber": 1, "executionNumber": 1, "jobDocument": { "operation": "test" } } }

別のジョブが作成されると (job2)、この通知が jobs/notify トピックに発行されます。

{ "timestamp": 1517017192, "jobs": { "QUEUED": [ { "jobId": "job1", "queuedAt": 1517016947, "lastUpdatedAt": 1517016947, "executionNumber": 1, "versionNumber": 1 }, { "jobId": "job2", "queuedAt": 1517017191, "lastUpdatedAt": 1517017191, "executionNumber": 1, "versionNumber": 1 } ] } }

キューの次のジョブ (jobs/notify-next) が変更されていないため、通知は job1 トピックに発行されません。job1 が実行を開始した場合、そのステータスは IN_PROGRESS に変わります。ジョブのリストおよびキューの次のジョブが変更されないため、通知は発行されません。

3 番目のジョブが追加されると (job3)、この通知が jobs/notify トピックに発行されます。

{ "timestamp": 1517017906, "jobs": { "IN_PROGRESS": [ { "jobId": "job1", "queuedAt": 1517016947, "lastUpdatedAt": 1517017472, "startedAt": 1517017472, "executionNumber": 1, "versionNumber": 2 } ], "QUEUED": [ { "jobId": "job2", "queuedAt": 1517017191, "lastUpdatedAt": 1517017191, "executionNumber": 1, "versionNumber": 1 }, { "jobId": "job3", "queuedAt": 1517017905, "lastUpdatedAt": 1517017905, "executionNumber": 1, "versionNumber": 1 } ] } }

キューの次のジョブがまだ jobs/notify-next であるため、通知は job1 トピックに発行されません。

job1 が完了すると、そのステータスは SUCCEEDED に変わり、この通知は jobs/notify トピックに発行されます。

{ "timestamp": 1517186269, "jobs": { "QUEUED": [ { "jobId": "job2", "queuedAt": 1517017191, "lastUpdatedAt": 1517017191, "executionNumber": 1, "versionNumber": 1 }, { "jobId": "job3", "queuedAt": 1517017905, "lastUpdatedAt": 1517017905, "executionNumber": 1, "versionNumber": 1 } ] } }

この時点で、job1 はキューから削除され、実行する次のジョブが job2 になります。この通知は、jobs/notify-next トピックに発行されます。

{ "timestamp": 1517186269, "execution": { "jobId": "job2", "status": "QUEUED", "queuedAt": 1517017191, "lastUpdatedAt": 1517017191, "versionNumber": 1, "executionNumber": 1, "jobDocument": { "operation": "test" } } }

job3 よりも前に job2 の実行を開始する必要がある場合 (非推奨)、job3 のステータスを IN_PROGRESS に変更できます。この場合、job2 はキューの次のジョブではなくなり、この通知が jobs/notify-next トピックに発行されます。

{ "timestamp": 1517186779, "execution": { "jobId": "job3", "status": "IN_PROGRESS", "queuedAt": 1517017905, "startedAt": 1517186779, "lastUpdatedAt": 1517186779, "versionNumber": 2, "executionNumber": 1, "jobDocument": { "operation": "test" } } }

追加あるいは削除されたジョブがないため、jobs/notify トピックに発行される通知はありません。

デバイスが job2 を拒否し、そのステータスを REJECTED に変更した場合、この通知は jobs/notify トピックに発行されます。

{ "timestamp": 1517189392, "jobs": { "IN_PROGRESS": [ { "jobId": "job3", "queuedAt": 1517017905, "lastUpdatedAt": 1517186779, "startedAt": 1517186779, "executionNumber": 1, "versionNumber": 2 } ] } }

job3 (まだ進行中) が強制的に削除される場合、この通知は jobs/notify トピックに発行されます。

{ "timestamp": 1517189551, "jobs": {} }

この時点で、キューは空です。この通知は、jobs/notify-next トピックに発行されます。

{ "timestamp": 1517189551 }