작업 알림 - AWS IoT Core

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

작업 알림

AWS IoT Jobs 서비스는 작업이 보류 중이거나 목록의 첫 번째 작업 실행이 변경될 때 MQTT 메시지를 예약된 주제에 게시합니다. 디바이스는 이러한 주제를 구독하여 보류 작업을 추적할 수 있습니다.

작업 알림 유형

작업 알림은 JSON 페이로드로서 MQTT 주제로 게시됩니다. 두 가지 종류의 알림이 있습니다.

ListNotification

ListNotification에는 최대 15개의 보류 중인 작업 실행의 목록이 포함되어 있습니다. 이들은 상태(QUEUED 작업 실행 전의 IN_PROGRESS 작업 실행)에 따라 정렬된 후 대기열에 있었던 시간에 따라 정렬됩니다.

ListNotification은(는) 다음 기준 중 하나가 충족될 때마다 게시됩니다.

  • 새로운 작업 실행이 대기 중이거나 비단말 상태(IN_PROGRESS 또는 QUEUED)로 변경되었습니다.

  • 기존 작업 실행이 터미널 상태(FAILED, SUCCEEDED, CANCELED, TIMED_OUT, REJECTED 또는 REMOVED)로 변경됩니다.

알림 목록(QUEUED 또는 IN_PROGRESS내에서 보류 중인 작업 실행 최대 15개)

선택적 예약 구성 및 반복 유지 관리 기간 없음

(최대 10개의 작업 실행)

선택적 예약 구성 및 반복 유지 관리 기간 있음

(최대 10개의 작업 실행)

항상 에 표시됩니다. 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입니다.

다음의 여러 가지 예들은 작업 실행이 생성되어 한 상태에서 다른 상태로 바뀔 때 각 주제로 게시되는 알림을 보여줍니다.

우선 job1이라는 작업이 하나 생성됩니다. 이 알림은 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 } ] } }

대기열에 있는 다음 작업(job1)이 변경되지 않았으므로 알림이 jobs/notify-next 주제에 게시되지 않습니다. job1이 실행되기 시작하면 그 상태가 IN_PROGRESS로 바뀝니다. 작업 목록과 대기열의 다음 작업이 변경되지 않았으므로 알림이 게시되지 않습니다.

세 번째 작업(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 } ] } }

대기열에 있는 다음 작업이 아직 job1이므로 알림이 jobs/notify-next 주제에 게시되지 않습니다.

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" } } }

job3job2보다 먼저 실행되어야 하는 경우(권장되지 않음), 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 }