기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
작업 워크플로
다음은 새 작업 시작부터 작업 실행의 완료 상태 보고까지 작업 워크플로의 다양한 단계를 보여줍니다.
새 작업 시작
새 작업이 생성되면 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 Jobs 서비스는 다음 주제에 대한 메시지를 게시합니다. $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 Jobs 서비스는 해당 $aws/things/MyThing/jobs/0023/get/rejected
주제에 대한 메시지를 게시합니다.
이제 디바이스에 작업 문서가 있으므로 원격 작업을 실행하는 데 사용할 수 있습니다. 작업 문서에 미리 서명된 Amazon S3 URL이 포함되어 있으면 디바이스가 해당 URL을 사용하여 작업에 필요한 파일을 다운로드할 수 있습니다.
작업 실행 상태 보고
디바이스가 작업을 실행 중이면 UpdateJobExecution MQTT API를 호출하여 작업 실행 상태를 업데이트할 수 있습니다.
예를 들어 디바이스가 다음 메시지를 $aws/things/MyThing/jobs/0023/update
주제에 게시하여 작업 실행 상태를 IN_PROGRESS
로 업데이트할 수 있습니다.
{ "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을 호출해 앞의 두 요청을 결합할 수 있습니다. 그러면 다음 대기 중인 다음 작업 실행을 가져와서 시작하고 디바이스는 작업 실행 상태를 업데이트할 수 있게 됩니다. 또한 대기 중인 작업 실행이 있을 때는 이 요청으로 작업 문서가 반환됩니다.
작업에 TimeoutConfiga가 포함된 경우 진행 중인 타이머가 실행되기 시작합니다. UpdateJobExecution호출할 stepTimeoutInMinutes
때의 값을 설정하여 작업 실행 단계 타이머를 설정할 수도 있습니다. 단계 타이머는 업데이트하는 작업 실행에만 적용됩니다. 작업 실행을 업데이트할 때마다 이 타이머에 대해 새 값을 설정할 수 있습니다. 전화를 걸 때 스텝 타이머를 만들 수도 StartNextPendingJobExecution있습니다. 작업 실행이 단계 타이머 간격보다 오랫동안 IN_PROGRESS
상태를 유지하는 경우, 해당 작업 실행은 실패하며 터미널 상태인 TIMED_OUT
으로 전환됩니다. 단계 타이머는 작업을 생성할 때 설정한 진행 중 타이머에는 영향을 주지 않습니다.
status
필드는 IN_PROGRESS
, SUCCEEDED
또는 FAILED
로 설정할 수도 있습니다. 이미 종료 상태인 작업 실행의 상태는 업데이트할 수 없습니다.
보고서 실행 완료
디바이스가 작업 실행을 마치면 UpdateJobExecution MQTT API를 호출합니다. 작업이 성공적으로 완료된 경우에는 status
를 SUCCEEDED
로 설정하고, 메시지 페이로드의 statusDetails
에 작업에 대한 다른 정보를 이름-값 페어로 추가합니다. 진행 중 타이머와 단계 타이머는 작업 실행이 완료되면 끝납니다.
다음 예를 참조하세요.
{ "status":"SUCCEEDED", "statusDetails": { "progress":"100%" }, "expectedVersion":"2", "clientToken":"client-001" }
작업이 성공적으로 완료되지 않은 경우에는 status
를 FAILED
로 설정하고, 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 }] } }