翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ジョブの通知
AWS IoT ジョブサービスは、ジョブが保留中の場合や、リスト内の最初のジョブ実行が変更された場合、MQTT メッセージを予約済みトピックに発行します。デバイスでは、これらのトピックにサブスクライブすることによって、保留中のジョブを追跡できます。
ジョブ通知タイプ
ジョブ通知は、MQTT トピックに JSON ペイロードとして発行されます。通知は 2 種類あります。
ListNotification
ListNotification
には、15 件を超えない保留中のジョブの実行リストが含まれます。ステータスによってソートされた後 (IN_PROGRESS
ジョブ実行の前に QUEUED
ジョブ実行)、キューに入れられた時刻によってソートされます。
ListNotification
は、次のいずれかの条件が満たされると必ず発行されます。
-
新しいジョブ実行がキューに登録されたか、非ターミナルステータス (
IN_PROGRESS
またはQUEUED
) に変わった。 -
古いジョブの実行が終了ステータスに変わった (
FAILED
、SUCCEEDED
、CANCELED
、TIMED_OUT
、REJECTED
、または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"
有効なジョブの実行ステータス値は QUEUED
、IN_PROGRESS
、FAILED
、SUCCEEDED
、CANCELED
、TIMED_OUT
、REJECTED
、REMOVED
です。
以下の一連の例では、ジョブ実行が作成、および 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 }