작업 워크플로 - 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 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를 호출합니다. 작업이 성공적으로 완료된 경우에는 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 }] } }