

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

# 작업 워크플로
<a name="jobs-workflow-jobs-online"></a>

다음은 새 작업 시작부터 작업 실행의 완료 상태 보고까지 작업 워크플로의 다양한 단계를 보여줍니다.

## 새 작업 시작
<a name="jobs-respond-new-job"></a>

새 작업이 생성되면AWS IoTJobs는 각 대상 디바이스의 `$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`로 업데이트됩니다.
작업이 대상 그룹의 모든 디바이스에 대한 작업 문서 롤아웃을 시작합니다.

## 작업 정보 가져오기
<a name="jobs-respond-get-job"></a>

작업 실행에 대해 더 많은 정보를 가져오려면 디바이스에서 `includeJobDocument` 필드를 `true`(기본값)로 설정하여 [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) MQTT API를 호출합니다.

요청이 성공하면 AWS IoT작업 서비스가 `$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작업 서비스가 `$aws/things/MyThing/jobs/0023/get/rejected` 주제에 메시지를 게시합니다.

이제 디바이스에 작업 문서가 있으므로 원격 작업을 실행하는 데 사용할 수 있습니다. 작업 문서에 미리 서명된 Amazon S3 URL이 포함되어 있으면 디바이스가 해당 URL을 사용하여 작업에 필요한 파일을 다운로드할 수 있습니다.

## 작업 실행 상태 보고
<a name="jobs-job-processing"></a>

디바이스가 작업을 실행 중이면 [UpdateJobExecution](jobs-mqtt-api.md#mqtt-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](jobs-mqtt-api.md#mqtt-startnextpendingjobexecution)을 호출해 앞의 두 요청을 결합할 수 있습니다. 그러면 다음 대기 중인 다음 작업 실행을 가져와서 시작하고 디바이스는 작업 실행 상태를 업데이트할 수 있게 됩니다. 또한 대기 중인 작업 실행이 있을 때는 이 요청으로 작업 문서가 반환됩니다.

작업에 [TimeoutConfig](https://docs.aws.amazon.com//iot/latest/apireference/API_TimeoutConfig.html)가 포함된 경우 진행 중 타이머가 실행을 시작합니다. [UpdateJobExecution](https://docs.aws.amazon.com//iot/latest/apireference/API_iot-jobs-data_UpdateJobExecution.html)을 호출할 때 `stepTimeoutInMinutes` 값을 설정하여 작업 실행을 위한 단계 타이머를 설정할 수도 있습니다. 단계 타이머는 업데이트하는 작업 실행에만 적용됩니다. 작업 실행을 업데이트할 때마다 이 타이머에 대해 새 값을 설정할 수 있습니다. [StartNextPendingJobExecution](https://docs.aws.amazon.com//iot/latest/apireference/API_iot-jobs-data_StartNextPendingJobExecution.html)를 호출하는 경우에도 단계 타이머를 생성할 수 있습니다. 작업 실행이 단계 타이머 간격보다 오랫동안 `IN_PROGRESS` 상태를 유지하는 경우, 해당 작업 실행은 실패하며 터미널 상태인 `TIMED_OUT`으로 전환됩니다. 단계 타이머는 작업을 생성할 때 설정한 진행 중 타이머에는 영향을 주지 않습니다.

`status` 필드는 `IN_PROGRESS`, `SUCCEEDED` 또는 `FAILED`로 설정할 수도 있습니다. 이미 종료 상태인 작업 실행의 상태는 업데이트할 수 없습니다.

## 보고서 실행 완료
<a name="jobs-job-completed"></a>

디바이스가 작업 실행을 마치면 [UpdateJobExecution](jobs-mqtt-api.md#mqtt-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":{}
}
```

## 추가 작업
<a name="jobs-additional-job"></a>

디바이스에 대기 중인 작업 실행이 더 있으면 `$aws/things/MyThing/jobs/notify`에 게시되는 메시지에 해당 작업이 포함됩니다.

다음 예를 참조하세요.

```
{
    "timestamp":1476290692776,
    "jobs":{
        "QUEUED":[{
            "jobId":"0002",
            "queuedAt":1476290646230,
            "lastUpdatedAt":1476290646230
        }],
        "IN_PROGRESS":[{
            "jobId":"0003",
            "queuedAt":1476290646230,
            "lastUpdatedAt":1476290646230
        }]
    }
}
```