

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

# AWS IoT 작업
<a name="iot-jobs"></a>

 AWS IoT 작업을 사용하여 연결된 하나 이상의 디바이스로 전송하고 실행할 수 있는 원격 작업 세트를 정의합니다 AWS IoT. 예를 들어 애플리케이션을 다운로드하여 설치하거나, 펌웨어 업데이트를 실행하거나, 재부팅하거나, 인증서를 교체하거나, 원격 문제 해결 작업을 수행하도록 디바이스 집합에 지시하는 작업을 정의할 수 있습니다.

## AWS IoT 작업 액세스
<a name="iot-jobs-how-use"></a>

콘솔 또는 API를 사용하여 AWS IoT 작업을 시작할 수 있습니다 AWS IoT Core .

**콘솔 사용**  
에 로그인 AWS Management Console하고 AWS IoT 콘솔로 이동합니다. 탐색 창에서 **관리**를 선택한 다음 **작업**을 선택합니다. 이 섹션에서 작업을 생성하고 관리할 수 있습니다. 작업 템플릿을 생성하고 관리하려면 탐색 창에서 **작업 템플릿(Job templates)**을 선택합니다. 자세한 내용은 [를 사용하여 작업 생성 및 관리 AWS Management Console](manage-job-console.md) 단원을 참조하십시오.

**API 또는 CLI 사용**  
 AWS IoT Core API 작업을 사용하여 시작할 수 있습니다. 자세한 내용은 [AWS IoT API 참조](https://docs.aws.amazon.com/iot/latest/apireference/)를 참조하세요. 작업이 구축된 AWS IoT Core AWS IoT API는 AWS SDK에서 지원됩니다. 자세한 내용은 [AWS SDK 및 도구](https://aws.amazon.com/getting-started/tools-sdks/) 단원을 참조하세요.

 AWS CLI 를 사용하여 작업 및 작업 템플릿을 생성하고 관리하기 위한 명령을 실행할 수 있습니다. 자세한 내용은 [AWS IoT CLI 참조](https://docs.aws.amazon.com/cli/latest/reference/iot/index.html)를 참조하세요.

## AWS IoT 작업 리전 및 엔드포인트
<a name="iot-jobs-endpoints"></a>

AWS IoT 작업은에 고유한 컨트롤 플레인 및 데이터 플레인 API 엔드포인트를 지원합니다 AWS 리전. 데이터 영역 API 엔드포인트는 AWS 계정 및에 고유합니다 AWS 리전. AWS IoT 작업 엔드포인트에 대한 자세한 내용은 일반 참조의 [AWS IoT Device Management - 작업 데이터 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/iot_device_management.html#iot_device_management_region_jobs)를 참조하세요. *AWS * 

# 원격 작업이란 무엇인가요?
<a name="jobs-what-is-remote-operation"></a>

**참고**  
다음 리전에서는 무선 업데이트(OTA) 업데이트를 사용할 수 없습니다.  
유럽(스페인)
아시아 태평양(말레이시아)

원격 작업은 작업자 또는 기술자의 물리적 존재 없이 원격으로 수행할 수 있는 물리적 디바이스, 가상 디바이스 또는 엔드포인트에서 수행할 수 있는 모든 업데이트 또는 작업입니다. 원격 작업은 무선 업데이트(OTA)를 사용하여 수행되므로 디바이스가 물리적으로 존재하지 않아도 됩니다. 에서 디바이스 플릿을 관리 AWS 클라우드 하면 디바이스가에 등록될 때 디바이스에서 원격 작업을 수행할 수 있습니다 AWS IoT Core.

AWS IoT Device Management 작업은에 등록된 디바이스에서 원격 작업을 수행하기 위한 확장 가능한 접근 방식을 제공합니다 AWS IoT Core. 작업은에서 생성 AWS 클라우드 되며 MQTT 또는 HTTP 프로토콜을 통해 OTA 업데이트를 사용하여 모든 대상 디바이스로 푸시됩니다.

AWS IoT Device Management 작업은 안전하고 확장 가능하며 비용 효율적인 방식으로 공장 재설정, 디바이스 재부팅, 소프트웨어 OTA 업데이트와 같은 원격 작업을 수행할 수 있는 기능을 제공합니다.

에 대한 자세한 내용은 단원을 AWS IoT Core참조하십시오[AWS IoT란 무엇인가요?](what-is-aws-iot.md).

 AWS IoT Device Management 작업에 대한 자세한 내용은 [AWS IoT 작업이란 무엇입니까?](jobs-what-is.md) 섹션을 참조하세요.

## 원격 작업에 AWS IoT Device Management 작업 사용의 이점
<a name="why-choose-jobs"></a>

 AWS IoT Device Management 작업을 사용하여 원격 작업을 수행하면 디바이스 플릿의 관리가 간소화됩니다. 다음 목록은 AWS IoT Device Management 작업을 사용하여 원격 작업을 수행할 때 얻을 수 있는 몇 가지 주요 이점을 강조합니다.
+ **다른 AWS 서비스와 원활하게 통합**
  + AWS IoT Device Management 작업은 다음과 같은 부가가치 AWS 서비스 및 기능과 긴밀하게 통합됩니다.
    + **Amazon S3**: 원격 작업 지침을 해당 콘텐츠에 대한 액세스 권한을 제어하는 안전한 Amazon S3 버킷에 저장합니다. Amazon S3 버킷을 사용하면 AWS IoT Device Management Software Package Catalog와 기본적으로 통합되는 확장 가능하고 내구성이 뛰어난 스토리지 솔루션을 제공하므로 작업이 업데이트 지침에서 참조하고 대체할 수 있습니다 AWS IoT Device Management . 자세한 내용은 [What is Amazon S3?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)를 참조하세요
    + **Amazon CloudWatch**: 다른 디바이스 활동 외에도 각 디바이스에 대한 작업 실행의 원격 작업 구현 상태를 모니터링하고 기록하여 AWS IoT Device Management 작업의 전체 작업 성능을 추적하고 분석합니다. 자세한 내용은 [What is Amazon CloudWatch?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)를 참조하세요. 문제 해결을 위해 작업 로그를 모니터링하고 기록 데이터를 캡처합니다. 작업 작동 방식입니다.
    + **AWS IoT 디바이스 섀도우 서비스**: 디바이스 연결에 관계없이 애플리케이션 및 기타 서비스에서 디바이스 상태를 사용할 수 있도록 AWS IoT Device Management 작업을 사용하여 디바이스 섀도우를 통해 AWS IoT 사물의 디지털 표현을 유지합니다. 자세한 내용은 [AWS IoT 디바이스 섀도우 서비스](https://docs.aws.amazon.com/iot/latest/developerguide/iot-device-shadows.html) 단원을 참조하십시오.
+ **보안 모범 사례**
  + **권한 제어**: Amazon S3를 사용하여 원격 운영 지침에 대한 액세스 권한을 제어하고 AWS IoT 정책 및 IAM 사용자 역할을 사용하여 디바이스 플릿에 원격 운영 지침을 배포할 수 있는 IAM 사용자를 결정합니다.
    +  AWS IoT 정책에 대한 자세한 내용은 섹션을 참조하세요[AWS IoT 정책 생성](create-iot-resources.md#create-iot-policy).
    + IAM 사용자 역할에 대한 자세한 내용은 [에 대한 자격 증명 및 액세스 관리 AWS IoT](security-iam.md) 섹션을 참조하세요.
+ **확장성**
  + **대상 작업 배포 **: 작업을 생성할 때 작업 문서에 입력된 특정 디바이스 그룹화 기준을 사용하여 대상 작업 배포가 있는 작업에서 작업 문서를 수신하는 디바이스를 제어합니다. 각 디바이스에 대해 AWS IoT 사물을 생성하고 해당 정보를 AWS IoT 레지스트리에 저장하면 플릿 인덱싱을 사용하여 대상 검색을 수행할 수 있습니다. 플릿 인덱싱 검색 결과를 기반으로 사용자 지정 그룹을 생성하여 대상 작업 배포를 지원할 수 있습니다. 자세한 내용은 [를 사용하여 디바이스 관리 AWS IoT](iot-thing-management.md) 단원을 참조하십시오. 작업을 사용하여 스냅샷과 연속 작업을 비교합니다.
  + **작업 상태**: 각 디바이스에서 작업 문서의 개별 구현 상태 외에도 디바이스 플릿 수준에서 디바이스 플릿에 대한 작업 문서 롤아웃의 상태 및 전체 작업 상태를 추적합니다. 자세한 내용은 [작업 및 작업 실행 상태](iot-jobs-lifecycle.md) 단원을 참조하십시오.
  + **새 디바이스 확장성**: 연속 작업을 통해 플릿 인덱싱을 사용하여 생성된 기존 사용자 지정 그룹에 작업 문서를 추가하여 새 디바이스에 쉽게 배포합니다. 이렇게 하면 작업 문서를 각 새 디바이스에 별도로 배포해야 하는 시간을 절약할 수 있습니다. 또는 작업 문서를 미리 결정된 디바이스 그룹에 한 번 배포한 다음 작업이 완료되어 스냅샷 샷으로 더 대상화된 접근 방식을 사용할 수 있습니다.
+ **유연성**
  + **작업 구성**: 특정 요구 사항에 맞게 선택적 작업 구성 롤아웃, 예약, 중단, 제한 시간 및 재시도를 사용하여 작업 및 작업 문서를 사용자 지정합니다. 자세한 내용은 [작업 구성](jobs-configurations.md) 단원을 참조하십시오.
+ **비용 효율성**
  +  AWS IoT Device Management 작업을 활용하여 중요한 업데이트를 배포하고 일상적인 유지 관리 작업을 수행하여 디바이스 플릿을 유지 관리하기 위한 보다 효율적인 비용 구조를 소개합니다. 디바이스 플릿을 유지하기 위한 DIY(Do-It-Yourself) 솔루션에는 DIY 솔루션을 호스팅하고 관리하는 데 필요한 인프라, DIY 솔루션을 개발, 유지 및 확장하는 데 드는 인건비, 데이터 전송 비용과 같은 반복적인 가변 비용이 포함됩니다. AWS IoT Device Management 작업의 투명한 고정 비용 구조를 활용하면 디바이스에 대한 작업 문서 롤아웃을 용이하게 하고 각 디바이스의 작업 실행 상태를 추적하는 데 필요한 데이터 전송 비용 외에도 디바이스의 각 작업 실행에 드는 비용을 정확히 알 수 있습니다. 자세한 내용은 [AWS IoT Core 요금](https://docs.aws.amazon.com/iot/latest/developerguide/iot-price.html)을 참조하십시오.

# AWS IoT 작업이란 무엇입니까?
<a name="jobs-what-is"></a>

 AWS IoT 작업을 사용하여 연결된 하나 이상의 디바이스로 전송하고 실행할 수 있는 원격 작업 세트를 정의합니다 AWS IoT.

작업을 생성하려면 먼저 디바이스가 원격으로 수행해야 하는 작업을 설명하는 지침 목록이 포함된 *작업 문서*를 정의합니다. 이러한 작업을 수행하려면 개별 사물, [사물 그룹](thing-groups.md) 또는 둘 다인 *대상* 목록을 지정합니다. 작업 문서와 대상이 함께 *배포*를 구성합니다.

배포마다 추가 구성이 있을 수 있습니다.
+ **롤아웃(Rollout)**: 이 구성은 분당 작업 문서를 수신하는 디바이스 수를 정의합니다.
+ **중단**: 특정 수의 디바이스가 작업 알림을 수신하지 못하는 경우 이 구성을 사용하여 작업을 취소합니다. 이렇게 하면 전체 플릿에 잘못된 업데이트를 보내는 것을 방지할 수 있습니다.
+ **시간 제한(Timeout)**: 일정 기간 내에 작업 대상에서 응답을 수신하지 못하면 작업이 실패할 수 있습니다. 이러한 디바이스에서 실행 중인 작업을 추적할 수 있습니다.
+ **재시도**: 디바이스가 실패 또는 작업 시간 초과를 보고하는 경우 AWS IoT 작업을 사용하여 디바이스에 작업 문서를 자동으로 재전송할 수 있습니다.
+ **Scheduling**(예약): 이 구성을 사용하면 미래 날짜 및 시간으로 작업을 예약할 수 있습니다. 또한 사전 정의된 트래픽이 적은 기간 동안 디바이스를 업데이트하는 반복 유지 관리 기간을 만들 수 있습니다.

AWS IoT 작업은 대상에 작업을 사용할 수 있음을 알리는 메시지를 보냅니다. 대상은 작업 문서를 다운로드하고, 지정한 작업을 수행하고, 진행 상황을 보고하여 작업 *실행*을 시작합니다 AWS IoT. 작업에서 제공하는 명령을 실행하여 특정 대상 또는 모든 대상에 대한 AWS IoT 작업 진행 상황을 추적할 수 있습니다. 작업이 시작되면 *진행 중(In progress)* 상태가 됩니다. 그런 다음 디바이스는 작업이 성공, 실패 또는 시간 초과될 때까지 이 상태를 표시하면서 증분 업데이트를 보고합니다.

다음 주제에서는 작업의 몇 가지 주요 개념과 작업 및 작업 실행의 수명 주기에 대해 설명합니다.

**Topics**
+ [작업 관련 주요 개념](key-concepts-jobs.md)
+ [작업 및 작업 실행 상태](iot-jobs-lifecycle.md)

# 작업 관련 주요 개념
<a name="key-concepts-jobs"></a>

다음 개념은 AWS IoT 작업에 대한 세부 정보와 디바이스에서 원격 작업을 실행하기 위한 작업을 생성하고 배포하는 방법을 제공합니다.

## 기본 개념
<a name="basic-concepts-jobs"></a>

다음은 AWS IoT 작업 사용 시 알아야 할 기본 개념입니다.

**작업**  
작업은 AWS IoT에 연결되는 하나 이상의 디바이스로 전송되어 실행되는 원격 작업입니다. 예를 들어 애플리케이션을 다운로드하여 설치하거나, 펌웨어 업데이트를 실행하거나, 재부팅하거나, 인증서를 교체하거나, 원격 문제 해결 작업을 수행하도록 일련의 디바이스에 지시하는 작업을 정의할 수 있습니다.

**작업 문서**  
작업을 생성하려면 먼저 디바이스에서 수행할 원격 작업을 설명하는 작업 문서를 생성해야 합니다.  
작업 문서는 UTF-8 인코딩 JSON 문서이며, 여기에는 디바이스가 작업을 실행하는 데 필요한 정보가 포함됩니다. 작업 문서에는 디바이스가 업데이트 또는 기타 데이터를 다운로드할 수 있는 URL이 1개 이상 포함됩니다. 작업 문서는 Amazon S3 버킷에 저장되거나, 혹은 작업 생성 명령에 인라인으로 포함될 수도 있습니다.  
MQTT 응답에서 `jobDocument` 필드는 JSON 객체입니다. HTTP 응답에서 JSON 객체의 문자열 표현입니다.

**대상**  
작업을 생성할 때 작업을 수행해야 하는 디바이스를 포함하는 대상 목록을 지정합니다. 여기서 대상은 사물 또는 [사물 그룹](thing-groups.md) 또는 두 가지 모두가 될 수 있습니다. AWS IoT 작업 서비스는 각 대상에 작업을 사용할 수 있음을 알리는 메시지를 보냅니다.

**배포**  
작업 문서를 제공하고 대상 목록을 지정하여 작업을 생성한 후 업데이트를 수행하려는 원격 대상 디바이스에 작업 문서가 배포됩니다. 스냅샷 작업의 경우 작업은 대상 디바이스에 배포된 후 완료됩니다. 연속 작업의 경우 작업은 그룹에 추가될 때 디바이스 그룹에 배포됩니다.

**작업 실행**  
작업 실행은 대상 디바이스의 작업 인스턴스입니다. 대상은 작업 문서를 다운로드하여 작업 실행을 시작합니다. 그런 다음 문서에 지정된 작업을 수행하고 진행 상황을 보고합니다 AWS IoT. 실행 번호는 특정 대상에서 작업 실행의 고유 식별자입니다. AWS IoT 작업 서비스는 대상에 대한 작업 실행 진행 상황과 모든 대상에 대한 작업 진행 상황을 추적하는 명령을 제공합니다.

## 작업 유형 개념
<a name="advanced-concepts-jobs"></a>

다음 개념은 작업으로 생성할 수 있는 다양한 유형의 AWS IoT 작업에 대해 더 잘 이해하는 데 도움이 될 수 있습니다.

**스냅샷 작업**  
기본적으로 작업은 생성할 때 지정하는 모든 대상으로 전송됩니다. 이러한 대상들이 작업을 마치면(또는 작업을 완료할 수 없다고 보고하면) 작업은 완료됩니다.

**연속 작업**  
연속 작업은 생성할 때 지정하는 모든 대상으로 전송됩니다. 이 작업은 계속 실행되고 대상 그룹에 새로 추가되는 모든 디바이스(사물)로 전송됩니다. 예를 들어 연속 작업은 그룹에 추가된 디바이스를 온보딩하거나 업그레이드할 때 사용됩니다. 작업을 생성할 때 옵션으로 제공되는 파라미터를 설정하면 작업을 연속으로 실행할 수 있습니다.  
동적 사물 그룹을 사용하여 IoT 플릿의 대상을 지정할 때는 스냅샷 작업 대신 연속 작업을 사용하는 것이 좋습니다. 연속 작업을 사용하면 그룹에 조인하는 디바이스는 작업이 생성된 후에도 작업 실행을 수신합니다.

## 미리 서명된 URL
<a name="security-concepts-jobs"></a><a name="presigned"></a>

작업 문서에 포함되지 않은 데이터에 대한 안전한 시간 제한 액세스를 위해 미리 서명된 Amazon S3 URL을 사용할 수 있습니다. 먼저 데이터를 Amazon S3 버킷에 저장한 후 자리 표시자 링크를 작업 문서의 데이터에 추가합니다. AWS IoT Jobs가 작업 문서에 대한 요청을 받으면 자리 표시자 링크를 찾아 작업 문서를 구문 분석한 다음 미리 서명된 Amazon S3 URLs.

자리 표시자 링크는 다음과 같은 형식을 따릅니다.

```
${aws:iot:s3-presigned-url:https://s3.amazonaws.com/bucket/key}
```

여기에서 *bucket*은 버킷 이름이고, *key*는 링크를 연결할 버킷 객체입니다.

베이징 및 닝샤 리전에서 미리 서명된 URL은 리소스 소유자에게 인터넷 콘텐츠 공급자(ICP) 라이선스가 있는 경우에만 작동합니다. 자세한 내용은 중국에서 서비스 시작하기 설명서의 [Amazon Simple Storage](https://docs.amazonaws.cn/en_us/aws/latest/userguide/s3.html) Service를 참조하세요. * AWS * 

## 작업 구성 개념
<a name="advanced-concepts-jobs"></a>

다음 개념은 작업 구성 방법을 이해하는 데 도움이 될 수 있습니다.

**롤아웃**  
대상에게 대기 중인 작업 실행을 얼마나 빨리 알릴지 지정할 수 있습니다. 이로써 단계별 롤아웃을 생성하여 업데이트, 재부팅 및 기타 작업을 더욱 효과적으로 관리할 수 있습니다. 정적 롤아웃 속도 또는 기하급수적인 롤아웃 속도를 사용하여 롤아웃 구성을 생성할 수 있습니다. 분당 알릴 최대 작업 대상 수를 지정하려면 정적 롤아웃 속도를 사용합니다.  
롤아웃 속도 설정의 예와 작업 롤아웃 구성에 대한 자세한 내용은 [작업 롤아웃, 예약 및 중단 구성](jobs-configurations-details.md#job-rollout-abort-scheduling) 섹션을 참조하세요.

**일정 예약**  
작업 예약 기능을 사용하면 연속 작업과 스냅샷 작업에서 대상 그룹의 모든 디바이스에 대한 작업 문서의 롤아웃 기간을 예약할 수 있습니다. 또한 작업이 대상 그룹의 모든 디바이스에 작업 문서를 롤아웃할 특정 날짜 및 시간을 포함하는 유지 관리 기간을 선택적으로 생성할 수 있습니다. 유지 관리 기간이란 초기 작업 또는 작업 템플릿 생성 중에 매일, 매주, 매월 또는 사용자 정의 날짜 및 시간 간격으로 반복되는 인스턴스입니다. 유지 관리 기간 중에는 연속 작업만 롤아웃을 수행하도록 예약할 수 있습니다.  
작업 예약은 해당 작업에만 적용됩니다. 개별 작업 실행은 예약할 수 없습니다. 자세한 내용은 [작업 롤아웃, 예약 및 중단 구성](jobs-configurations-details.md#job-rollout-abort-scheduling) 단원을 참조하십시오.

**중단**  
지정된 특정 기준을 충족하지 않으면 롤아웃을 취소할 조건 집합을 생성할 수 있습니다. 자세한 내용은 [작업 롤아웃, 예약 및 중단 구성](jobs-configurations-details.md#job-rollout-abort-scheduling) 단원을 참조하십시오.

**시간 초과**  
작업 시간 초과 기능은 작업 배포가 예상치 않게 장시간 동안 `IN_PROGRESS` 상태에 멈출 때마다 알립니다. 타이머에는 진행 중 타이머와 단계 타이머 두 가지 유형이 있습니다. 작업이 `IN_PROGRESS` 상태이면 작업 배포의 진행 상황을 모니터링하고 추적할 수 있습니다.  
롤아웃 및 중단 구성은 작업에 따라 다르지만 시간 제한 구성은 작업 배포에 따라 다릅니다. 자세한 내용은 [작업 실행 제한 시간 및 재시도 구성](jobs-configurations-details.md#job-timeout-retry) 단원을 참조하십시오.

**재시도**  
작업 재시도를 사용하면 작업이 실패하거나 시간이 초과되는 경우 또는 둘 모두 발생하는 경우 작업 실행을 재시도할 수 있습니다. 작업을 실행하기 위해 최대 10번의 재시도를 수행할 수 있습니다. 재시도 진행 상황과 작업 실행의 성공 여부를 모니터링하고 추적할 수 있습니다.  
롤아웃 및 중단 구성은 작업에 따라 다르지만 제한 시간 및 재시도 구성은 작업 실행에 따라 다릅니다. 자세한 내용은 [작업 실행 제한 시간 및 재시도 구성](jobs-configurations-details.md#job-timeout-retry) 단원을 참조하십시오.

# 작업 및 작업 실행 상태
<a name="iot-jobs-lifecycle"></a>

다음 섹션에서는 AWS IoT 작업의 수명 주기와 작업 실행의 수명 주기에 대해 설명합니다.

## 작업 상태
<a name="iot-jobs-states"></a>

다음 다이어그램은 AWS IoT 작업의 다양한 상태를 보여줍니다.

![\[AWS IoT 작업의 다양한 상태를 보여주는 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/job-states-diagram.png)


작업을 사용하여 생성하는 AWS IoT 작업은 다음 상태 중 하나일 수 있습니다.
+ 

**SCHEDULED**  
콘솔, [CreateJob](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html) API 또는 [CreateJobTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJobTemplate.html) API를 AWS IoT 사용하여 초기 작업 또는 작업 템플릿을 생성하는 동안 AWS IoT 콘솔에서 또는 [CreateJob](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html) API 또는 [CreateJobTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJobTemplate.html) API`SchedulingConfig`에서 선택적 예약 구성을 선택할 수 있습니다. 특정 `startTime`, `endTime` 및 `endBehavior`를 포함하는 예약된 작업을 시작하면 작업 상태가 `SCHEDULED`로 업데이트됩니다. 작업이 선택한 `startTime` 또는 다음 유지 관리 기간(유지 관리 기간에 작업 롤아웃을 선택한 경우)의 `startTime`에 도달하면 상태가 `SCHEDULED`에서 `IN_PROGRESS`로 전환되며 대상 그룹의 모든 디바이스에 대한 작업 문서 롤아웃이 시작됩니다.
+ 

**IN\$1PROGRESS**  
 AWS IoT 콘솔 또는 [CreateJob](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html) API를 사용하여 작업을 생성하면 작업 상태가 로 업데이트됩니다`IN_PROGRESS`. 작업 생성 중에 AWS IoT 작업은 대상 그룹의 디바이스에 작업 실행을 롤아웃하기 시작합니다. 모든 작업 실행이 롤아웃된 후 AWS IoT 작업은 디바이스가 원격 작업을 완료할 때까지 기다립니다.

  진행 중인 작업에 적용되는 동시성 및 제한에 대한 자세한 정보는 [AWS IoT 작업 제한](job-limits.md) 섹션을 참조하세요.
**참고**  
`IN_PROGRESS` 작업이 현재 유지 관리 기간의 끝에 도달하면 작업 문서의 롤아웃이 중지됩니다. 작업은 다음 유지 관리 기간의 `startTime`까지 `SCHEDULED`로 업데이트됩니다.
+ 

**COMPLETED**  
연속 작업은 다음 방법 중 하나로 처리됩니다.
  + 선택적 스케줄링 구성을 선택하지 않은 연속 작업의 경우 작업이 항상 진행 중이며 대상 그룹에 추가된 새 디바이스에 대해 계속 실행됩니다.** `COMPLETED` 상태에 절대 도달하지 않습니다.
  + 선택적 예약 구성을 선택한 연속 작업의 경우 다음 설명이 참입니다.**
    + `endTime`이 *제공된* 경우 연속 작업은 `endTime`이 지나고 모든 작업 실행이 최종 상태에 도달하면 `COMPLETED` 상태가 됩니다.
    + 선택적 예약 구성에서 `endTime`이 *제공되지 않은* 경우 연속 작업은 작업 문서 롤아웃을 계속 수행합니다.

스냅샷 작업의 경우 모든 작업 실행이 `SUCCEEDED`, `FAILED`, `TIMED_OUT`, `REMOVED` 또는 `CANCELED`와 같은 최종 상태가 되면 작업 상태가 `COMPLETED`로 변경됩니다.
+ 

**CANCELED**  
 AWS IoT 콘솔, [CancelJob](https://docs.aws.amazon.com/iot/latest/apireference/API_CancelJob.html) API 또는를 사용하여 작업을 취소하면 [작업 중단 구성](jobs-configurations-details.md#job-abort-using)작업 상태가 로 변경됩니다`CANCELED`. 작업 취소 중에 AWS IoT 작업은 이전에 생성된 작업 실행을 취소하기 시작합니다.

  취소 중인 작업에 적용되는 동시성 및 제한에 대한 자세한 정보는 [AWS IoT 작업 제한](job-limits.md) 섹션을 참조하세요.
+ 

**DELETION\$1IN\$1PROGRESS**  
 AWS IoT 콘솔 또는 [DeleteJob](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteJob.html) API를 사용하여 작업을 삭제하면 작업 상태가 로 변경됩니다`DELETION_IN_PROGRESS`. 작업 삭제 중에 AWS IoT 작업은 이전에 생성된 작업 실행을 삭제하기 시작합니다. 모든 작업 실행이 삭제되면 AWS 계정에서 작업이 사라집니다.

## 작업 실행 상태
<a name="iot-job-execution-states"></a>

다음 표에는 AWS IoT 작업 실행의 다양한 상태와 상태 변경이 디바이스에 의해 시작되는지 아니면 AWS IoT 작업에 의해 시작되는지가 나와 있습니다.


**작업 실행 상태 및 소스**  

| 작업 실행 상태 | 디바이스에 의해 시작 |  AWS IoT 작업에 의해 시작되었나요? | 최종 상태 | 재시도 가능 | 
| --- | --- | --- | --- | --- | 
| QUEUED | 아니요 | 예 | 아니요 | 해당 사항 없음 | 
| IN\$1PROGRESS | 예 | 아니요 | 아니요 | 해당 사항 없음 | 
| SUCCEEDED | 예 | 아니요 | 예 | 해당 사항 없음 | 
| FAILED | 예 | 아니요 | 예 | 예 | 
| TIMED\$1OUT | 아니요 | 예 | 예 | 예 | 
| REJECTED | 예 | 아니요 | 예 | 아니요 | 
| REMOVED | 아니요 | 예 | 예 | 아니요 | 
| CANCELED | 아니요 | 예 | 예 | 아니요 | 

다음 섹션에서는 작업으로 작업을 생성할 때 롤아웃되는 작업 실행의 상태에 대해 자세히 설명합니다 AWS IoT .
+ 

**대기됨**  
 AWS IoT 작업이 대상 디바이스에 대한 작업 실행을 롤아웃하면 작업 실행 상태가 로 설정됩니다`QUEUED`. 작업 실행은 다음까지 `QUEUED` 상태로 유지됩니다.
  + 디바이스가 작업 실행을 수신하고 Jobs API 작업을 호출한 후 상태를 `IN_PROGRESS`로 보고합니다.
  + 사용자가 작업 또는 작업 실행을 취소하거나, 지정한 중단 조건이 충족되거나, 상태가 `CANCELED`로 변경됩니다.
  + 디바이스가 대상 그룹에서 제거되고 상태가 `REMOVED`로 변경됩니다.  
![\[대기 중인 작업 실행의 상태가 IN_PROGRESS로 변경되는 방식과 디바이스가 작업 생성 요청을 수락하지 않는 경우 작업이 어떻게 거부될 수 있는지를 보여주는 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/JE-queued-inprogress.png)
+ 

**IN\$1PROGRESS**  
IoT 디바이스가 예약 [작업 주제](reserved-topics.md#reserved-topics-job) `$notify` 및를 구독`$notify-next`하고 디바이스가 상태`StartNextPendingJobExecution`인 API 또는 `UpdateJobExecution` API를 호출하는 경우 `IN_PROGRESS` AWS IoT 작업 실행 상태는 로 설정됩니다`IN_PROGRESS`.

  `UpdateJobExecution` API는 `IN_PROGRESS` 상태로 여러 번 호출될 수 있습니다. `statusDetails` 객체를 사용하여 실행 단계에 대한 추가 세부 정보를 지정할 수 있습니다.
**참고**  
각 디바이스에 대해 여러 작업을 생성하는 경우 AWS IoT 작업과 MQTT 프로토콜은 전송 순서를 보장하지 않습니다.
+ 

**SUCCEEDED**  
디바이스가 원격 작업을 성공적으로 완료하면 디바이스는 작업 실행이 성공했음을 나타내기 `SUCCEEDED` 위해 상태로 `UpdateJobExecution` API를 호출해야 합니다. 그러면 AWS IoT 작업은를 업데이트하고 작업 실행 상태를 로 반환합니다`SUCCEEDED`.  
![\[진행 중인 작업 실행이 실패할 수 있는 경우와 실행을 다시 시도하는 방법을 보여주는 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/JE-success-path.png)
+ 

**FAILED**  
디바이스가 원격 작업을 완료하지 못하면 디바이스는 작업 실행이 실패했음을 `Failed` 나타내는 상태로 `UpdateJobExecution` API를 호출해야 합니다. 그러면 AWS IoT 작업은를 업데이트하고 작업 실행 상태를 로 반환합니다`Failed`. [작업 실행 재시도 구성](jobs-configurations-details.md#job-retry-configuration)을 사용하여 디바이스에 대해 이 작업 실행을 다시 시도할 수 있습니다.  
![\[진행 중인 작업 실행이 실패할 수 있는 경우와 실행을 다시 시도하는 방법을 보여주는 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/JE-inprogress-failed.png)
+ 

**TIMED\$1OUT**  
상태가 인 경우 디바이스가 작업 단계를 완료하지 못`IN_PROGRESS`하거나 진행 중인 타이머의 제한 시간 내에 원격 작업을 완료하지 못하면 AWS IoT 작업은 작업 실행 상태를 로 설정합니다`TIMED_OUT`. 또한 진행 중인 작업의 각 작업 단계에 대한 단계 타이머가 있으며 작업 실행에만 적용됩니다. 이 진행 타이머 기간은 [작업 실행 시간 제한 구성](jobs-configurations-details.md#job-timeout-configuration)의 `inProgressTimeoutInMinutes` 속성을 사용하여 지정됩니다. [작업 실행 재시도 구성](jobs-configurations-details.md#job-retry-configuration)을 사용하여 디바이스에 대해 이 작업 실행을 다시 시도할 수 있습니다.  
![\[진행 중인 작업 실행이 어떻게 시간 초과될 수 있는지와 실행을 다시 시도하는 방법을 보여주는 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/JE-inprogress-timedout.png)
+ 

**REJECTED**  
디바이스가 유효하지 않거나 호환되지 않는 요청을 수신하면 디바이스는 상태가 인 `UpdateJobExecution` API를 호출해야 합니다`REJECTED`. 그러면 AWS IoT 작업이 업데이트되고 작업 실행 상태가 로 반환됩니다`REJECTED`.
+ 

**REMOVED**  
디바이스가 동적 사물 그룹에서 분리된 경우와 같이 디바이스가 더 이상 작업 실행의 유효한 대상이 아닌 경우 AWS IoT Jobs는 작업 실행 상태를 `REMOVED`로 설정합니다. 대상 그룹에 사물을 다시 연결하고 디바이스에 대한 작업 실행을 다시 시작할 수 있습니다.
+ 

**CANCELED**  
콘솔이나 `CancelJob` 또는 `CancelJobExecution` API를 사용하여 작업을 취소하거나 작업 실행을 취소하거나를 사용하여 지정된 중단 기준이 [작업 중단 구성](jobs-configurations-details.md#job-abort-using) 충족되면 AWS IoT 작업은 작업을 취소하고 작업 실행 상태를 로 설정합니다`CANCELED`.

# 작업 관리
<a name="create-manage-jobs"></a>

작업을 사용하여 소프트웨어 또는 펌웨어 업데이트를 디바이스에 알립니다. [AWS IoT 콘솔](https://console.aws.amazon.com/iot/), [작업 관리 및 제어 API 작업](jobs-management-control-api.md#jobs-http-api), [AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/reference/iot/index.html) 또는 [AWS SDK](https://aws.amazon.com/tools/#sdk)를 사용하여 작업을 생성하고 관리할 수 있습니다.

## 작업에 대한 코드 서명
<a name="create-manage-jobs-code-signing"></a>

 디바이스에 코드를 전송할 때 디바이스에서 코드가 전송 중 수정되었는지 감지하려면 AWS CLI를 사용하여 코드 파일에 서명하는 것이 좋습니다. 지침은 [AWS CLI를 사용하여 작업 생성 및 관리](manage-job-cli.md)를 참조하세요.

자세한 내용은 [코드 서명이란 무엇입니까 AWS IoT?를 참조하세요](https://docs.aws.amazon.com/signer/latest/developerguide/Welcome.html).

## 작업 문서
<a name="create-manage-jobs-job-doc"></a>

작업을 생성하려면 작업 문서를 생성해야 합니다. 에 코드 서명을 사용하는 경우 버전이 지정된 Amazon S3 버킷에 작업 문서를 업로드 AWS IoT해야 합니다. 파일을 만들고 Amazon S3 버킷을 만들고 이 버킷에 파일을 업로드하는 방법에 대한 자세한 내용은 *Amazon S3 시작 안내서*의 [Amazon Simple Storage Service 시작하기](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html)를 참조하세요.

**작은 정보**  
작업 문서 예제는 JavaScript용 AWS IoT SDK의 [job-agent.js](https://www.npmjs.com/package/aws-iot-device-sdk#jobs-agentjs) 예제를 참조하세요.

## 미리 서명된 URL
<a name="create-manage-jobs-presigned-URLs"></a>

작업 문서에는 코드 파일(또는 기타 파일)을 가리키는 미리 서명된 Amazon S3 URL을 포함할 수 있습니다. 미리 서명된 Amazon S3 URL은 제한된 시간 동안 유효하므로 디바이스가 작업 문서를 요청할 때 생성되지 않습니다. 미리 서명된 URL은 작업 문서를 만들 때에는 생성되지 않았으므로 작업 문서에는 자리 표시자 URL을 대신 사용합니다. 자리 표시자 URL은 다음과 같습니다.

`${aws:iot:s3-presigned-url-v2:https://s3.region.amazonaws.com/<bucket>/<code file>}`

여기서 각 항목은 다음과 같습니다.
+ *bucket*은 코드 파일이 들어 있는 Amazon S3 버킷입니다.
+ *code file*은 코드 파일의 Amazon S3 키입니다.

디바이스가 작업 문서를 요청하면는 미리 서명된 URL을 AWS IoT 생성하고 자리 표시자 URL을 미리 서명된 URL로 바꿉니다. 그러면 디바이스로 작업 문서가 전송됩니다.

**S3에서 파일을 다운로드할 수 있는 권한을 부여하는 IAM 역할**  
사전 서명된 Amazon S3 URL을 사용하여 작업을 생성할 경우, IAM 역할을 제공해야 합니다. 역할은 데이터 또는 업데이트가 저장되어 있는 Amazon S3 버킷에서 파일을 다운로드할 수 있는 권한을 부여해야 합니다. 또한 이 역할은 AWS IoT 에게 역할을 위임할 수 있는 권한을 부여해야 합니다.

미리 서명된 URL에 제한 시간을 선택적으로 지정할 수도 있습니다. 자세한 내용은 [CreateJob](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html)을 참조하세요.

**역할을 수임할 수 있는 AWS IoT 작업 권한 부여**

1. [IAM 콘솔의 역할 허브](https://console.aws.amazon.com/iamv2/home#/roles)로 이동하고 역할을 선택합니다.

1. **신뢰 관계(Trust Relationships)** 탭에서 **신뢰 관계 편집(Edit Trust Relationship)**을 선택하고 정책 문서를 다음 JSON으로 바꿉니다. **신뢰 정책 업데이트**를 선택합니다.  
****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "",
         "Effect": "Allow",
         "Principal": {
           "Service": [
             "iot.amazonaws.com"
           ]
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

1. 혼동된 대리자 문제를 방지하기 위하여 전역 조건 컨텍스트 키 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 및 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)를 정책에 추가합니다.
**중요**  
`aws:SourceArn`은 `arn:aws:iot:region:account-id:*` 형식을 따라야 합니다. *리전*이 AWS IoT 리전과 일치하고 *계정 ID*가 고객 계정 ID와 일치하는지 확인합니다. 자세한 설명은 [교차 서비스 혼동된 대리자 예방](cross-service-confused-deputy-prevention.md)을 참조하세요.

   ```
   {
     "Effect": "Allow",
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": 
             "iot.amazonaws.com"        
          },
         "Action": "sts:AssumeRole",
         "Condition": {
            "StringEquals": {
               "aws:SourceAccount": "123456789012"
            },
            "ArnLike": {
                 "aws:SourceArn": "arn:aws:iot:*:123456789012:job/*"
            }
          }
        }
      ]
   }
   ```

1. 해당 작업에서 Amazon S3 객체인 작업 문서를 사용할 경우, **권한** 을 선택하고 다음 JSON을 사용합니다. 그러면 Amazon S3 버킷에서 파일을 다운로드할 권한을 부여하는 정책이 추가됩니다.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "s3:GetObject",
               "Resource": "arn:aws:s3:::your_S3_bucket/*"
           }
       ]
   }
   ```

## 파일 업로드를 위한 미리 서명된 URL
<a name="create-manage-jobs-presigned-URLs-upload"></a>

디바이스가 작업 배포 중에 Amazon S3 버킷에 파일을 업로드해야 하는 경우 작업 문서에 다음과 같은 미리 서명된 URL 자리 표시자를 포함할 수 있습니다.

```
${aws:iot:s3-presigned-url-upload:https://s3.region.amazonaws.com/<bucket>/<key>} 
```

작업 문서에 있는 파일 업로드 자리 표시자 URL의 `key` 속성 내에서 최대 2개의 `${thingName}`, `${jobId}`, 및 `${executionNumber}`를 예약 키워드로 사용할 수 있습니다. `key` 속성에서 예약된 키워드를 나타내는 로컬 자리 표시자는 구문 분석되고 작업 실행이 생성될 때 대체됩니다. 각 디바이스에 대해 예약된 키워드가 있는 로컬 자리 표시자를 사용하면 디바이스에서 업로드된 각 파일이 해당 디바이스에 고유하고 동일한 작업 배포의 대상이 되는 다른 디바이스에서 유사한 업로드된 파일로 덮어쓰지 않습니다. 작업 배포 중에 파일을 업로드하기 위해 미리 서명된 URL 자리 표시자 내의 로컬 자리 표시자 문제를 해결하는 방법에 대한 자세한 내용은 [오류 메시지 일반 문제 해결](software-package-catalog-troubleshooting.md#spc-general-troubleshooting) 섹션을 참조하세요.

**참고**  
Amazon S3 버킷 이름에는 업로드된 파일에 대해 예약된 키워드를 나타내는 로컬 자리 표시자를 포함할 수 없습니다. 로컬 자리 표시자는 `key` 속성에 있어야 합니다.

디바이스가 이 미리 서명된 URL 자리 표시자를 수신하면 작업 문서에서 미리 서명된 Amazon S3 업로드 URL로 변환됩니다. 디바이스에서 이를 사용하여 대상 Amazon S3 버킷에 파일을 업로드합니다.

**참고**  
위의 자리 표시자 URL에 Amazon S3 버킷과 키가 제공되지 않은 경우 AWS IoT Jobs는 각 디바이스에 대해 `${thingName}`, `${jobId}` 및 `${executionNumber}`의 최대 2개를 사용하여 키를 자동으로 생성합니다.

## Amazon S3 버전 관리를 사용하여 미리 서명된 URL
<a name="create-manage-jobs-presigned-URLs-versioning"></a>

Amazon S3 버킷에 저장된 파일의 무결성을 보호하는 것은 해당 파일을 사용하여 디바이스 플릿에 안전한 작업 배포를 보장하는 데 중요합니다. Amazon S3 버전 관리를 사용하면 Amazon S3 버킷에 저장된 파일의 각 변형에 대한 버전 식별자를 추가하여 파일의 각 버전을 추적할 수 있습니다. 이를 통해 AWS IoT 작업을 사용하여 디바이스 플릿에 배포되는 파일 버전을 파악할 수 있습니다. Amazon S3 버전 관리에 대한 자세한 내용은 [Amazon S3 버킷에서 버전 관리 사용](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html)을 참조하세요.

파일이 Amazon S3에 저장되고 작업 문서에 미리 서명된 URL 자리 표시자가 포함된 경우 AWS IoT , 작업에서는 Amazon S3 버킷, 버킷 키 및 Amazon S3 버킷에 저장된 파일 버전을 사용하여 작업 문서에 미리 서명된 URL을 생성합니다. Amazon S3 작업 문서에서 생성된 이 미리 서명된 URL은 작업 문서에서 원래 미리 서명된 URL 자리 표시자를 대체합니다. Amazon S3 버킷에 저장된 파일을 업데이트하면 새 버전의 파일 및 후속 `versionId`가 생성되어 업데이트에 신호를 보내고 향후 작업 배포에서 해당 특정 파일을 대상으로 지정할 수 있는 기능을 제공합니다.

`versionId`를 사용하여 작업 문서에서 미리 서명된 Amazon S3 URL을 보기 전 및 보는 동안 다음 예제를 참조하세요.

**Amazon S3 사전 서명된 URL 자리 표시자(작업 배포 전)**

```
//Virtual-hosted style URL
${aws:iot:s3-presigned-url-v2:https://bucket-name.s3.region-code.amazonaws.com/key-name%3FversionId%3Dversion-id}

//Path-style URL
${aws:iot:s3-presigned-url-v2:https://s3.region-code.amazonaws.com/bucket-name/key-name%3FversionId%3Dversion-id}
```

**Amazon S3 사전 서명된 URL(작업 배포 중)**

```
//Virtual-hosted style URL
${aws:iot:s3-presigned-url-v2:https://sample-bucket-name.s3.us-west-2.amazonaws.com/sample-code-file.png%3FversionId%3Dversion1}

//Path-style
${aws:iot:s3-presigned-url-v2:https://s3.us-west-2.amazonaws.com/sample-bucket-name/sample-code-file.png%3FversionId%3Dversion1}
```

Amazon S3 가상 호스팅 및 경로 스타일 객체 URLs에 대한 자세한 내용은 [가상 호스팅 스타일 요청](https://docs.aws.amazon.com/AmazonS3/latest/userguide/VirtualHosting.html#virtual-hosted-style-access) 및 [경로 스타일 요청 섹션](https://docs.aws.amazon.com/AmazonS3/latest/userguide/VirtualHosting.html#path-style-access)을 참조하세요.

**참고**  
Amazon S3 미리 서명된 URL에 `versionId`를 추가하려는 경우 AWS SDK for Java 2.x를 지원하는 URL 인코딩을 준수해야 합니다. 자세한 내용은 [Changes in parsing Amazon S3 URIs from version 1 to version 2](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/migration-s3-uri-parser.html#migration-3-uri-parser-api-changes) 섹션을 참조하세요.

**Amazon S3 미리 서명된 URL 자리 표시자 버전 차이**

다음 목록은 Amazon S3 미리 서명된 URL 자리 표시자 `${aws:iot:s3-presigned-url-v1`(버전 1)과 `${aws:iot:s3-presigned-url-v2`(버전 2)의 차이점을 간략하게 설명합니다.
+  Amazon S3 미리 서명된 URL 자리 표시자 `${aws:iot:s3-presigned-url-v1`은 `version-id`를 지원하지 않습니다.
+ Amazon S3 미리 서명된 URL 자리 표시자 `${aws:iot:s3-presigned-url-v1`은 Amazon S3 URL을 인코딩되지 않은 상태로 수신합니다. Amazon S3 미리 서명된 URL 자리 표시자 `${aws:iot:s3-presigned-url-v2`을 사용하려면 Amazon S3 SDK 표준을 준수하도록 Amazon S3 URL을 인코딩해야 합니다.

**Topics**
+ [작업에 대한 코드 서명](#create-manage-jobs-code-signing)
+ [작업 문서](#create-manage-jobs-job-doc)
+ [미리 서명된 URL](#create-manage-jobs-presigned-URLs)
+ [파일 업로드를 위한 미리 서명된 URL](#create-manage-jobs-presigned-URLs-upload)
+ [Amazon S3 버전 관리를 사용하여 미리 서명된 URL](#create-manage-jobs-presigned-URLs-versioning)
+ [를 사용하여 작업 생성 및 관리 AWS Management Console](manage-job-console.md)
+ [를 사용하여 작업 생성 및 관리 AWS CLI](manage-job-cli.md)

# 를 사용하여 작업 생성 및 관리 AWS Management Console
<a name="manage-job-console"></a>

이 섹션에서는 AWS IoT 콘솔에서 작업을 생성하고 관리하는 방법을 설명합니다. 작업을 생성한 후 세부 정보 페이지에서 작업에 대한 정보를 보고 작업을 관리할 수 있습니다.

**참고**  
 AWS IoT 작업에 대한 코드 서명을 수행하려면를 사용합니다 AWS CLI. 자세한 내용은 [Create and manage jobs by using the AWS CLI](manage-job-cli.md) 섹션을 참조하세요.

**Topics**
+ [를 사용하여 관리 작업 생성 AWS Management Console](#create-job-console)
+ [를 사용하여 작업 보기 및 관리 AWS Management Console](#view-manage-job-console)

## 를 사용하여 관리 작업 생성 AWS Management Console
<a name="create-job-console"></a>

작업을 생성하려면 AWS IoT 콘솔에 로그인하고 **원격 작업** 섹션의 [작업 허브](https://console.aws.amazon.com/iot/home#/jobhub)로 이동합니다. 그런 다음, 다음 단계를 수행합니다.

1. **작업** 페이지의 **작업** 대화 상자에서 **작업 생성**을 선택합니다.

1. 사용 중인 디바이스에 따라 사용자 지정 작업, FreeRTOS OTA 업데이트 작업 또는 AWS IoT Greengrass 작업을 생성할 수 있습니다. 이 예에서는 **사용자 정의 작업 생성(Create a custom job)**을 선택합니다. **다음**을 선택합니다.

1. **Custom job properties**(사용자 지정 작업 속성) 페이지의 **Job properties**(작업 속성) 대화 상자에서 다음 필드에 정보를 입력합니다.
   + **Name**(이름): 고유한 영숫자 작업 이름을 입력합니다.
   + **Description - optional**(설명 - 선택 사항): 작업에 대한 선택적 설명을 입력합니다.
   + **Tags - optional**(태그 -선택 사항): 
**참고**  
작업 ID 및 설명에 개인 식별 정보를 사용하지 않는 것이 좋습니다.

   **다음**을 선택합니다.

1. **파일 구성** 페이지의 **작업 대상** 대화 상자에서 이 작업을 실행할 **사물** 또는 **사물 그룹** 선택합니다.

   **Job document**(작업 문서) 대화 상자에서 다음 옵션 중 하나를 선택합니다.
   + **From file**(파일에서): 이전에 Amazon S3 버킷에 업로드한 JSON 작업 파일
     + **코드 서명**

       Amazon S3 URL에 있는 작업 문서에서 `${aws:iot:code-sign-signature:s3://region.bucket/code-file@code-file-version-id}`는 **코드 서명 프로필**을 사용하여 서명된 코드 파일 경로로 대체되기 전까지는 자리 표시자로 필요합니다. 새로 서명된 코드 파일은 처음에 Amazon S3 소스 버킷의 `SignedImages` 폴더에 표시됩니다. `Codesigned_` 접두사가 포함된 새 작업 문서가 생성되며, 서명된 코드 파일 경로가 코드 서명 자리 표시자를 대체하고 새 작업을 생성할 수 있도록 Amazon S3 URL에 배치됩니다.
     + **사전 서명 리소스 URL**

       **사전 서명 역할** 드롭다운에서 [미리 서명된 URL에서 생성한 IAM 역할을 선택합니다.](https://docs.aws.amazon.com/iot/latest/developerguide/create-manage-jobs.html#create-manage-jobs-presigned-URLs) Amazon S3에 있는 객체의 URL을 미리 서명하는 데 `${aws:iot:s3-presigned-url:`을 사용하는 것은 Amazon S3에서 객체를 다운로드하는 디바이스의 보안 모범 사례입니다.

       코드 서명 자리 표시자로 사전 서명된 URL을 사용하려면 다음 예시 템플릿을 사용하세요.

       ```
           ${aws:iot:s3-presigned-url:${aws:iot:code-sign-signature:<S3 URL>}
       ```
   + **From template**(템플릿에서): 작업 문서와 작업 구성이 포함된 작업 템플릿. 작업 템플릿은 생성한 사용자 지정 작업 템플릿 또는 AWS 관리형 템플릿일 수 있습니다.

      디바이스 재부팅과 같이 자주 사용되는 원격 작업을 수행하기 위한 작업을 생성하는 경우 AWS 관리형 템플릿을 사용할 수 있습니다. 이러한 템플릿은 이미 사용하도록 미리 구성되어 있습니다. 자세한 내용은 [사용자 정의 작업 템플릿 생성](job-templates-console.md#job-templates-console-create) 및 [관리형 템플릿에서 사용자 정의 작업 템플릿 생성](job-template-manage-console-create.md#job-template-manage-create-template) 단원을 참조하세요.

1. **Job configuration**(작업 구성) 페이지의 **Job configuration**(작업 구성) 대화 상자에서 다음 작업 유형 중 하나를 선택합니다.
   + **스냅샷 작업**: 스냅샷 작업은 대상 디바이스 및 그룹에서 실행이 완료되면 완료됩니다.
   + **연속 작업**: 연속 작업은 사물 그룹에 적용되며 이후에 지정된 대상 그룹에 추가하는 모든 디바이스에서 실행됩니다.

1. **Additional configurations - optional**(추가 구성 - 선택 사항) 대화 상자에서 다음과 같은 선택적 작업 구성을 검토하고 적절히 선택합니다.
   + **Rollout configuration**(롤아웃 구성)
   + **Scheduling configuration**(예약 구성)
   + **Job executions timeout configuration**(작업 실행 제한 시간 구성)
   + **Job executions retry configuration - new**(작업 실행 재시도 구성 - 신규)
   + **Abort configuration**(중단 구성)

   작업 구성에 대한 추가 정보는 다음 섹션을 참조하세요.
   + [작업 롤아웃, 예약 및 중단 구성](jobs-configurations-details.md#job-rollout-abort-scheduling)
   + [작업 실행 제한 시간 및 재시도 구성](jobs-configurations-details.md#job-timeout-retry)

   모든 작업 선택 사항을 검토한 다음 **Submit**(제출)을 선택하여 작업을 생성합니다.

## 를 사용하여 작업 보기 및 관리 AWS Management Console
<a name="view-manage-job-console"></a>

작업을 생성하면 콘솔에서는 JSON 서명을 생성해 작업 문서에 배치합니다. [AWS IoT 콘솔](https://console.aws.amazon.com/iot/)을 사용하여 상태를 보거나 작업을 취소 또는 삭제할 수 있습니다.

생성한 작업을 선택하면 다음을 찾을 수 있습니다.
+ 작업 이름, 설명, 유형, 작업 생성 시간, 마지막 업데이트 시간, 예상 시작 시간과 같은 일반 작업 세부 정보입니다.
+ 지정한 모든 작업 구성 및 해당 상태입니다.
+ 작업 문서입니다.
+ 지정한 작업 실행 및 선택적 태그입니다.

작업을 관리하려면 [콘솔의 작업 허브](https://console.aws.amazon.com/iot/home#/jobhub)로 이동하여 작업을 편집, 삭제 또는 취소할지 여부를 선택합니다.

# 를 사용하여 작업 생성 및 관리 AWS CLI
<a name="manage-job-cli"></a>

이 단원에서는 작업을 생성하고 관리하는 방법을 설명합니다.

## 작업 생성
<a name="create-job"></a>

 AWS IoT 작업을 생성하려면 **CreateJob** 명령을 사용합니다. 생성된 작업은 지정한 대상(사물 또는 사물 그룹)에서 실행될 때까지 대기합니다. AWS IoT 작업을 생성하려면 요청 본문에 포함하거나 Amazon S3 문서에 대한 링크로 포함할 수 있는 작업 문서가 필요합니다. 작업에 미리 서명된 Amazon S3 URLs을 사용하여 파일 다운로드가 포함된 경우 파일을 다운로드할 권한이 있고 AWS IoT 작업 서비스에 역할을 수임할 권한을 부여하는 IAM 역할 Amazon 리소스 이름(ARN)이 필요합니다.

API 명령 또는를 사용하여 날짜 및 시간을 입력할 때 구문에 대한 자세한 내용은 [타임스탬프](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-types.html#parameter-type-timestamp)를 AWS CLI참조하세요.

### 작업을 사용한 코드 서명
<a name="code-signing-with-jobs"></a>

에 코드 서명을 사용하는 경우 코드 서명 작업을 시작하고 작업 문서에 출력을 포함해야 AWS IoT합니다. 이렇게 하면 **코드 서명 프로필**을 사용하여 서명된 코드 파일 경로로 대체되기 전까지 자리 표시자로 필요한 작업 문서의 코드 서명 자리 표시자가 대체됩니다. 코드 서명 자리 표시자는 다음과 같이 표시됩니다.

```
    ${aws:iot:code-sign-signature:s3://region.bucket/code-file@code-file-version-id}
```

[start-signing-job](https://docs.aws.amazon.com/signer/latest/developerguide/api-startsigningjob.html) 명령을 사용하여 코드 서명 작업을 생성합니다. `start-signing-job`은 작업 ID를 반환합니다. 서명이 저장되는 Amazon S3 위치를 가져오려면 **describe-signing-job** 명령을 사용합니다. 그런 다음 Amazon S3에서 서명을 다운로드할 수 있습니다. 코드 서명 작업에 대한 자세한 내용은 [AWS IoT의 코드 서명](https://docs.aws.amazon.com/signer/latest/developerguide/Welcome.html) 단원을 참조하세요.

작업 문서에서는 **start-signing-job** 명령을 사용하여 Amazon S3 버킷에 배치된 JSON 서명 출력과 코드 파일에 대한 사전 서명된 URL 자리 표시자가 포함되어 있어야 합니다.

```
{
    "presign": "${aws:iot:s3-presigned-url:https://s3.region.amazonaws.com/bucket/image}",
}
```

### 작업 문서로 작업 생성
<a name="create-job-with-document"></a>

다음 명령은 Amazon S3 버킷(*jobBucket*)에 저장된 작업 문서(*job-document.json*)와 Amazon S3에서 파일을 다운로드할 수 있는 권한이 있는 역할(*S3DownloadRole*)을 사용하여 작업을 생성하는 방법을 보여줍니다.

```
aws iot create-job  \
      --job-id 010  \
      --targets arn:aws:iot:us-east-1:123456789012:thing/thingOne  \
      --document-source https://s3.amazonaws.com/amzn-s3-demo-bucket/job-document.json  \
      --timeout-config inProgressTimeoutInMinutes=100 \
      --job-executions-rollout-config "{ \"exponentialRate\": { \"baseRatePerMinute\": 50, \"incrementFactor\": 2, \"rateIncreaseCriteria\": { \"numberOfNotifiedThings\": 1000, \"numberOfSucceededThings\": 1000}}, \"maximumPerMinute\": 1000}" \
      --abort-config "{ \"criteriaList\": [ { \"action\": \"CANCEL\", \"failureType\": \"FAILED\", \"minNumberOfExecutedThings\": 100, \"thresholdPercentage\": 20}, { \"action\": \"CANCEL\", \"failureType\": \"TIMED_OUT\", \"minNumberOfExecutedThings\": 200, \"thresholdPercentage\": 50}]}" \          
      --presigned-url-config "{\"roleArn\":\"arn:aws:iam::123456789012:role/S3DownloadRole\", \"expiresInSec\":3600}"
```

작업은 *thingOne*에서 실행됩니다.

선택 사항인 `timeout-config` 파라미터는 각 디바이스가 작업 실행을 완료한 시간을 지정합니다. 타이머는 작업 실행 상태가 `IN_PROGRESS`에 설정되면 시작합니다. 시간이 만료되기 전에 작업 실행 상태가 다른 터미널 상태로 설정되어 있지 않으면 `TIMED_OUT`으로 자동으로 설정됩니다.

진행 중 타이머는 업데이트될 수 없으며 이 작업에 대한 모든 작업 실행에 적용됩니다. 작업 실행이이 간격보다 오래 `IN_PROGRESS` 상태로 유지될 때마다 실패하고 터미널 `TIMED_OUT` 상태로 전환됩니다. AWS IoT 또한는 MQTT 알림을 게시합니다.

작업 롤아웃 및 중단에 대한 구성 생성에 대한 자세한 내용은 [작업 롤아웃 및 중단 구성](job-rollout-abort.html)을 참조하세요.

**참고**  
Amazon S3 파일로 지정되는 작업 문서는 작업을 생성할 때 가져오게 됩니다. 작업 문서를 생성한 후 작업 문서의 원본으로 사용한 Amazon S3 파일의 내용을 변경해도 작업 대상으로 전송되는 내용은 변경되지 않습니다.

## 작업 업데이트
<a name="update-job"></a>

작업은 업데이트하려면 **UpdateJob** 명령을 사용합니다. 작업의 `description`, `presignedUrlConfig`, `jobExecutionsRolloutConfig`, `abortConfig` 및 `timeoutConfig` 필드를 업데이트할 수 있습니다.

```
aws iot update-job  \
  --job-id 010  \
  --description "updated description" \
  --timeout-config inProgressTimeoutInMinutes=100 \
  --job-executions-rollout-config "{ \"exponentialRate\": { \"baseRatePerMinute\": 50, \"incrementFactor\": 2, \"rateIncreaseCriteria\": { \"numberOfNotifiedThings\": 1000, \"numberOfSucceededThings\": 1000}, \"maximumPerMinute\": 1000}}" \
  --abort-config "{ \"criteriaList\": [ { \"action\": \"CANCEL\", \"failureType\": \"FAILED\", \"minNumberOfExecutedThings\": 100, \"thresholdPercentage\": 20}, { \"action\": \"CANCEL\", \"failureType\": \"TIMED_OUT\", \"minNumberOfExecutedThings\": 200, \"thresholdPercentage\": 50}]}" \          
  --presigned-url-config "{\"roleArn\":\"arn:aws:iam::123456789012:role/S3DownloadRole\", \"expiresInSec\":3600}"
```

자세한 내용은 [작업 롤아웃 및 중단 구성](job-rollout-abort.html)을 참조하세요.

## 작업 취소
<a name="cancel-job"></a>

작업을 취소하려면 **CancelJob** 명령을 사용합니다. 작업을 취소하면 작업에 대한 새 작업 실행 AWS IoT 롤아웃이 중지됩니다. 또한 `QUEUED` 상태인 모든 작업 실행을 취소합니다. 디바이스가 이미 작업을 완료했기 때문에 터미널 상태의 모든 작업 실행을 그대로 AWS IoT 유지합니다. 작업 실행이 `IN_PROGRESS` 상태인 경우에도 사용자가 선택적 `--force` 파라미터를 사용하지 않는 한 IoT가 해당 작업 실행을 그대로 둡니다.

다음 명령은 ID가 010인 작업을 취소하는 방법을 보여줍니다.

```
aws iot cancel-job --job-id 010
```

이 명령은 다음 출력을 표시합니다.

```
{
    "jobArn": "string",
    "jobId": "string",
    "description": "string"
}
```

작업을 취소하면 `QUEUED` 상태인 작업 실행이 취소됩니다. 선택적 `--force` 파라미터를 지정하는 경우에만 `IN_PROGRESS` 상태의 작업 실행이 취소됩니다. 종료 상태인 작업 실행은 취소되지 않습니다.

**주의**  
(`--force` 파라미터를 설정하여) `IN_PROGRESS` 상태의 작업을 취소하면 진행 중인 모든 작업 실행이 취소되고 해당 작업을 실행하고 있는 디바이스가 작업의 실행 상태를 업데이트할 수 없게 됩니다. 주의를 기울여 취소된 작업을 실행하는 각 디바이스가 유효한 상태로 복구될 수 있는지 확인하세요.

취소된 작업 또는 작업 실행 중 하나의 상태는 최종적으로 일관됩니다.는 해당 작업에 대한 새 작업 실행 및 `QUEUED` 작업 실행 예약을 가능한 한 빨리 디바이스로 AWS IoT 중지합니다. 작업 실행 상태가 `CANCELED`로 바뀌려면 디바이스 수와 기타 요인에 따라 시간이 걸릴 수 있습니다.

`AbortConfig` 객체로 정의한 기준을 충족했기 때문에 작업이 취소된 경우 서비스에서는 `comment` 및 `reasonCode` 필드에 대해 자동으로 채워지는 값을 추가합니다. 작업을 사용자가 취소한 경우 `reasonCode`에 대한 값을 직접 생성할 수 있습니다.

## 작업 실행 취소
<a name="cancel-job-execution"></a>

디바이스의 작업 실행을 취소하려면 **CancelJobExecution** 명령을 사용합니다. 이 명령은 `QUEUED` 상태인 작업 실행을 취소합니다. 진행 중인 작업 실행을 취소하려면 `--force` 파라미터를 사용해야 합니다.

다음 명령은 `myThing`에서 실행 중인 작업 010에서 작업 실행을 취소하는 방법을 보여줍니다.

```
aws iot cancel-job-execution --job-id 010 --thing-name myThing
```

명령이 아무런 출력도 표시하지 않습니다.

`QUEUED` 상태인 작업 실행이 취소됩니다. 선택적 `--force` 파라미터를 지정하는 경우에만 `IN_PROGRESS` 상태의 작업 실행이 취소됩니다. 최종 상태인 작업 실행은 취소할 수 없습니다.

**주의**  
`IN_PROGRESS` 상태인 작업 실행을 취소하면 디바이스가 그 작업 실행의 상태를 업데이트할 수 없습니다. 주의를 기울여 디바이스가 유효한 상태로 복구될 수 있는지 확인하세요.

작업 실행이 최종 상태이거나 작업 실행이 `IN_PROGRESS` 상태이고 `--force` 파라미터를 `true`로 설정하지 않은 경우 이 명령에서 `InvalidStateTransitionException`이 발생합니다.

취소된 작업 실행의 상태가 최종적으로 일관됩니다. 작업 실행 상태가 `CANCELED`로 바뀌려면 기타 요인에 따라 시간이 걸릴 수 있습니다.

## 작업 삭제
<a name="delete-job"></a>

작업과 해당 작업 실행을 삭제하려면 **DeleteJob** 명령을 사용합니다. 기본적으로 최종 상태(`SUCCEEDED` 또는 `CANCELED`)인 작업만 삭제할 수 있습니다. 그렇지 않으면 예외가 발생합니다. `force` 파라미터가 `true`로 설정되어 있는 경우에만 `IN_PROGRESS` 상태인 작업을 삭제할 수 있습니다.

작업을 삭제하려면 다음 명령을 실행합니다.

```
aws iot delete-job --job-id 010 --force|--no-force
```

명령이 아무런 출력도 표시하지 않습니다.

**주의**  
`IN_PROGRESS` 상태인 작업을 삭제하면 해당 작업을 배포 중인 디바이스에서 작업 정보에 액세스할 수 없거나 작업 실행 상태를 업데이트할 수 없습니다. 주의를 기울여 삭제된 작업을 배포하는 각 디바이스가 유효한 상태로 복구될 수 있는지 확인하세요.

작업을 삭제하려면 해당 작업에 대해 생성된 작업 실행의 수와 기타 요인에 따라 시간이 걸릴 수 있습니다. 작업이 삭제되는 동안 그 작업의 상태는 `DELETION_IN_PROGRESS`로 표시됩니다. 이미 `DELETION_IN_PROGRESS` 상태의 작업을 삭제하거나 취소하려고 하면 오류가 발생합니다.

동시에 10개 작업만 `DELETION_IN_PROGRESS` 상태일 수 있습니다. 그렇지 않으면 `LimitExceededException`이 발생합니다.

## 작업 문서 가져오기
<a name="get-job-document"></a>

작업에 대한 작업 문서를 검색하려면 **GetJobDocument** 명령을 사용합니다. 이 작업 문서는 원격 작업의 설명이므로 디바이스에서 실행됩니다.

작업 문서를 가져오려면 다음 명령을 실행합니다.

```
aws iot get-job-document --job-id 010
```

위의 명령은 아래와 같이 지정한 작업의 작업 문서를 반환합니다.

```
{
    "document": "{\n\t\"operation\":\"install\",\n\t\"url\":\"http://amazon.com/firmWareUpate-01\",\n\t\"data\":\"${aws:iot:s3-presigned-url:https://s3.amazonaws.com/amzn-s3-demo-bucket/datafile}\"\n}"
}
```

**참고**  
이 명령을 사용하여 작업 문서를 가져올 때는 미리 서명된 Amazon S3 URL이 자리 표시자 URL을 대체하지 않습니다. 디바이스가 [GetPendingJobExecutions](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_GetPendingJobExecutions.html) API 작업을 호출하면 자리 표시자 URL이 작업 문서에서 미리 서명된 Amazon S3 URL로 대체됩니다.

## 작업 나열
<a name="list-jobs"></a>

의 모든 작업 목록을 가져오려면 **ListJobs** 명령을 AWS 계정사용합니다. 작업 데이터 및 작업 실행 데이터는 [제한된 시간](https://docs.aws.amazon.com//general/latest/gr/iot_device_management.html#job-limits)동안 보존됩니다. 다음 명령을 실행하여의 모든 작업을 나열합니다. AWS 계정

```
aws iot list-jobs
```

위 명령은 아래와 같이 계정의 모든 작업을 작업 상태에 따라 정렬하여 반환합니다.

```
{
    "jobs": [
        {
            "status": "IN_PROGRESS", 
            "lastUpdatedAt": 1486687079.743, 
            "jobArn": "arn:aws:iot:us-east-1:123456789012:job/013", 
            "createdAt": 1486687079.743, 
            "targetSelection": "SNAPSHOT",
            "jobId": "013"
        }, 
        {
            "status": "SUCCEEDED", 
            "lastUpdatedAt": 1486685868.444, 
            "jobArn": "arn:aws:iot:us-east-1:123456789012:job/012", 
            "createdAt": 1486685868.444, 
            "completedAt": 148668789.690,
            "targetSelection": "SNAPSHOT",
            "jobId": "012"
        }, 
        {
            "status": "CANCELED", 
            "lastUpdatedAt": 1486678850.575, 
            "jobArn": "arn:aws:iot:us-east-1:123456789012:job/011", 
            "createdAt": 1486678850.575, 
            "targetSelection": "SNAPSHOT",
            "jobId": "011"
        }
    ]
}
```

## 작업 설명
<a name="describe-job"></a>

작업의 상태를 가져오려면 **DescribeJob** 명령을 실행합니다. 다음 명령은 작업을 설명하는 방법을 보여줍니다.

```
$ aws iot describe-job --job-id 010
```

위의 명령은 특정 작업의 상태를 반환합니다. 다음 예를 참조하세요.

```
{
    "documentSource": "https://s3.amazonaws.com/amzn-s3-demo-bucket/job-document.json", 
    "job": {
        "status": "IN_PROGRESS", 
        "jobArn": "arn:aws:iot:us-east-1:123456789012:job/010", 
        "targets": [
            "arn:aws:iot:us-east-1:123456789012:thing/myThing"
        ], 
        "jobProcessDetails": {
            "numberOfCanceledThings": 0, 
            "numberOfFailedThings": 0,
            "numberOfInProgressThings": 0,
            "numberOfQueuedThings": 0,
            "numberOfRejectedThings": 0,
            "numberOfRemovedThings": 0,
            "numberOfSucceededThings": 0,
            "numberOfTimedOutThings": 0,
            "processingTargets": [
                arn:aws:iot:us-east-1:123456789012:thing/thingOne, 
                arn:aws:iot:us-east-1:123456789012:thinggroup/thinggroupOne, 
                arn:aws:iot:us-east-1:123456789012:thing/thingTwo, 
                arn:aws:iot:us-east-1:123456789012:thinggroup/thinggroupTwo 
            ]
        }, 
        "presignedUrlConfig": {
            "expiresInSec": 60, 
            "roleArn": "arn:aws:iam::123456789012:role/S3DownloadRole"
        }, 
        "jobId": "010", 
        "lastUpdatedAt": 1486593195.006, 
        "createdAt": 1486593195.006,
        "targetSelection": "SNAPSHOT",
        "jobExecutionsRolloutConfig": { 
            "exponentialRate": { 
                "baseRatePerMinute": integer,
                "incrementFactor": integer,
                "rateIncreaseCriteria": { 
                    "numberOfNotifiedThings": integer, // Set one or the other
                    "numberOfSucceededThings": integer // of these two values.
                },
            "maximumPerMinute": integer
         }
        },    
        "abortConfig": { 
            "criteriaList": [ 
                { 
                    "action": "string",
                    "failureType": "string",
                    "minNumberOfExecutedThings": integer,
                    "thresholdPercentage": integer
                }
            ]
        },
        "timeoutConfig": { 
           "inProgressTimeoutInMinutes": number
          }
    }
}
```

## 작업 실행 목록 조회
<a name="list-job-executions-for-job"></a>

특정 디바이스에서 실행되는 작업이 작업 실행 객체로 표현됩니다. 임의 작업에 대한 모든 작업 실행을 나열할 때는 **ListJobExecutionsForJob** 명령을 실행합니다. 다음 예에서는 작업에 대한 실행을 나열하는 방법을 보여 줍니다.

```
aws iot list-job-executions-for-job --job-id 010
```

위의 명령은 아래와 같이 작업 실행 목록을 반환합니다.

```
{
    "executionSummaries": [
    {
        "thingArn": "arn:aws:iot:us-east-1:123456789012:thing/thingOne", 
        "jobExecutionSummary": {
            "status": "QUEUED", 
            "lastUpdatedAt": 1486593196.378, 
            "queuedAt": 1486593196.378,
            "executionNumber": 1234567890
        }
    },
    {
        "thingArn": "arn:aws:iot:us-east-1:123456789012:thing/thingTwo", 
        "jobExecutionSummary": {
            "status": "IN_PROGRESS", 
            "lastUpdatedAt": 1486593345.659, 
            "queuedAt": 1486593196.378,
            "startedAt": 1486593345.659,
            "executionNumber": 4567890123
        }
    }
    ]
}
```

## 사물에 대한 작업 실행 목록 조회
<a name="list-job-executions-for-thing"></a>

임의 사물에 대한 모든 작업 실행을 나열할 때는 **ListJobExecutionsForThing** 명령을 실행합니다. 다음 예에서는 사물에 대한 작업 실행을 나열하는 방법을 보여 줍니다.

```
aws iot list-job-executions-for-thing --thing-name thingOne
```

위의 명령은 아래와 같이 지정된 사물에서 실행 중이거나 실행된 작업 실행 목록을 반환합니다.

```
{
    "executionSummaries": [
    {
        "jobExecutionSummary": {
            "status": "QUEUED", 
            "lastUpdatedAt": 1486687082.071, 
            "queuedAt": 1486687082.071,
            "executionNumber": 9876543210
        }, 
        "jobId": "013"
    }, 
    {
        "jobExecutionSummary": {
            "status": "IN_PROGRESS",
            "startAt": 1486685870.729, 
            "lastUpdatedAt": 1486685870.729, 
            "queuedAt": 1486685870.729,
            "executionNumber": 1357924680
        }, 
        "jobId": "012"
    }, 
    {
        "jobExecutionSummary": {
            "status": "SUCCEEDED", 
            "startAt": 1486678853.415,
            "lastUpdatedAt": 1486678853.415, 
            "queuedAt": 1486678853.415,
            "executionNumber": 4357680912
        }, 
        "jobId": "011"
    }, 
    {
        "jobExecutionSummary": {
            "status": "CANCELED",
            "startAt": 1486593196.378,
            "lastUpdatedAt": 1486593196.378, 
            "queuedAt": 1486593196.378,
            "executionNumber": 2143174250
        }, 
        "jobId": "010"
    }
    ]
}
```

## 작업 실행 설명
<a name="describe-job-execution"></a>

작업 실행의 상태를 가져올 때는 **DescribeJobExecution** 명령을 실행합니다. 원하는 작업 실행을 찾으려면 작업 ID와 사물 이름, 그리고 필요한 경우 실행 번호를 지정해야 합니다. 다음은 작업 실행을 설명하는 방법을 보여줍니다.

```
aws iot describe-job-execution --job-id 017 --thing-name thingOne
```

위의 명령은 [https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecution.html)을 반환합니다. 다음 예를 참조하세요.

```
{
    "execution": {
        "jobId": "017", 
        "executionNumber": 4516820379,
        "thingArn": "arn:aws:iot:us-east-1:123456789012:thing/thingOne", 
        "versionNumber": 123,
        "createdAt": 1489084805.285, 
        "lastUpdatedAt": 1489086279.937, 
        "startedAt": 1489086279.937, 
        "status": "IN_PROGRESS",
        "approximateSecondsBeforeTimedOut": 100,
        "statusDetails": {
            "status": "IN_PROGRESS", 
            "detailsMap": {
                "percentComplete": "10"
            }
        }
    }
}
```

## 작업 실행 삭제
<a name="delete-job-execution"></a>

작업 실행을 삭제하려면 **DeleteJobExecution** 명령을 실행합니다. 작업 실행을 찾으려면 작업 ID, 사물 이름 및 실행 번호를 지정해야 합니다. 다음은 작업 실행을 삭제하는 방법을 보여줍니다.

```
aws iot delete-job-execution --job-id 017 --thing-name thingOne --execution-number 1234567890 --force|--no-force
```

명령이 아무런 출력도 표시하지 않습니다.

기본적으로 작업 실행의 상태는 `QUEUED` 또는 터미널 상태(`SUCCEEDED`, `FAILED`, `REJECTED`, `TIMED_OUT`, `REMOVED` 또는 `CANCELED`)여야 합니다. 그렇지 않으면 오류가 발생합니다. `IN_PROGRESS` 상태인 작업을 삭제하기 위해 `force` 파라미터를 `true`로 설정할 수 있습니다.

**주의**  
`IN_PROGRESS` 상태인 작업 실행을 삭제하면 해당 작업을 실행 중인 디바이스에서 작업 정보에 액세스할 수 없거나 작업 실행 상태를 업데이트할 수 없습니다. 주의를 기울여 디바이스가 유효한 상태로 복구될 수 있는지 확인하세요.

# 작업 템플릿
<a name="job-templates"></a>

작업 템플릿을 사용하여 여러 대상 디바이스 집합에 배포할 수 있는 작업을 미리 구성합니다. 재부팅 또는 애플리케이션 설치와 같이 자주 수행되는 원격 작업을 디바이스에 배포하기 위해 템플릿을 사용하여 표준 구성을 정의할 수 있습니다. 보안 패치 및 버그 수정 배포와 같은 작업을 수행하려는 경우 기존 작업에서 템플릿을 생성할 수 있습니다.

작업 템플릿을 생성할 때 다음 추가 구성과 리소스를 지정합니다.
+ 작업 속성
+ 작업 문서 및 대상
+ 롤아웃, 예약 및 취소 기준
+ 시간 초과 및 재시도 기준

## 사용자 지정 및 AWS 관리형 템플릿
<a name="job-templates-types"></a>

수행하려는 원격 작업에 따라 사용자 지정 작업 템플릿을 생성하거나 AWS 관리형 템플릿을 사용할 수 있습니다. 사용자 지정 작업 템플릿을 사용하여 사용자 지정 작업 문서를 제공하고 디바이스에 배포할 재사용 가능한 작업을 생성합니다. AWS 관리형 템플릿은 일반적으로 수행되는 작업을 위해 AWS IoT 작업에서 제공하는 작업 템플릿입니다. 이러한 템플릿에는 일부 원격 작업에 대해 미리 정의된 작업 문서가 있으므로 고유한 작업 문서를 생성할 필요가 없습니다. 관리형 템플릿을 사용하면 재사용 가능한 작업을 생성하여 디바이스에서 더 빠르게 시작할 수 있습니다.

**Topics**
+ [사용자 지정 및 AWS 관리형 템플릿](#job-templates-types)
+ [AWS 관리형 템플릿을 사용하여 일반적인 원격 작업 배포](job-templates-managed.md)
+ [사용자 정의 작업 템플릿 생성](job-templates-create.md)

# AWS 관리형 템플릿을 사용하여 일반적인 원격 작업 배포
<a name="job-templates-managed"></a>

AWS 관리형 템플릿은에서 제공하는 작업 템플릿입니다 AWS. 재부팅, 파일 다운로드, 디바이스에 애플리케이션 설치와 같이 자주 수행되는 원격 작업에 사용됩니다. 이러한 템플릿에는 각 원격 작업에 대해 미리 정의된 작업 문서가 있으므로 고유한 작업 문서를 생성할 필요가 없습니다.

미리 정의된 구성 집합에서 선택하고 추가 코드를 작성하지 않고도 이러한 템플릿을 사용하여 작업을 생성할 수 있습니다. 관리형 템플릿을 사용하여 플릿에 배포된 작업 문서를 볼 수 있습니다. 이러한 템플릿으로 작업을 생성하고 원격 작업에 다시 사용할 수 있는 사용자 정의 작업 템플릿을 생성할 수 있습니다.

## 관리형 템플릿에는 무엇이 포함되어 있나요?
<a name="job-template-managed-contains"></a>

각 AWS 관리형 템플릿에는 다음이 포함됩니다.
+ 작업 문서에서 명령을 실행할 환경.
+ 작업 이름과 해당 파라미터를 지정하는 작업 문서입니다. 예를 들어 **파일 다운로드(Download file)** 템플릿을 사용하는 경우 작업 이름은 *파일 다운로드(Download file)*이고 파라미터는 다음과 같을 수 있습니다.
  + 디바이스에 다운로드하려는 파일의 URL입니다. 이 URL은 인터넷 리소스이거나 퍼블릭 또는 사전 서명된 Amazon Simple Storage Service(S3) URL일 수 있습니다.
  + 다운로드한 파일을 저장할 디바이스의 로컬 파일 경로입니다.

  작업 문서와 해당 파라미터에 대한 자세한 내용은 [관리형 템플릿 원격 작업 및 작업 문서](#job-template-manage-actions) 섹션을 참조하세요.

## 사전 조건
<a name="job-template-managed-prereq"></a>

디바이스에서 관리형 템플릿 작업 문서에 지정된 원격 작업을 디바이스에서 실행하려면 다음을 수행해야 합니다.
+ **디바이스에 특정 소프트웨어 설치**

  자체 디바이스 소프트웨어 및 작업 핸들러 또는 AWS IoT Device Client를 사용합니다. 비즈니스 사례에 따라 서로 다른 기능을 수행하도록 둘 다 실행할 수도 있습니다.
  +  **자체 디바이스 소프트웨어 및 작업 핸들러 사용**

     AWS IoT Device SDK 와 원격 작업을 지원하는 핸들러 라이브러리를 사용하여 디바이스에 대한 고유한 코드를 작성할 수 있습니다. 작업을 배포하고 실행하려면 디바이스 에이전트 라이브러리가 올바르게 설치되었고 이러한 디바이스에서 실행 중인지 확인합니다.

    원격 작업을 지원하는 자체 핸들러를 사용하도록 선택할 수도 있습니다. 자세한 내용은 AWS IoT Device Client GitHub 리포지토리의 [샘플 작업 핸들러](https://github.com/awslabs/aws-iot-device-client/tree/main/sample-job-handlers)를 참조하세요.
  +  ** AWS IoT 디바이스 클라이언트 사용**

    또는 기본적으로 콘솔에서 직접 모든 관리형 템플릿 사용을 지원하므로 디바이스에 AWS IoT Device Client를 설치하고 실행할 수 있습니다.

    Device Client는 임베디드 Linux 기반 IoT 디바이스에 컴파일하고 설치할 수 있는 C\$1\$1로 작성된 오픈 소스 소프트웨어입니다. Device Client에는 *기본 클라이언트*와 개별 *클라이언트 측 기능*이 있습니다. 기본 클라이언트는 MQTT 프로토콜을 AWS IoT 통해와 연결을 설정하고 다양한 클라이언트 측 기능과 연결할 수 있습니다.

    디바이스에서 원격 작업을 수행하려면 Device Client의 *클라이언트 측 작업 기능*을 사용합니다. 이 기능에는 작업 문서를 수신하는 파서와 작업 문서에 지정된 원격 작업을 구현하는 작업 핸들러가 포함되어 있습니다. Device Client와 해당 기능에 대한 자세한 내용은 [AWS IoT Device Client](https://github.com/awslabs/aws-iot-device-client#readme)를 참조하세요.

    디바이스에서 실행할 때 Device Client는 작업 문서를 수신하고 문서에서 명령을 실행하는 데 사용하는 플랫폼별 구현을 갖습니다. Device Client 설정 및 작업 기능에 대한 자세한 내용은 [AWS IoT 자습서](https://docs.aws.amazon.com/iot/latest/developerguide/iot-tutorials.html)를 참조하세요.
+  **지원되는 환경 사용**

  각 관리형 템플릿에 대해 원격 작업을 실행하는 데 사용할 수 있는 환경에 대한 정보를 찾을 수 있습니다. 템플릿에 지정된 대로 지원되는 Linux 환경에서 템플릿을 사용하는 것이 좋습니다. AWS IoT Device Client는 Debian 및 Ubuntu와 같은 일반적인 마이크로프로세서 및 Linux 환경을 지원하므로 관리형 템플릿 원격 작업을 실행하려면 Device Client를 사용합니다.

## 관리형 템플릿 원격 작업 및 작업 문서
<a name="job-template-manage-actions"></a>

다음 섹션에서는 AWS IoT 작업에 대한 다양한 AWS 관리형 템플릿을 나열하고 디바이스에서 수행할 수 있는 원격 작업을 설명합니다. 아래 섹션에는 작업 문서에 대한 정보와 각 원격 작업의 작업 문서 파라미터에 대한 정보가 있습니다. 디바이스 측 소프트웨어는 템플릿 이름과 파라미터를 사용하여 원격 작업을 수행합니다.

AWS 관리형 템플릿은 템플릿을 사용하여 작업을 생성할 때 값을 지정하는 입력 파라미터를 수락합니다. 모든 관리형 템플릿에는 `runAsUser` 및 `pathToHandler`의 두 가지 선택적 파라미터가 공통적으로 있습니다. `AWS-Reboot` 템플릿을 제외한 나머지 템플릿을 사용하려면 템플릿을 사용하여 작업을 생성할 때 값을 지정해야 하는 추가 입력 파라미터가 필요합니다. 이 필수 입력 파라미터는 사용자가 선택하는 템플릿에 따라 달라집니다. 예를 들어, `AWS-Download-File` 템플릿을 선택하는 경우 설치할 패키지 목록 및 파일을 다운로드할 URL을 지정해야 합니다.

 AWS IoT 콘솔 또는 AWS Command Line Interface (AWS CLI)를 사용하여 관리형 템플릿을 사용하는 작업을 생성할 때 입력 파라미터의 값을 지정합니다. CLI를 사용할 때는 `document-parameters` 객체를 사용하여 이러한 값을 제공합니다. 자세한 내용은 [documentParameters](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html#iot-CreateJob-request-documentParameters)를 참조하세요.

**참고**  
 AWS 관리형 템플릿에서 작업을 생성할 때만 `document-parameters`를 사용합니다. 이 파라미터는 사용자 지정 작업 템플릿과 함께 사용하거나 이러한 템플릿에서 작업을 생성하는 데 사용할 수 없습니다.

다음은 일반적인 선택적 입력 파라미터에 대한 설명을 보여줍니다. 다음 섹션에서 각 관리형 템플릿에 필요한 다른 입력 파라미터에 대한 설명을 확인할 수 있습니다.

`runAsUser`  
이 파라미터는 작업 핸들러를 다른 사용자로 실행할지 여부를 지정합니다. 작업 생성 중 지정하지 않으면 작업 핸들러는 Device Client와 동일한 사용자로 실행됩니다. 작업 핸들러를 다른 사용자로 실행할 때 256자 이하의 문자열 값을 지정합니다.

`pathToHandler`  
디바이스에서 실행 중인 작업 핸들러의 경로입니다. 작업 생성 중 지정하지 않으면 Device Client는 현재 작업 디렉터리를 사용합니다.

다음은 다양한 원격 작업, 작업 문서 및 수락하는 파라미터를 보여줍니다. 이러한 모든 템플릿은 디바이스에서 원격 작업을 실행하기 위한 Linux 환경을 지원합니다.

### AWS–Download–File
<a name="download-managed-template"></a>

**템플릿 이름**  
`AWS–Download–File`

**템플릿 설명**  
파일을 다운로드하기 AWS 위해에서 제공하는 관리형 템플릿입니다.

**입력 파라미터**  
이 템플릿에는 다음과 같은 필수 파라미터가 있습니다. 선택적 파라미터 `runAsUser` 및 `pathToHandler`를 지정할 수도 있습니다.

`downloadUrl`  
파일을 다운로드할 URL입니다. 이 URL은 인터넷 리소스, 공개적으로 액세스할 수 있는 Amazon S3의 객체 또는 미리 서명된 URL을 사용하여 디바이스에서만 액세스할 수 있는 Amazon S3의 객체일 수 있습니다. 미리 서명된 URL 사용 및 권한 부여에 대한 자세한 내용은 [미리 서명된 URL](create-manage-jobs.md#create-manage-jobs-presigned-URLs) 섹션을 참조하세요.

`filePath`  
다운로드한 파일을 저장할 디바이스의 위치를 보여주는 로컬 파일 경로입니다.

**디바이스 동작**  
디바이스는 지정된 위치에서 파일을 다운로드하고 다운로드가 완료되었는지 확인한 후 로컬에 저장합니다.

**작업 문서**  
다음은 작업 문서와 최신 버전을 보여줍니다. 템플릿은 작업 핸들러에 대한 경로와 작업 핸들러가 파일을 다운로드하기 위해 실행해야 하는 셸 스크립트(`download-file.sh`)를 보여줍니다. 또한 필수 파라미터 `downloadUrl` 및 `filePath`를 보여줍니다.

```
{
  "version": "1.0",
  "steps": [
    {
      "action": {
        "name": "Download-File",
        "type": "runHandler",
        "input": {
          "handler": "download-file.sh",
          "args": [
            "${aws:iot:parameter:downloadUrl}",
            "${aws:iot:parameter:filePath}"
          ],
          "path": "${aws:iot:parameter:pathToHandler}"
        },
        "runAsUser": "${aws:iot:parameter:runAsUser}"
      }
    }
  ]
}
```

### AWS–Install–Application
<a name="install-managed-template"></a>

**템플릿 이름**  
`AWS–Install–Application`

**템플릿 설명**  
하나 이상의 애플리케이션을 설치하기 AWS 위해에서 제공하는 관리형 템플릿입니다.

**입력 파라미터**  
이 템플릿에는 다음과 같은 필수 파라미터 `packages`가 있습니다. 선택적 파라미터 `runAsUser` 및 `pathToHandler`를 지정할 수도 있습니다.

`packages`

설치할 하나 이상의 애플리케이션의 목록(공백으로 구분)입니다.

**디바이스 동작**  
디바이스가 작업 문서에 지정된 대로 애플리케이션을 설치합니다.

**작업 문서**  
다음은 작업 문서와 최신 버전을 보여줍니다. 템플릿은 작업 핸들러에 대한 경로와 작업 핸들러가 파일을 다운로드하기 위해 실행해야 하는 셸 스크립트(`install-packages.sh`)를 보여줍니다. 또한 필수 파라미터 `packages`를 보여줍니다.

```
{
  "version": "1.0",
  "steps": [
    {
      "action": {
        "name": "Install-Application",
        "type": "runHandler",
        "input": {
          "handler": "install-packages.sh",
          "args": [
            "${aws:iot:parameter:packages}"
          ],
          "path": "${aws:iot:parameter:pathToHandler}"
        },
        "runAsUser": "${aws:iot:parameter:runAsUser}"
      }
    }
  ]
}
```

### AWS–Reboot
<a name="reboot-managed-template"></a>

**템플릿 이름**  
`AWS–Reboot`

**템플릿 설명**  
디바이스 재부팅을 AWS 위해에서 제공하는 관리형 템플릿입니다.

**입력 파라미터**  
이 템플릿에는 필수 파라미터가 없습니다. 선택적 파라미터 `runAsUser` 및 `pathToHandler`를 지정할 수 있습니다.

**디바이스 동작**  
디바이스가 성공적으로 재부팅됩니다.

**작업 문서**  
다음은 작업 문서와 최신 버전을 보여줍니다. 템플릿은 작업 핸들러에 대한 경로와 작업 핸들러가 디바이스를 재부팅하기 위해 실행해야 하는 셸 스크립트(`reboot.sh`)를 보여줍니다.

```
{
  "version": "1.0",
  "steps": [
    {
      "action": {
        "name": "Reboot",
        "type": "runHandler",
        "input": {
          "handler": "reboot.sh",
          "path": "${aws:iot:parameter:pathToHandler}"
        },
        "runAsUser": "${aws:iot:parameter:runAsUser}"
      }
    }
  ]
}
```

### AWS–Remove–Application
<a name="uninstall-managed-template"></a>

**템플릿 이름**  
`AWS–Remove–Application`

**템플릿 설명**  
하나 이상의 애플리케이션을 제거하기 AWS 위해에서 제공하는 관리형 템플릿입니다.

**입력 파라미터**  
이 템플릿에는 다음과 같은 필수 파라미터 `packages`가 있습니다. 선택적 파라미터 `runAsUser` 및 `pathToHandler`를 지정할 수도 있습니다.

`packages`

제거할 하나 이상의 애플리케이션의 목록(공백으로 구분)입니다.

**디바이스 동작**  
디바이스가 작업 문서에 지정된 대로 애플리케이션을 제거합니다.

**작업 문서**  
다음은 작업 문서와 최신 버전을 보여줍니다. 템플릿은 작업 핸들러에 대한 경로와 작업 핸들러가 파일을 다운로드하기 위해 실행해야 하는 셸 스크립트(`remove-packages.sh`)를 보여줍니다. 또한 필수 파라미터 `packages`를 보여줍니다.

```
{
  "version": "1.0",
  "steps": [
    {
      "action": {
        "name": "Remove-Application",
        "type": "runHandler",
        "input": {
          "handler": "remove-packages.sh",
          "args": [
            "${aws:iot:parameter:packages}"
          ],
          "path": "${aws:iot:parameter:pathToHandler}"
        },
        "runAsUser": "${aws:iot:parameter:runAsUser}"
      }
    }
  ]
}
```

### AWS–Restart–Application
<a name="restartsvs-managed-template"></a>

**템플릿 이름**  
`AWS–Restart–Application`

**템플릿 설명**  
하나 이상의 서비스를 중지하고 다시 시작하기 AWS 위해에서 제공하는 관리형 템플릿입니다.

**입력 파라미터**  
이 템플릿에는 다음과 같은 필수 파라미터 `services`가 있습니다. 선택적 파라미터 `runAsUser` 및 `pathToHandler`를 지정할 수도 있습니다.

**서비스**  
다시 시작할 하나 이상의 애플리케이션의 목록(공백으로 구분)입니다.

**디바이스 동작**  
지정된 애플리케이션이 중지되었다가 디바이스에서 다시 시작됩니다.

**작업 문서**  
다음은 작업 문서와 최신 버전을 보여줍니다. 템플릿은 작업 핸들러에 대한 경로와 작업 핸들러가 시스템 서비스를 다시 시작하기 위해 실행해야 하는 셸 스크립트(`restart-services.sh`)를 보여줍니다. 또한 필수 파라미터 `services`를 보여줍니다.

```
{
  "version": "1.0",
  "steps": [
    {
      "action": {
        "name": "Restart-Application",
        "type": "runHandler",
        "input": {
          "handler": "restart-services.sh",
          "args": [
            "${aws:iot:parameter:services}"
          ],
          "path": "${aws:iot:parameter:pathToHandler}"
        },
        "runAsUser": "${aws:iot:parameter:runAsUser}"
      }
    }
  ]
}
```

### AWS–Start–Application
<a name="startsvs-managed-template"></a>

**템플릿 이름**  
`AWS-Start-Application`

**템플릿 설명**  
하나 이상의 서비스를 시작하기 AWS 위해에서 제공하는 관리형 템플릿입니다.

**입력 파라미터**  
이 템플릿에는 다음과 같은 필수 파라미터 `services`가 있습니다. 선택적 파라미터 `runAsUser` 및 `pathToHandler`를 지정할 수도 있습니다.

`services`

시작할 하나 이상의 애플리케이션의 목록(공백으로 구분)입니다.

**디바이스 동작**  
지정된 애플리케이션이 디바이스에서 실행을 시작합니다.

**작업 문서**  
다음은 작업 문서와 최신 버전을 보여줍니다. 템플릿은 작업 핸들러에 대한 경로와 작업 핸들러가 시스템 서비스를 시작하기 위해 실행해야 하는 셸 스크립트(`start-services.sh`)를 보여줍니다. 또한 필수 파라미터 `services`를 보여줍니다.

```
{
  "version": "1.0",
  "steps": [
    {
      "action": {
        "name": "Start-Application",
        "type": "runHandler",
        "input": {
          "handler": "start-services.sh",
          "args": [
            "${aws:iot:parameter:services}"
          ],
          "path": "${aws:iot:parameter:pathToHandler}"
        },
        "runAsUser": "${aws:iot:parameter:runAsUser}"
      }
    }
  ]
}
```

### AWS–Stop–Application
<a name="stopsvs-managed-template"></a>

**템플릿 이름**  
`AWS–Stop–Application`

**템플릿 설명**  
하나 이상의 서비스를 중지하기 AWS 위해에서 제공하는 관리형 템플릿입니다.

**입력 파라미터**  
이 템플릿에는 다음과 같은 필수 파라미터 `services`가 있습니다. 선택적 파라미터 `runAsUser` 및 `pathToHandler`를 지정할 수도 있습니다.

`services`

중지할 하나 이상의 애플리케이션의 목록(공백으로 구분)입니다.

**디바이스 동작**  
지정된 애플리케이션이 디바이스에서 실행을 중지합니다.

**작업 문서**  
다음은 작업 문서와 최신 버전을 보여줍니다. 템플릿은 작업 핸들러에 대한 경로와 작업 핸들러가 시스템 서비스를 중지하기 위해 실행해야 하는 셸 스크립트(`stop-services.sh`)를 보여줍니다. 또한 필수 파라미터 `services`를 보여줍니다.

```
{
  "version": "1.0",
  "steps": [
    {
      "action": {
        "name": "Stop-Application",
        "type": "runHandler",
        "input": {
          "handler": "stop-services.sh",
          "args": [
            "${aws:iot:parameter:services}"
          ],
          "path": "${aws:iot:parameter:pathToHandler}"
        },
        "runAsUser": "${aws:iot:parameter:runAsUser}"
      }
    }
  ]
}
```

### AWS–Run–Command
<a name="runsvs-command-managed-template"></a>

**템플릿 이름**  
`AWS–Run–Command`

**템플릿 설명**  
셸 명령을 실행하기 AWS 위해에서 제공하는 관리형 템플릿입니다.

**입력 파라미터**  
이 템플릿에는 다음과 같은 필수 파라미터 `command`가 있습니다. 선택적 파라미터 `runAsUser`를 지정할 수도 있습니다.

`command`

쉼표로 구분된 명령 문자열. 명령 자체에 포함된 모든 쉼표는 이스케이프 처리해야 합니다.

**디바이스 동작**  
디바이스는 작업 문서에 지정된 대로 쉘 명령을 실행합니다.

**작업 문서**  
다음은 작업 문서와 최신 버전을 보여줍니다. 템플릿에는 작업 명령의 경로와 디바이스가 실행할 사용자 제공 명령이 표시됩니다.

```
{
  "version": "1.0",
  "steps": [
    {
      "action": {
        "name": "Run-Command",
        "type": "runCommand",
        "input": {
          "command": "${aws:iot:parameter:command}"
        },
        "runAsUser": "${aws:iot:parameter:runAsUser}"
      }
    }
  ]
}
```

**Topics**
+ [관리형 템플릿에는 무엇이 포함되어 있나요?](#job-template-managed-contains)
+ [사전 조건](#job-template-managed-prereq)
+ [관리형 템플릿 원격 작업 및 작업 문서](#job-template-manage-actions)
+ [를 사용하여 AWS 관리형 템플릿에서 작업 생성 AWS Management Console](job-template-manage-console-create.md)
+ [를 사용하여 AWS 관리형 템플릿에서 작업 생성 AWS CLI](job-template-manage-cli-create.md)

# 를 사용하여 AWS 관리형 템플릿에서 작업 생성 AWS Management Console
<a name="job-template-manage-console-create"></a>

 AWS Management Console 를 사용하여 AWS 관리형 템플릿에 대한 정보를 가져오고 이러한 템플릿을 사용하여 작업을 생성합니다. 그런 다음 생성한 작업을 사용자 정의 템플릿으로 저장할 수 있습니다.

## 관리형 템플릿에 대한 세부 정보 보기
<a name="job-template-managed-view"></a>

 AWS IoT 콘솔에서 사용할 수 있는 다양한 관리형 템플릿에 대한 정보를 가져올 수 있습니다.

1. 사용 가능한 관리형 템플릿을 보려면 [AWS IoT 콘솔의 작업 템플릿 허브](https://console.aws.amazon.com/iot/home#/jobtemplatehub)로 이동하여 **관리형 템플릿** 탭을 선택합니다.

1. 세부 정보를 보려면 관리형 템플릿을 선택합니다.

세부 정보 페이지에는 다음 정보가 포함되어 있습니다.
+ 관리형 템플릿의 이름, 설명 및 Amazon 리소스 이름(ARN)입니다.
+ Linux와 같이 원격 작업을 수행할 수 있는 환경입니다.
+ 작업 핸들러의 경로와 디바이스에서 실행할 명령을 지정하는 JSON 작업 문서입니다. 예를 들어 다음은 **AWS-Reboot** 템플릿에 대한 예제 작업 문서를 보여줍니다. 템플릿은 작업 핸들러에 대한 경로와 작업 핸들러가 디바이스를 재부팅하기 위해 실행해야 하는 셸 스크립트(`reboot.sh`)를 보여줍니다.

  ```
  {
    "version": "1.0",
    "steps": [
      {
        "action": {
          "name": "Reboot",
          "type": "runHandler",
          "input": {
            "handler": "reboot.sh",
            "path": "${aws:iot:parameter:pathToHandler}"
          },
          "runAsUser": "${aws:iot:parameter:runAsUser}"
        }
      }
    ]
  }
  ```

  다양한 원격 작업의 작업 문서와 해당 파라미터에 대한 자세한 내용은 [관리형 템플릿 원격 작업 및 작업 문서](job-templates-managed.md#job-template-manage-actions) 섹션을 참조하세요.
+ 작업 문서의 최신 버전입니다.

## 관리형 템플릿을 사용하여 작업 생성
<a name="job-template-manage-create-job"></a>

 AWS 관리 콘솔을 사용하여 작업을 생성하는 데 사용할 AWS 관리형 템플릿을 선택할 수 있습니다. 이 단원에서 그 방법을 설명합니다.

작업 생성 워크플로를 시작한 다음 작업을 생성하는 동안 사용할 AWS 관리형 템플릿을 선택할 수도 있습니다. 이 워크플로에 대한 자세한 내용은 [를 사용하여 작업 생성 및 관리 AWS Management Console](manage-job-console.md) 섹션을 참조하세요.

1. 

**AWS 관리형 템플릿 선택**

   [AWS IoT 콘솔의 작업 템플릿 허브](https://console.aws.amazon.com/iot/home#/jobtemplatehub)로 이동하여 **관리형 템플릿** 탭을 선택한 다음 템플릿을 선택합니다.

1. 

**관리형 템플릿을 사용하여 작업 생성**

   1. 템플릿의 세부 정보 페이지에서 **작업 생성(Create job)**을 선택합니다.

      템플릿 구성이 추가된 **작업 생성(Create job)** 워크플로의 **사용자 정의 작업 속성(Custom job properties)** 단계로 콘솔이 전환됩니다.

   1. 고유한 영숫자 작업 이름, 설명(선택 사항) 및 태그를 입력하고 **다음(Next)**을 선택합니다.

   1. 이 작업에서 실행할 사물 또는 사물 그룹을 작업 대상으로 선택합니다.

   1. **작업 문서(Job document)** 섹션에 템플릿이 구성 설정 및 입력 파라미터와 함께 표시됩니다. 선택한 템플릿의 입력 파라미터 값을 입력합니다. 예를 들어, **AWS-Download-File** 템플릿을 선택한 경우:
      + **downloadUrl**에 다운로드할 파일의 URL을 입력합니다. 예: `https://example.com/index.html`.
      + **filePath**에는 다운로드한 파일을 저장할 디바이스의 경로를 입력합니다. 예: `path/to/file`.

      선택적으로 `runAsUser` 및 `pathToHandler` 파라미터에 대한 값을 입력할 수도 있습니다. 각 템플릿의 입력 파라미터에 대한 자세한 내용은 [관리형 템플릿 원격 작업 및 작업 문서](job-templates-managed.md#job-template-manage-actions) 섹션을 참조하세요.

   1. **Job configuration**(작업 구성) 페이지에서 작업 유형을 연속 또는 스냅샷 작업으로 선택합니다. 스냅샷 작업은 대상 디바이스 및 그룹에서 실행이 완료되면 완료됩니다. 연속 작업은 사물 그룹에 적용되며 지정된 대상 그룹에 추가하는 모든 디바이스에서 실행됩니다.

   1. 작업에 대한 추가 구성을 계속 추가한 다음 작업을 검토하고 생성합니다. 추가 구성에 대한 자세한 내용은 다음 섹션을 참조하세요.
      + [작업 롤아웃, 예약 및 중단 구성](jobs-configurations-details.md#job-rollout-abort-scheduling)
      + [작업 실행 제한 시간 및 재시도 구성](jobs-configurations-details.md#job-timeout-retry)

## 관리형 템플릿에서 사용자 정의 작업 템플릿 생성
<a name="job-template-manage-create-template"></a>

 AWS 관리형 템플릿과 사용자 지정 작업을 시작점으로 사용하여 자체 사용자 지정 작업 템플릿을 생성할 수 있습니다. 사용자 지정 작업 템플릿을 생성하려면 먼저 이전 섹션에 설명된 대로 AWS 관리형 템플릿에서 작업을 생성합니다.

그런 다음 사용자 지정 작업을 템플릿으로 저장하여 사용자 지정 작업 템플릿을 직접 생성할 수 있습니다. 템플릿으로 저장하려면

1. [AWS IoT 콘솔의 작업 허브로](https://console.aws.amazon.com/iot/home#/jobhub) 이동하여 관리형 템플릿이 포함된 작업을 선택합니다.

1. **작업 템플릿으로 저장(Save as a job template)**을 선택한 다음 사용자 정의 작업 템플릿을 생성합니다. 사용자 정의 작업 템플릿 생성에 대한 자세한 내용은 [기존 작업에서 작업 템플릿 생성](job-templates-console.md#job-templates-console-create-exist-job) 섹션을 참조하세요.

# 를 사용하여 AWS 관리형 템플릿에서 작업 생성 AWS CLI
<a name="job-template-manage-cli-create"></a>

 AWS CLI 를 사용하여 AWS 관리형 템플릿에 대한 정보를 가져오고 이러한 템플릿을 사용하여 작업을 생성합니다. 그런 다음 작업을 템플릿으로 저장한 후 사용자 지정 템플릿을 직접 생성할 수 있습니다.

## 관리형 템플릿 나열
<a name="job-template-manage-cli-list"></a>

[https://docs.aws.amazon.com/cli/latest/reference/iot/list-managed-job-templates.html](https://docs.aws.amazon.com/cli/latest/reference/iot/list-managed-job-templates.html) AWS CLI 명령은의 모든 작업 템플릿을 나열합니다 AWS 계정.

```
 aws iot list-managed-job-templates
```

기본적으로이 명령을 실행하면 사용 가능한 모든 AWS 관리형 템플릿과 해당 세부 정보가 표시됩니다.

```
{
    "managedJobTemplates": [
        {
            "templateArn": "arn:aws:iot:region::jobtemplate/AWS-Reboot:1.0",
            "templateName": "AWS-Reboot",
            "description": "A managed job template for rebooting the device.",
            "environments": [
                "LINUX"
            ],
            "templateVersion": "1.0"
        },
        {
            "templateArn": "arn:aws:iot:region::jobtemplate/AWS-Remove-Application:1.0",
            "templateName": "AWS-Remove-Application",
            "description": "A managed job template for uninstalling one or more applications.",
            "environments": [
                "LINUX"
            ],
            "templateVersion": "1.0"
        },
        {
            "templateArn": "arn:aws:iot:region::jobtemplate/AWS-Stop-Application:1.0",
            "templateName": "AWS-Stop-Application",
            "description": "A managed job template for stopping one or more system services.",
            "environments": [
                "LINUX"
            ],
            "templateVersion": "1.0"
        },

        ...

        {
            "templateArn": "arn:aws:iot:us-east-1::jobtemplate/AWS-Restart-Application:1.0",
            "templateName": "AWS-Restart-Application",
            "description": "A managed job template for restarting one or more system services.",
            "environments": [
                "LINUX"
            ],
            "templateVersion": "1.0"
        }
    ]
}
```

자세한 내용은 [ListManagedJobTemplates](https://docs.aws.amazon.com/iot/latest/apireference/API_ListManagedJobTemplates.html)을 참조하세요.

## 관리형 템플릿에 대한 세부 정보 가져오기
<a name="job-template-manage-cli-get"></a>

[https://docs.aws.amazon.com/cli/latest/reference/iot/describe-managed-job-template.html](https://docs.aws.amazon.com/cli/latest/reference/iot/describe-managed-job-template.html) AWS CLI 명령은 지정된 작업 템플릿에 대한 세부 정보를 가져옵니다. 작업 템플릿 이름과 템플릿 버전(선택 사항)을 지정합니다. 템플릿 버전을 지정하지 않으면 미리 정의된 기본 버전이 반환됩니다. 다음은 명령을 실행하여 `AWS-Download-File` 템플릿에 대한 세부 정보를 가져오는 예를 보여줍니다.

```
aws iot describe-managed-job-template \
    --template-name AWS-Download-File
```

이 명령은 템플릿 세부 정보, ARN, 해당 작업 문서 및 템플릿의 입력 파라미터의 키-값 페어 목록인 `documentParameters` 파라미터를 표시합니다. 각 템플릿과 입력 파라미터에 대한 자세한 내용은 [관리형 템플릿 원격 작업 및 작업 문서](job-templates-managed.md#job-template-manage-actions) 섹션을 참조하세요.

**참고**  
이 API를 사용할 때 반환되는 `documentParameters` 객체는 AWS 관리형 템플릿에서 작업을 생성할 때만 사용해야 합니다. 사용자 지정 작업 템플릿에 객체를 사용해서는 안 됩니다. 이 파라미터를 이용하는 방법의 예는 [관리형 템플릿을 사용하여 작업 생성](#job-template-manage-cli-create-job) 섹션을 참조하세요.

```
{
    "templateName": "AWS-Download-File",
    "templateArn": "arn:aws:iot:region::jobtemplate/AWS-Download-File:1.0",
    "description": "A managed job template for downloading a file.",
    "templateVersion": "1.0",
    "environments": [
        "LINUX"
    ],
    "documentParameters": [
        {
            "key": "downloadUrl",
            "description": "URL of file to download.",
            "regex": "(.*?)",
            "example": "http://www.example.com/index.html",
            "optional": false
        },
        {
            "key": "filePath",
            "description": "Path on the device where downloaded file is written.",
            "regex": "(.*?)",
            "example": "/path/to/file",
            "optional": false
        },
        {
            "key": "runAsUser",
            "description": "Execute handler as another user. If not specified, then handler is executed as the same user as device client.",
            "regex": "(.){0,256}",
            "example": "user1",
            "optional": true
        },
        {
            "key": "pathToHandler",
            "description": "Path to handler on the device. If not specified, then device client will use the current working directory.",
            "regex": "(.){0,4096}",
            "example": "/path/to/handler/script",
            "optional": true
        }
    ],
    "document": "{\"version\":\"1.0\",\"steps\":[{\"action\":{\"name\":\"Download-File\",\"type\":\"runHandler\",\"input\":{\"handler\":\"download-file.sh\",\"args\":[\"${aws:iot:parameter:downloadUrl}\",\"${aws:iot:parameter:filePath}\"],\"path\":\"${aws:iot:parameter:pathToHandler}\"},\"runAsUser\":\"${aws:iot:parameter:runAsUser}\"}}]}"
}
```

자세한 내용은 [DescribeManagedJobTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeManagedJobTemplate.html)을 참조하세요.

## 관리형 템플릿을 사용하여 작업 생성
<a name="job-template-manage-cli-create-job"></a>

[https://docs.aws.amazon.com/cli/latest/reference/iot/create-job.html](https://docs.aws.amazon.com/cli/latest/reference/iot/create-job.html) AWS CLI 명령을 사용하여 작업 템플릿에서 작업을 생성할 수 있습니다. `thingOne`이라는 디바이스를 대상으로 하고, 작업의 기초로 사용할 관리형 템플릿의 Amazon 리소스 이름(ARN)을 지정합니다. `create-job` 명령의 연결된 파라미터를 전달하여 시간 초과 및 취소 구성과 같은 고급 구성을 재정의할 수 있습니다.

예에서는 `AWS-Download-File` 템플릿을 사용하는 작업을 생성하는 방법을 보여줍니다. 또한 `document-parameters` 파라미터를 사용하여 템플릿의 입력 파라미터를 지정하는 방법을 보여줍니다.

**참고**  
 AWS 관리형 템플릿에서만 `document-parameters` 객체를 사용합니다. 사용자 지정 작업 템플릿에 이 객체를 사용해서는 안 됩니다.

```
aws iot create-job \
   --targets arn:aws:iot:region:account-id:thing/thingOne \ 
   --job-id "new-managed-template-job" \ 
   --job-template-arn arn:aws:iot:region::jobtemplate/AWS-Download-File:1.0 \
   --document-parameters downloadUrl=https://example.com/index.html,filePath=path/to/file
```

여기서 각 항목은 다음과 같습니다.
+ *region*은 입니다 AWS 리전.
+ *account-id*은 고유한 AWS 계정 번호입니다.
+ `thingOne`은 작업이 대상으로 지정된 IoT 사물의 이름입니다.
+ *AWS-Download-File:1.0*은 관리형 템플릿의 이름입니다.
+ `https://example.com/index.html`은 파일을 다운로드할 URL입니다.
+ `https://pathto/file/index`는 다운로드한 파일을 저장할 디바이스의 로컬 파일 경로입니다.

다음 명령을 실행하여 `AWS-Download-File` 템플릿에 대한 작업을 생성합니다.

```
{
    "jobArn": "arn:aws:iot:region:account-id:job/new-managed-template-job",
    "jobId": "new-managed-template-job",
    "description": "A managed job template for downloading a file."
}
```

## 관리형 템플릿에서 사용자 지정 작업 템플릿 생성
<a name="job-template-manage-cli-create-jobtemplate"></a>

1. 이전 섹션의 설명에 따라 관리형 템플릿을 사용하여 작업을 생성합니다.

1. 생성한 작업의 ARN을 사용하여 사용자 정의 작업 템플릿을 생성합니다. 자세한 내용은 [기존 작업에서 작업 템플릿 생성](job-templates-cli.md#job-templates-cli-create-from-job) 단원을 참조하십시오.

# 사용자 정의 작업 템플릿 생성
<a name="job-templates-create"></a>

 AWS CLI 및 AWS IoT 콘솔을 사용하여 작업 템플릿을 생성할 수 있습니다. , AWS CLI AWS IoT 콘솔 및 Fleet Hub for AWS IoT Device Management 웹 애플리케이션을 사용하여 작업 템플릿에서 작업을 생성할 수도 있습니다. Fleet Hub 애플리케이션에서 작업 템플릿 작업에 대한 자세한 내용은 [Fleet Hub for AWS IoT Device Management에서 작업 템플릿 작업을](https://docs.aws.amazon.com/iot/latest/fleethubuserguide/aws-iot-monitor-technician-job-templates.html) 참조하세요.

**참고**  
작업 문서의 총 대체 패턴 수는 10개 이하여야 합니다.

**Topics**
+ [를 사용하여 사용자 지정 작업 템플릿 생성 AWS Management Console](job-templates-console.md)
+ [를 사용하여 사용자 지정 작업 템플릿 생성 AWS CLI](job-templates-cli.md)

# 를 사용하여 사용자 지정 작업 템플릿 생성 AWS Management Console
<a name="job-templates-console"></a>

이 주제에서는 AWS IoT 콘솔을 사용하여 작업 템플릿에 대한 세부 정보를 생성, 삭제 및 보는 방법을 설명합니다.

## 사용자 정의 작업 템플릿 생성
<a name="job-templates-console-create"></a>

원본 사용자 정의 작업 템플릿을 생성하거나 기존 작업에서 작업 템플릿을 생성할 수 있습니다. AWS 관리형 템플릿을 사용하여 생성된 기존 작업에서 사용자 지정 작업 템플릿을 생성할 수도 있습니다. 자세한 내용은 [관리형 템플릿에서 사용자 정의 작업 템플릿 생성](job-template-manage-console-create.md#job-template-manage-create-template) 단원을 참조하십시오.

### 원본 작업 템플릿 생성
<a name="job-templates-console-create-scratch"></a>

1. 

**작업 템플릿 생성 시작**

   1. [AWS IoT 콘솔의 작업 템플릿 허브로](https://console.aws.amazon.com/iot/home#/jobtemplatehub) 이동하여 **사용자 지정 템플릿** 탭을 선택합니다.

   1. **작업 템플릿 생성**을 선택합니다.
**참고**  
또한 **플릿 허브** 아래 **관련 서비스** 페이지의 **작업 템플릿** 페이지로 이동할 수도 있습니다.

1. 

**작업 템플릿 속성 지정**

   **작업 템플릿 생성(Create job template)** 페이지에서 작업 이름에 대한 영숫자 식별자와 템플릿에 대한 추가 세부 정보를 제공하는 영숫자 설명을 입력합니다.
**참고**  
작업 ID 또는 설명에 개인 식별 정보를 사용하지 않는 것이 좋습니다.

1. 

**작업 문서 제공**

   S3 버킷에 저장되거나 작업 내에 지정된 인라인 작업 문서로 저장된 JSON 작업 파일을 제공합니다. 이 템플릿을 사용하여 작업을 생성할 때 이 작업 파일이 작업 문서가 됩니다.

   작업 파일이 S3 버킷에 저장되어 있는 경우 S3 URL을 입력하거나**S3 찾아보기(Browse S3)**를 선택하고 작업 문서로 이동한 다음 해당 작업 파일을 선택합니다.
**참고**  
현재 리전에서는 S3 버킷만 선택할 수 있습니다.

1. 작업에 대한 추가 구성을 계속 추가한 다음 작업을 검토하고 생성합니다. 추가 옵션 구성에 대한 자세한 내용은 다음 링크를 참조하세요.
   + [작업 롤아웃, 예약 및 중단 구성](jobs-configurations-details.md#job-rollout-abort-scheduling)
   + [작업 실행 제한 시간 및 재시도 구성](jobs-configurations-details.md#job-timeout-retry)

### 기존 작업에서 작업 템플릿 생성
<a name="job-templates-console-create-exist-job"></a>

1. 

**작업 선택**

   1. [AWS IoT 콘솔의 작업 허브](https://console.aws.amazon.com/iot/home#/jobhub)로 이동하여 작업 템플릿의 기반으로 사용할 작업을 선택합니다.

   1. **작업 템플릿으로 저장(Save as a job template)**을 선택합니다.
**참고**  
선택적으로 다른 작업 문서를 선택하거나 원래 작업에서 고급 구성을 편집한 다음 **작업 템플릿 생성(Create job template)**을 선택할 수 있습니다. 새 작업 템플릿이 **작업 템플릿** 페이지에 나타납니다.

1. 

**작업 템플릿 속성 지정**

   **작업 템플릿 생성(Create job template)** 페이지에서 작업 이름에 대한 영숫자 식별자와 템플릿에 대한 추가 세부 정보를 제공하는 영숫자 설명을 입력합니다.
**참고**  
작업 문서는 템플릿을 생성할 때 지정한 작업 파일입니다. 작업 문서가 S3 위치 대신 작업 내에 지정된 경우 이 작업의 세부 정보 페이지에서 작업 문서를 볼 수 있습니다.

1. 작업에 대한 추가 구성을 계속 추가한 다음 작업을 검토하고 생성합니다. 추가 구성에 대한 자세한 내용은 다음 섹션을 참조하세요.
   + [작업 롤아웃, 예약 및 중단 구성](jobs-configurations-details.md#job-rollout-abort-scheduling)
   + [작업 실행 제한 시간 및 재시도 구성](jobs-configurations-details.md#job-timeout-retry)

## 사용자 정의 작업 템플릿에서 작업 생성
<a name="job-templates-console-create-job-from"></a>

이 주제에 설명된 대로 작업 템플릿의 세부 정보 페이지로 이동하여 사용자 정의 작업 템플릿에서 작업을 생성할 수 있습니다. 작업 생성 워크플로를 실행할 때 사용할 작업 템플릿을 선택하여 작업을 생성할 수도 있습니다. 자세한 내용은 [를 사용하여 작업 생성 및 관리 AWS Management Console](manage-job-console.md) 단원을 참조하십시오.

이 주제에서는 사용자 정의 작업 템플릿의 세부 정보 페이지에서 작업을 생성하는 방법을 보여줍니다. AWS 관리형 템플릿에서 작업을 생성할 수도 있습니다. 자세한 내용은 [관리형 템플릿을 사용하여 작업 생성](job-template-manage-console-create.md#job-template-manage-create-job) 단원을 참조하십시오.

1. 

**사용자 정의 작업 템플릿 선택**

   [AWS IoT 콘솔의 작업 템플릿 허브](https://console.aws.amazon.com/iot/home#/jobtemplatehub)로 이동하여 **사용자 지정 템플릿** 탭을 선택한 다음 템플릿을 선택합니다.

1. 

**사용자 정의 템플릿을 사용하여 작업 생성**

   작업을 생성하려면

   1. 템플릿의 세부 정보 페이지에서 **작업 생성(Create job)**을 선택합니다.

      템플릿 구성이 추가된 **작업 생성(Create job)** 워크플로의 **사용자 정의 작업 속성(Custom job properties)** 단계로 콘솔이 전환됩니다.

   1. 고유한 영숫자 작업 이름, 설명(선택 사항) 및 태그를 입력하고 **다음(Next)**을 선택합니다.

   1. 이 작업에서 실행할 사물 또는 사물 그룹을 작업 대상으로 선택합니다.

      **작업 문서(Job document)** 섹션에 템플릿이 구성 설정과 함께 표시됩니다. 다른 작업 문서를 사용하려면 **찾아보기**를 선택하고 다른 버킷과 문서를 선택합니다. **다음**을 선택합니다.

   1. **Job configuration**(작업 구성) 페이지에서 작업 유형을 연속 또는 스냅샷 작업으로 선택합니다. 스냅샷 작업은 대상 디바이스 및 그룹에서 실행이 완료되면 완료됩니다. 연속 작업은 사물 그룹에 적용되며 지정된 대상 그룹에 추가하는 모든 디바이스에서 실행됩니다.

   1. 작업에 대한 추가 구성을 계속 추가한 다음 작업을 검토하고 생성합니다. 추가 구성에 대한 자세한 내용은 다음 섹션을 참조하세요.
      + [작업 롤아웃, 예약 및 중단 구성](jobs-configurations-details.md#job-rollout-abort-scheduling)
      + [작업 실행 제한 시간 및 재시도 구성](jobs-configurations-details.md#job-timeout-retry)

**참고**  
작업 템플릿에서 생성된 작업이 작업 템플릿에서 제공하는 기존 파라미터를 업데이트하면 업데이트된 파라미터가 해당 작업의 작업 템플릿에서 제공한 기존 파라미터를 재정의합니다.

플릿 허브 웹 애플리케이션을 사용하여 작업 템플릿에서 작업을 생성할 수도 있습니다. Fleet Hub에서 작업을 생성하는 방법에 대한 자세한 내용은 [Fleet Hub for AWS IoT Device Management의 작업 템플릿 작업을](https://docs.aws.amazon.com/iot/latest/fleethubuserguide/aws-iot-monitor-technician-job-templates.html) 참조하세요.

## 작업 템플릿 삭제
<a name="job-templates-console-delete-job"></a>

작업 템플릿을 삭제하려면 먼저 [AWS IoT 콘솔의 작업 템플릿 허브](https://console.aws.amazon.com/iot/home#/jobtemplatehub)로 이동하여 **사용자 지정 템플릿** 탭을 선택합니다. 그런 다음 삭제할 작업 템플릿을 선택하고 **다음**을 선택합니다.

**참고**  
삭제는 영구적이며 작업 템플릿은 더 이상 **사용자 정의 템플릿(Custom templates)** 탭에 표시되지 않습니다.

# 를 사용하여 사용자 지정 작업 템플릿 생성 AWS CLI
<a name="job-templates-cli"></a>

이 주제에서는 AWS CLI를 사용하여 작업 템플릿에 대한 세부 정보를 생성, 삭제 및 검색하는 방법에 대해 설명합니다.

## 새 작업 템플릿 생성
<a name="job-templates-cli-create-scratch"></a>

다음 AWS CLI 명령은 S3 버킷에 저장된 작업 문서(*job-document.json*)와 Amazon S3(*S3DownloadRole*)에서 파일을 다운로드할 수 있는 권한이 있는 역할을 사용하여 작업을 생성하는 방법을 보여줍니다.

```
aws iot create-job-template  \
      --job-template-id 010  \
      --description "My custom job template for updating the device firmware"
      --document-source https://s3.amazonaws.com/amzn-s3-demo-bucket/job-document.json  \
      --timeout-config inProgressTimeoutInMinutes=100 \
      --job-executions-rollout-config "{ \"exponentialRate\": { \"baseRatePerMinute\": 50, \"incrementFactor\": 2, \"rateIncreaseCriteria\": { \"numberOfNotifiedThings\": 1000, \"numberOfSucceededThings\": 1000}}, \"maximumPerMinute\": 1000}" \
      --abort-config "{ \"criteriaList\": [ { \"action\": \"CANCEL\", \"failureType\": \"FAILED\", \"minNumberOfExecutedThings\": 100, \"thresholdPercentage\": 20}, { \"action\": \"CANCEL\", \"failureType\": \"TIMED_OUT\", \"minNumberOfExecutedThings\": 200, \"thresholdPercentage\": 50}]}" \          
      --presigned-url-config "{\"roleArn\":\"arn:aws:iam::123456789012:role/S3DownloadRole\", \"expiresInSec\":3600}"
```

선택 사항인 `timeout-config` 파라미터는 각 디바이스가 작업 실행을 완료해야 하는 시간을 지정합니다. 타이머는 작업 실행 상태가 `IN_PROGRESS`에 설정되면 시작합니다. 시간이 만료되기 전에 작업 실행 상태가 다른 터미널 상태로 설정되어 있지 않으면 `TIMED_OUT`으로 자동으로 설정됩니다.

진행 중 타이머는 업데이트될 수 없으며 이 작업에 대한 모든 작업 시작에 적용됩니다. 작업 시작이이 간격보다 오래 `IN_PROGRESS` 상태로 유지될 때마다 작업 시작이 실패하고 터미널 `TIMED_OUT` 상태로 전환됩니다. AWS IoT 또한는 MQTT 알림을 게시합니다.

작업 롤아웃 및 중단에 대한 구성 생성에 대한 자세한 내용은 [작업 롤아웃 및 중단 구성](job-rollout-abort-scheduling.html)을 참조하세요.

**참고**  
Amazon S3 파일로 지정되는 작업 문서는 작업을 생성할 때 가져오게 됩니다. 작업을 생성한 후 작업 문서의 원본으로 사용한 Amazon S3 파일의 내용을 변경해도 작업 대상으로 전송되는 내용은 변경되지 않습니다.

## 기존 작업에서 작업 템플릿 생성
<a name="job-templates-cli-create-from-job"></a>

다음 AWS CLI 명령은 기존 작업의 Amazon 리소스 이름(ARN)을 지정하여 작업 템플릿을 생성합니다. 새 작업 템플릿은 작업에 지정된 모든 구성을 사용합니다. 필요에 따라 선택적 파라미터를 사용하여 기존 작업의 구성을 변경할 수 있습니다.

```
aws iot create-job-template  \
      --job-arn arn:aws:iot:region:123456789012:job/job-name  \      
      --timeout-config inProgressTimeoutInMinutes=100
```

## 작업 템플릿에 대한 세부 정보 가져오기
<a name="job-templates-cli-describe"></a>

다음 AWS CLI 명령은 지정된 작업 템플릿에 대한 세부 정보를 가져옵니다.

```
aws iot describe-job-template \
      --job-template-id template-id
```

이 명령은 다음 출력을 표시합니다.

```
{
   "abortConfig": { 
      "criteriaList": [ 
         { 
            "action": "string",
            "failureType": "string",
            "minNumberOfExecutedThings": number,
            "thresholdPercentage": number
         }
      ]
   },
   "createdAt": number,
   "description": "string",
   "document": "string",
   "documentSource": "string",
   "jobExecutionsRolloutConfig": { 
      "exponentialRate": { 
         "baseRatePerMinute": number,
         "incrementFactor": number,
         "rateIncreaseCriteria": { 
            "numberOfNotifiedThings": number,
            "numberOfSucceededThings": number
         }
      },
      "maximumPerMinute": number
   },
   "jobTemplateArn": "string",
   "jobTemplateId": "string",
   "presignedUrlConfig": { 
      "expiresInSec": number,
      "roleArn": "string"
   },
   "timeoutConfig": { 
      "inProgressTimeoutInMinutes": number
   }
}
```

## 작업 템플릿 나열
<a name="job-templates-cli-list"></a>

다음 AWS CLI 명령은의 모든 작업 템플릿을 나열합니다 AWS 계정.

```
 aws iot list-job-templates
```

이 명령은 다음 출력을 표시합니다.

```
{
   "jobTemplates": [ 
      { 
         "createdAt": number,
         "description": "string",
         "jobTemplateArn": "string",
         "jobTemplateId": "string"
      }
   ],
   "nextToken": "string"
}
```

추가 결과 페이지를 검색하려면 `nextToken` 필드의 값을 사용합니다.

## 작업 템플릿 삭제
<a name="job-templates-cli-delete"></a>

다음 AWS CLI 명령은 지정된 작업 템플릿을 삭제합니다.

```
aws iot delete-job-template \
      --job-template-id template-id
```

명령이 아무런 출력도 표시하지 않습니다.

## 사용자 정의 작업 템플릿에서 작업 생성
<a name="job-templates-cli-create-job"></a>

다음 AWS CLI 명령은 사용자 지정 작업 템플릿에서 작업을 생성합니다. `thingOne`(이)라는 디바이스를 대상으로 하고, 작업의 기초로 사용할 작업 템플릿의 Amazon 리소스 이름(ARN)을 지정합니다. `create-job` 명령의 연결된 파라미터를 전달하여 시간 초과 및 취소 구성과 같은 고급 구성을 재정의할 수 있습니다.

**주의**  
`document-parameters` 객체는 AWS 관리형 템플릿으로 작업을 생성할 때만 `create-job` 명령과 함께 사용해야 합니다. 사용자 지정 작업 템플릿에 이 객체를 사용해서는 안 됩니다. 이 파라미터를 사용하여 작업을 만드는 방법의 예는 [관리형 템플릿을 사용하여 작업 생성](job-template-manage-cli-create.md#job-template-manage-cli-create-job) 섹션을 참조하세요.

```
aws iot create-job \ 
      --targets arn:aws:iot:region:123456789012:thing/thingOne  \
      --job-template-arn arn:aws:iot:region:123456789012:jobtemplate/template-id
```

# 작업 구성
<a name="jobs-configurations"></a>

지정된 대상에 배포하는 각 작업에 대해 다음과 같은 추가 구성을 지정할 수 있습니다.
+ **롤아웃**: 분당 작업 문서를 수신하는 디바이스 수를 정의합니다.
+ **예약**: 반복 유지 관리 기간을 사용하는 것 외에도 미래 날짜 및 시간에 작업을 예약합니다.
+ **중단**: 일부 디바이스가 작업 알림을 받지 못하거나 디바이스에서 작업 실행에 대한 실패를 보고하는 경우와 같은 사례에서 작업을 취소합니다.
+ **시간 제한(Timeout)**: 작업 실행이 시작된 후 일정 기간 내에 작업 대상에서 응답이 없는 경우 작업이 실패할 수 있습니다.
+ **재시도**: 디바이스가 작업 실행을 완료하려고 할 때 실패를 보고하거나 작업 실행 시간이 초과된 경우 작업 실행을 재시도합니다.

이러한 구성을 사용하여 작업 실행 상태를 모니터링하고 잘못된 업데이트가 전체 플릿으로 전송되는 것을 방지할 수 있습니다.

**Topics**
+ [작업 구성 작동 방식](jobs-configurations-details.md)
+ [추가 구성 지정](jobs-configurations-specify.md)

# 작업 구성 작동 방식
<a name="jobs-configurations-details"></a>

작업을 배포할 때 롤아웃 및 중단 구성을 사용하고 작업을 실행할 때 제한 시간 및 재시도 구성을 사용합니다. 다음 섹션은 이러한 구성의 작동 방식에 대한 자세한 정보를 보여줍니다.

**Topics**
+ [작업 롤아웃, 예약 및 중단 구성](#job-rollout-abort-scheduling)
+ [작업 실행 제한 시간 및 재시도 구성](#job-timeout-retry)

## 작업 롤아웃, 예약 및 중단 구성
<a name="job-rollout-abort-scheduling"></a>

작업 롤아웃, 예약, 중단 구성을 사용하여 작업 문서를 수신하는 디바이스 수를 정의하고, 작업 롤아웃을 예약하고, 작업을 취소하는 기준을 결정할 수 있습니다.

### 작업 롤아웃 구성
<a name="job-rollout-configuration"></a>

대상에게 대기 중인 작업 실행을 얼마나 빨리 알릴지 지정할 수 있습니다. 또한 단계별 롤아웃을 생성하여 업데이트, 재부팅 및 기타 작업을 효과적으로 관리할 수 있습니다. 대상에게 알릴 방법을 지정하려면 작업 롤아웃 속도를 사용합니다.

#### 작업 롤아웃 속도
<a name="job-rollout-using"></a>

상수 롤아웃 속도 또는 기하급수적인 롤아웃 속도를 사용하여 롤아웃 구성을 생성할 수 있습니다. 분당 알릴 최대 작업 대상 수를 지정하려면 상수 롤아웃 속도를 사용합니다.

AWS IoT 다양한 기준과 임계값이 충족되면 지수 롤아웃 비율을 사용하여 작업을 배포할 수 있습니다. 실패한 작업 수가 지정한 기준과 일치하면 작업 롤아웃을 취소할 수 있습니다. 작업을 생성할 때 [https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecutionsRolloutConfig.html](https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecutionsRolloutConfig.html) 객체를 사용하여 작업 롤아웃 속도 기준을 설정합니다. 또한 작업 생성 시 [https://docs.aws.amazon.com/iot/latest/apireference/API_AbortConfig.html](https://docs.aws.amazon.com/iot/latest/apireference/API_AbortConfig.html) 객체를 사용하여 작업 중단 기준을 설정합니다.

다음 예에서는 롤아웃 속도가 작동하는 방식을 보여줍니다. 분당 50개의 기본 속도, 증분 계수 2, 알림을 받고 성공한 분당 디바이스의 수 1,000을 사용하는 작업 롤아웃을 예로 들면, 작업은 분당 50개의 작업을 실행하는 속도로 시작되고 1000개의 사물이 작업 실행 알림을 수신하거나 1,000개의 성공적인 작업 실행이 발생할 때까지 해당 속도로 계속됩니다.

다음 표는 처음 4회의 증가에 걸쳐 롤아웃이 어떻게 진행되는지 보여줍니다.


|  |  |  |  |  | 
| --- |--- |--- |--- |--- |
|  분당 롤아웃 속도  |  50  |  100  |  200  |  400  | 
|  속도 증가를 충족하기 위한 알림을 받는 디바이스 또는 성공한 작업 실행의 수  |  1,000  |  2,000  |  3,000  |  4,000  | 

**참고**  
최대 동시 작업 제한인 500개 작업(`isConcurrent = True`)에 도달하면 모든 활성 작업은 `IN-PROGRESS` 상태로 유지되며 동시 작업 수가 499개 이하(`isConcurrent = False)`)가 될 때까지 새 작업 실행이 롤아웃되지 않습니다. 이는 스냅샷 작업과 연속 작업에 적용됩니다.  
`isConcurrent = True`인 경우 현재 작업이 대상 그룹의 모든 디바이스에 작업 실행을 롤아웃하는 중입니다. `isConcurrent = False`인 경우 이 작업은 대상 그룹의 모든 디바이스에 대한 모든 작업 실행 롤아웃을 완료한 것입니다. 대상 그룹의 모든 디바이스가 최종 상태에 도달하거나 대상 그룹의 임계값 백분율에 도달할 때(작업 중단 구성을 선택한 경우) 상태가 업데이트됩니다. `isConcurrent = True` 및 `isConcurrent = False`인 경우 작업 수준 상태는 모두 `IN_PROGRESS`입니다.  
활성 및 동시 작업 제한에 대한 자세한 내용은 [활성 및 동시 작업 제한](job-limits.md#job-limits-active-concurrent) 섹션을 참조하세요.

#### 동적 사물 그룹을 사용한 연속 작업의 작업 롤아웃 속도
<a name="job-rollout-dynamic-groups"></a>

연속 작업을 사용하여 플릿에서 원격 작업을 롤아웃하면 AWS IoT 작업에서는 대상 사물 그룹의 디바이스에 대한 작업 실행을 롤아웃합니다. 새 디바이스가 동적 사물 그룹에 추가되는 경우 이러한 작업 실행은 작업이 생성된 후에도 새로 추가된 디바이스로 계속 롤아웃됩니다.

롤아웃 구성은 작업을 만들 때까지 그룹에 추가된 디바이스에 대해서만 롤아웃 속도를 제어할 수 있습니다. 작업이 생성된 후 새 디바이스에 대해 디바이스가 대상 그룹에 조인하자마자 거의 실시간으로 작업 실행이 만들어집니다.

### 작업 예약 구성
<a name="job-scheduling"></a>

미리 결정된 시작 시간, 종료 시간 및 종료 동작(종료 시간에 도달할 때 각 작업 실행에 발생하는 일)을 사용하여 최대 1년 전에 연속 또는 스냅샷 작업을 예약할 수 있습니다. 또한 연속 작업의 빈도, 시작 시간 및 기간을 유연하게 조정할 수 있는 선택적 반복 유지 관리 기간을 만들어 대상 그룹 내의 모든 디바이스에 작업 문서를 롤아웃할 수 있습니다.

#### 작업 예약 구성
<a name="jobs-scheduling-without-maintenance-window"></a>

**시작 시간**

예약된 작업의 시작 시간은 작업이 대상 그룹의 모든 디바이스에 대한 작업 문서 롤아웃을 시작할 미래 날짜 및 시간입니다. 예약된 작업의 시작 시간은 연속 작업과 스냅샷 작업에 적용됩니다. 예약된 작업이 처음 생성되면 `SCHEDULED` 상태를 유지합니다. 선택한 `startTime`에 도달하면 `IN_PROGRESS`로 업데이트되고 작업 문서 롤아웃이 시작됩니다. `startTime`은 예약된 작업을 처음 생성한 날짜 및 시간으로부터 1년 이내여야 합니다.

API 명령 또는를 사용할 `startTime` 때의 구문에 대한 자세한 내용은 [타임스탬프](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-types.html#parameter-type-timestamp)를 AWS CLI참조하세요.

일광 절약 시간(DST)을 준수하는 위치에서 반복되는 유지 관리 기간 중에 수행되는 선택적 예약 구성을 사용하는 작업의 경우 DST에서 표준 시간으로, 표준 시간에서 DST로 전환하면 시간이 1시간 변경됩니다.

**참고**  
에 표시되는 시간대는 현재 시스템 시간대 AWS Management Console 입니다. 그러나 이러한 시간대는 시스템에서 UTC로 변환됩니다.

**종료 시간**

예약된 작업의 종료 시간은 작업이 대상 그룹의 나머지 디바이스에 대한 작업 문서 롤아웃을 중지할 미래 날짜 및 시간입니다. 예약된 작업의 종료 시간은 연속 작업과 스냅샷 작업에 적용됩니다. 예약된 작업이 선택한 `endTime`에 도달하고 모든 작업 실행이 최종 상태에 도달하면 상태 상태가 `IN_PROGRESS`에서 `COMPLETED`로 업데이트됩니다. `endTime`은 예약된 작업을 처음 생성한 날짜 및 시간으로부터 2년 이내여야 합니다. `startTime`과 `endTime` 사이의 최소 기간은 30분입니다. 작업이 `endTime`에 도달할 때까지 작업 실행 재시도가 수행되며 `endBehavior`에 따라 이후 진행 방법이 결정됩니다.

API 명령 또는를 사용할 `endTime` 때의 구문에 대한 자세한 내용은 [타임스탬프](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-types.html#parameter-type-timestamp)를 AWS CLI참조하세요.

일광 절약 시간(DST)을 준수하는 위치에서 반복되는 유지 관리 기간 중에 수행되는 선택적 예약 구성을 사용하는 작업의 경우 DST에서 표준 시간으로, 표준 시간에서 DST로 전환하면 시간이 1시간 변경됩니다.

**참고**  
에 표시되는 시간대는 현재 시스템 시간대 AWS Management Console 입니다. 그러나 이러한 시간대는 시스템에서 UTC로 변환됩니다.

**종료 동작**

예약된 작업의 종료 동작은 작업이 선택한 `endTime`에 도달할 때 해당 작업 및 완료되지 않은 모든 작업 실행에 발생하는 일을 결정합니다.

작업 또는 작업 템플릿을 생성할 때 선택할 수 있는 종료 동작은 다음과 같습니다.
+ `STOP_ROLLOUT`
  + `STOP_ROLLOUT`은 작업 대상 그룹의 나머지 모든 디바이스에 대한 작업 문서 롤아웃을 중지합니다. 또한 모든 `QUEUED` 및 `IN_PROGRESS` 작업 실행은 최종 상태에 도달할 때까지 계속됩니다. `CANCEL` 또는 `FORCE_CANCEL`을 선택하지 않는 한, 이것이 기본 종료 동작입니다.
+ `CANCEL`
  + `CANCEL`은 작업 대상 그룹의 나머지 모든 디바이스에 대한 작업 문서 롤아웃을 중지합니다. 또한 모든 `QUEUED` 작업 실행은 취소되지만 모든 `IN_PROGRESS` 작업 실행은 최종 상태에 도달할 때까지 계속됩니다.
+ `FORCE_CANCEL`
  + `FORCE_CANCEL`은 작업 대상 그룹의 나머지 모든 디바이스에 대한 작업 문서 롤아웃을 중지합니다. 또한 모든 `QUEUED` 및 `IN_PROGRESS` 작업 실행이 취소됩니다.

**참고**  
`endtime`을 선택하려면 `endbehavior` 하나를 선택해야 합니다.

**최대 기간**

예약된 작업의 최대 기간은 `startTime` 및 `endTime`에 관계없이 2년 이하여야 합니다.

다음 테이블은 예약된 작업의 일반적인 기간 시나리오입니다.


| **예약된 작업 예시 번호** | startTime**** | endTime**** | **최대 기간** | 
| --- | --- | --- | --- | 
|  1  |  최초 작업 생성 직후  |  최초 작업 생성 1년 후  |  1년  | 
|  2  |  최초 작업 생성 1개월 후  |  최초 작업 생성 13개월 후  |  1년  | 
|  3  |  최초 작업 생성 1년 후  |  최초 작업 생성 2년 후  |  1년  | 
|  4  |  최초 작업 생성 직후  |  최초 작업 생성 2년 후  |  2년  | 

#### 반복 유지 관리 기간
<a name="jobs-scheduling-maintenance-window"></a>

유지 관리 기간은의 예약 구성 내에서 AWS Management Console , 그리고 `CreateJob` 및 `CreateJobTemplate` API `SchedulingConfig` 내에서 선택적 구성입니다. APIs 미리 정해진 시작 시간, 기간 및 유지 관리 기간이 발생하는 빈도(매일, 매주 또는 매월)로 반복 유지 관리 기간을 설정할 수 있습니다. 유지 관리 기간은 연속 작업에만 적용됩니다. 반복 유지 관리 기간의 최대 기간은 23시간 50분입니다.

다음 다이어그램은 선택적으로 유지 관리 기간이 적용된 다양한 예약된 작업 시나리오의 작업 상태를 보여줍니다.

![\[특정 이벤트에서 SCHEDULED, IN_PROGRESS, CANCELLED 및 DELETION_IN_PROGRESS 상태를 통해 진행되는 연속 작업의 수명 주기를 보여주는 다이어그램입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/job-states-diagram-scheduled-maintenance-window.png)


작업 상태에 대한 자세한 내용은 [작업 및 작업 실행 상태](iot-jobs-lifecycle.md) 섹션을 참조하세요.

**참고**  
유지 관리 기간 중에 작업이 `endTime`에 도달하면 `IN_PROGRESS`에서 `COMPLETED`로 업데이트됩니다. 또한 나머지 모든 작업 실행은 작업의 `endBehavior`에 따라 실행됩니다.

**Cron 표현식**

사용자 지정 빈도를 사용하여 유지 관리 기간 중에 작업 문서를 롤아웃하는 예약된 작업의 경우 사용자 지정 빈도는 cron 표현식을 사용하여 입력됩니다. Cron 표현식에는 각각 공백으로 구분되는 필수 필드 6개가 있습니다.

**구문**

```
cron(fields)
```


| **필드** | **값** | **와일드카드** | 
| --- | --- | --- | 
|  Minutes  |  0\$159  |  , - \$1 /  | 
|  시간  |  0\$123  |  , - \$1 /  | 
|  날짜  |  1\$131  |  , - \$1 ? / L W  | 
|  월  |  1-12 또는 JAN-DEC  |  , - \$1 /  | 
|  요일  |  1-7 또는 SUN-SAT  |  , - \$1 ? L \$1  | 
|  연도  |  1970\$12199  |  , - \$1 /  | 

**와일드카드**
+ **,**(쉼표) 와일드카드는 추가 값을 포함합니다. 예컨대, Month 필드에서 JAN, FEB, MAR은 1월, 2월, 3월을 포함한다는 의미입니다.
+ **-**(대시) 와일드카드는 범위를 지정합니다. 예컨대, Day 필드에서 1-15는 지정된 달의 1일에서 15일까지 포함한다는 의미입니다.
+ **\$1**(별표) 와일드카드는 필드의 모든 값을 포함합니다. '시간' 필드에서 **\$1**는 모든 시간을 포함한다는 의미입니다. '일' 및 '요일' 필드 모두에서 **\$1**를 사용할 수 없습니다. 필드 중 하나에 사용할 경우 다른 하나에는 반드시 **?**를 사용해야 합니다.
+ **/**(슬래시) 와일드카드로 증분을 지정합니다. 예를 들어, '분' 필드에 1/10을 입력하면 지정한 시간의 1분부터 시작해서 매 10분 간격을 지정할 수 있습니다(즉, 11분, 21분, 31분 등).
+ **?**(물음표) 와일드카드는 어떤 한 가지나 다른 것을 지정합니다. '일' 필드에 **7**을 입력하고 '요일' 필드에는 **?**을 입력하면 매월 7일이 무슨 요일이든 상관없이 7번째 되는 날을 지정한다는 의미입니다.
+ '날짜' 또는 '요일' 필드에서 **L** 와일드카드로 해당 월 또는 주의 마지막 날을 지정할 수 있습니다.
+ '날짜' 필드에서는 **W** 와일드카드로 어떤 한 평일을 지정할 수 있습니다. 예를 들어 '날짜' 필드에 **3W**를 입력하면 해당 월의 세 번째 평일에 가장 가까운 날을 지정할 수 있습니다.
+ '요일' 필드의 **\$1** 와일드카드는 그 달에 속한 정해진 요일의 특정 인스턴스를 지정합니다. 예를 들어, 3\$12는 그 달의 두 번째 화요일입니다. 3은 각 주의 셋째 날이므로 화요일을 나타내고 2는 그 달의 두 번째 해당 요일입니다.
**참고**  
'\$1' 문자를 사용하는 경우 요일(day-of-week) 필드에 하나의 표현식만 정의할 수 있습니다. 예를 들어 `"3#1,6#3"`은 두 개의 표현식으로 해석되기 때문에 유효하지 않습니다.

**제한 사항**
+ 같은 cron 표현식에서 '날짜' 및 '요일' 필드를 지정할 수 없습니다. 이들 필드 중 하나에 값(또는 \$1)을 지정하는 경우에는 다른 필드에서 반드시 **?**를 사용해야 합니다.

**예시**

반복 유지 관리 기간의 `startTime`에 cron 표현식을 사용할 때는 다음 샘플 cron 문자열을 참조하세요.


| **분** | **시간** | **일** | **월** | **요일** | **연도** | **의미** | 
| --- | --- | --- | --- | --- | --- | --- | 
| 0 | 10 | \$1 | \$1 | ? | \$1 |  매일 오전 10시(UTC)에 실행  | 
| 15 | 12 | \$1 | \$1 | ? | \$1 |  매일 오후 12시 15분(UTC)에 실행  | 
| 0 | 18 | ? | \$1 | 월-금 | \$1 |  매주 월요일부터 금요일까지 오후 6시(UTC)에 실행  | 
| 0 | 8 | 1 | \$1 | ? | \$1 |  매월 1일 오전 8시(UTC)에 실행  | 

#### 반복 유지 관리 기간 종료 로직
<a name="jobs-scheduling-maintenance-window-end-behavoir"></a>

유지 관리 기간 중 작업 롤아웃이 현재 유지 관리 기간 종료 시점에 도달하면 다음과 같은 작업이 수행됩니다.
+ 작업은 대상 그룹의 나머지 모든 디바이스에 대한 작업 문서 롤아웃을 중지합니다. 다음 유지 관리 기간의 `startTime`에 재개됩니다.
+ 상태가 `QUEUED`인 모든 작업 실행은 다음 유지 관리 기간의 `startTime`까지 `QUEUED` 상태로 유지됩니다. 다음 기간에는 디바이스가 작업 문서에 지정된 작업을 수행할 준비가 되었을 때 `IN_PROGRESS`로 전환할 수 있습니다.
+ 상태가 `IN_PROGRESS`인 모든 작업 실행은 최종 상태에 도달할 때까지 작업 문서에 지정된 작업을 계속 수행합니다. `JobExecutionsRetryConfig`에 지정된 대로 모든 재시도는 다음 유지 관리 기간의 `startTime`에 이루어집니다.

### 작업 중단 구성
<a name="job-abort-using"></a>

이 구성을 사용하여 디바이스의 임계값 비율이 해당 기준을 충족할 때 작업을 취소하는 기준을 생성할 수 있습니다. 예를 들어, 이 구성을 사용하여 다음과 같은 경우 작업을 취소할 수 있습니다.
+ 임계값 비율의 디바이스가 작업 실행 알림을 받지 못하는 경우(예: 디바이스가 무선 업데이트(OTA)와 호환되지 않는 경우). 이 경우 디바이스가 `REJECTED` 상태를 보고할 수 있습니다.
+ 임계값 비율의 디바이스가 작업 실행에 대해 실패를 보고하는 경우(예: Amazon S3 URL에서 작업 문서를 다운로드하려고 할 때 디바이스 연결이 끊어지는 경우). 이와 같은 경우 디바이스는 `FAILURE` 상태를 AWS IoT에 보고하도록 프로그래밍되어야 합니다.
+ 작업 실행이 시작된 후 임계값 비율의 디바이스에 대해 작업 실행이 시간 초과되어 `TIMED_OUT` 상태가 보고되는 경우.
+ 재시도 실패가 여러 번 있는 경우. 재시도 구성을 추가하는 경우 각 재시도가 AWS 계정에 추가 요금을 발생시킬 수 있습니다. 이와 같은 경우 작업을 취소하면 대기열에 있는 작업 실행을 취소하고 이러한 실행에 대한 재시도를 방지할 수 있습니다. 재시도 구성 및 이 구성을 중단 구성과 함께 사용하는 것에 대한 자세한 내용은 [작업 실행 제한 시간 및 재시도 구성](#job-timeout-retry) 섹션을 참조하세요.

 AWS IoT 콘솔 또는 작업 API를 사용하여 AWS IoT 작업 중단 조건을 설정할 수 있습니다.

## 작업 실행 제한 시간 및 재시도 구성
<a name="job-timeout-retry"></a>

작업 실행 제한 시간 구성을 사용하면 작업 실행이 설정된 기간보다 오래 진행되는 경우 [작업 알림](jobs-comm-notifications.md)을 전송할 수 있습니다. 작업 실행 재시도 구성을 사용하면 작업이 실패하거나 시간 초과되는 경우 실행을 재시도할 수 있습니다.

### 작업 실행 시간 제한 구성
<a name="job-timeout-configuration"></a>

작업 실행 시간 제한 구성을 사용하면 작업 실행이 예상치 않게 장시간 동안 `IN_PROGRESS` 상태에 멈출 때마다 알림을 받을 수 있습니다. 작업이 `IN_PROGRESS` 상태이면 작업 실행의 진행 상황을 모니터링할 수 있습니다.

#### 작업 시간 제한 타이머
<a name="job-timeout-timers"></a>

타이머에는 진행 중 타이머와 단계 타이머 두 가지 유형이 있습니다.

**진행 중 타이머**  
작업 또는 작업 템플릿을 생성할 때 진행 중 타이머에 1분에서 7일 사이의 값을 지정할 수 있습니다. 작업 실행 전에는 이 타이머의 값을 업데이트할 수 있습니다. 타이머가 시작된 후에는 업데이트할 수 없으며 타이머 값은 해당 작업의 모든 작업 실행에 적용됩니다. 작업 실행이이 간격보다 오래 `IN_PROGRESS` 상태를 유지할 때마다 작업 실행이 실패하고 터미널 `TIMED_OUT` 상태로 전환됩니다. AWS IoT 또한는 MQTT 알림을 게시합니다.

**단계 타이머**  
업데이트하려는 작업 실행에만 적용되는 단계 타이머를 설정할 수도 있습니다. 이 타이머는 진행 중 타이머에는 영향을 주지 않습니다. 작업 실행을 업데이트할 때마다 이 타이머에 대해 새 값을 설정할 수 있습니다. 사물에 대해 대기 중인 다음 작업 실행을 시작할 때 새 단계 타이머를 생성할 수도 있습니다. 작업 실행이 단계 타이머 간격보다 오랫동안 `IN_PROGRESS` 상태를 유지하는 경우, 해당 작업 실행은 실패하며 터미널 상태인 `TIMED_OUT`으로 전환됩니다.

**참고**  
 AWS IoT 콘솔 또는 AWS IoT 작업 API를 사용하여 진행 중인 타이머를 설정할 수 있습니다. 단계 타이머를 지정하려면 API를 사용합니다.

#### 작업 시간 제한에 대해 타이머가 작동하는 방식
<a name="job-timeout-timers-works"></a>

다음은 20분 시간 제한 기간 동안 진행 중 시간 제한과 단계 시간 제한이 서로 상호 작용하는 방식을 설명합니다.

![\[진행 중인 타이머가 20분이고 중첩된 단계 타이머가 7, 5, 8분인 타임라인입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/timeout-diagram.png)


다음은 여러 단계를 보여줍니다.

1. 

**12:00**  
새 작업이 생성되고 작업을 생성할 때 20분 동안 진행 중 타이머가 시작됩니다. 진행 중 타이머가 실행되기 시작하고 작업 실행은 `IN_PROGRESS` 상태로 전환됩니다.

1. 

**12:05 PM**  
7분 값으로 새 단계 타이머가 생성됩니다. 이제 작업 실행이 오후 12시 12분에 시간 초과됩니다.

1. 

**12:10 PM**  
5분 값으로 새 단계 타이머가 생성됩니다. 새 단계 타이머가 생성되면 이전 단계 타이머가 삭제되고 이제 작업 실행은 오후 12시 15분에 시간 초과됩니다.

1. 

**12:13 PM**  
9분 값으로 새 단계 타이머가 생성됩니다. 이전 단계 타이머가 삭제되고 이제 작업 실행은 진행 중 타이머가 오후 12시 20분에 시간 초과되므로 오후 12시 20분에 시간 초과됩니다. 단계 타이머는 진행 중 타이머의 절대 한계를 초과할 수 없습니다.

### 작업 실행 재시도 구성
<a name="job-retry-configuration"></a>

재시도 구성을 사용하여 특정 조건 집합이 충족될 때 작업 실행을 재시도할 수 있습니다. 작업이 시간 초과되거나 디바이스가 실패할 때 재시도를 시도할 수 있습니다. 시간 제한 실패로 인해 실행을 재시도하려면 시간 제한 구성을 사용하도록 설정해야 합니다.

**재시도 구성 사용 방법**  
다음 단계에 따라 구성을 재시도합니다.

1. `FAILED`, `TIMED_OUT` 또는 두 실패 기준 모두에 대해 재시도 구성을 사용할지 여부를 결정합니다. `TIMED_OUT` 상태의 경우 상태가 보고되면 AWS IoT 작업에서 디바이스에 대한 작업 실행을 자동으로 재시도합니다.

1. `FAILED` 상태의 경우 작업 실행 실패를 재시도할 수 있는지 확인합니다. 재시도 가능한 경우 디바이스를 `FAILURE` 상태를 AWS IoT에 보고하도록 프로그래밍합니다. 다음 섹션에서는 재시도 가능한 실패와 재시도 불가능한 실패에 대해 자세히 설명합니다.

1. 앞의 정보를 사용하여 각 실패 유형에 사용할 재시도 횟수를 지정합니다. 단일 디바이스의 경우 두 실패 유형을 모두 합하여 최대 10회의 재시도를 지정할 수 있습니다. 재시도는 실행이 성공하거나 지정된 시도 횟수에 도달하면 자동으로 중지됩니다.

1. 반복적으로 재시도가 실패하는 경우 많은 재시도 횟수로 인해 추가 요금이 발생하지 않도록 작업을 취소하려면 중단 구성을 추가합니다.

**참고**  
작업이 반복 유지 관리 기간 종료에 도달하면 모든 `IN_PROGRESS` 작업 실행은 최종 상태에 도달할 때까지 작업 문서에 명시된 작업을 계속 수행합니다. 작업 실행이 최종 상태인 `FAILED` 또는 유지 관리 기간을 벗어난 `TIMED_OUT` 상태에 도달하면 시도 횟수가 모두 소진되지 않았으면 다음 기간에 재시도가 이루어집니다. 다음 유지 관리 기간의 `startTime`에 새 작업 실행이 생성되고 디바이스를 시작할 준비가 될 때까지 `QUEUED`의 상태가 됩니다.

**재시도 및 중단 구성**  
재시도할 때마다에 추가 요금이 발생합니다 AWS 계정. 반복적인 재시도 실패로 인한 추가 요금이 발생하지 않도록 하려면 중단 구성을 추가하는 것이 좋습니다. 요금에 대한 자세한 내용은 [AWS IoT Device Management 요금](https://aws.amazon.com/iot-device-management/pricing/)을 참조하세요.

높은 임계값 비율의 디바이스가 시간 초과되거나 실패를 보고하는 경우 재시도 실패 여러 번 발생할 수 있습니다. 이 경우 중단 구성을 사용하여 작업을 취소하고 대기열에 있는 모든 작업 실행이나 추가적인 재시도를 방지할 수 있습니다.

**참고**  
작업 실행을 취소하기 위한 중단 기준이 충족되는 경우 `QUEUED` 작업 실행만 취소됩니다. 대기열에 있는 디바이스에 대한 재시도는 시도되지 않습니다. 그러나 `IN_PROGRESS` 상태인 현재 작업 실행은 취소되지 않습니다.

또한 실패한 작업 실행을 재시도하기 전에 다음 섹션에 설명된 대로 작업 실행 실패가 재시도 가능한지 여부를 확인하는 것이 좋습니다.

**`FAILED` 실패 유형에 대한 재시도**  
`FAILED` 실패 유형에 대한 재시도를 시도하려면 디바이스를 실패한 작업 실행에 대한 `FAILURE` 상태를 AWS IoT에 보고하도록 프로그래밍해야 합니다. `FAILED` 작업 실행을 재시도하는 기준으로 재시도 구성을 설정하고 수행할 재시도 횟수를 지정해야 합니다. AWS IoT 작업이 `FAILURE` 상태를 감지하면 디바이스에 대한 작업 실행을 자동으로 재시도합니다. 재시도는 작업 실행이 성공하거나 최대 재시도 횟수에 도달할 때까지 계속됩니다.

각 재시도 및 이러한 디바이스에서 실행 중인 작업을 추적할 수 있습니다. 실행 상태를 추적하여 지정된 횟수의 재시도가 시도된 후 디바이스를 사용하여 실패를 보고하고 다른 재시도를 초기화할 수 있습니다.

**재시도 가능한 실패와 재시도 불가능한 실패**  
작업 실행 실패는 재시도 가능하거나 재시도 불가능할 수 있습니다. 각 재시도 시 AWS 계정에 요금이 부과될 수 있습니다. 여러 번의 재시도로 인해 추가 요금이 발생하지 않도록 하려면 먼저 작업 실행 실패가 재시도 가능한지 여부를 확인하는 것이 좋습니다. 재시도 가능한 실패의 예로는 Amazon S3 URL에서 작업 문서를 다운로드하려고 시도하는 동안 디바이스에서 발생하는 연결 오류가 있습니다. 작업 실행 실패가 재시도 가능하면 작업 실행이 실패한 경우 `FAILURE` 상태를 보고하도록 디바이스를 프로그래밍합니다. 그런 다음 `FAILED` 실행을 재시도하도록 재시도 구성을 설정합니다.

실행을 재시도할 수 없는 경우 재시도하거나 계정에 추가 요금이 부과될 가능성이 없도록 `REJECTED` 상태를 AWS IoT에 보고하도록 디바이스를 프로그래밍하는 것이 좋습니다. 재시도 불가능한 실패의 예로는 디바이스가 작업 업데이트 수신과 호환되지 않는 경우 또는 작업을 실행하는 동안 메모리 오류가 발생하는 경우를 들 수 있습니다. 이러한 경우 AWS IoT 작업은 `FAILED` 또는 `TIMED_OUT` 상태를 감지할 때만 작업 실행을 재시도하기 때문에 작업 실행을 재시도하지 않습니다.

작업 실행 실패가 재시도 가능하다고 확인된 후에도 재시도가 여전히 실패할 경우 디바이스 로그를 확인하는 것이 좋습니다.

**참고**  
선택적 예약 구성이 있는 작업이 해당 `endTime`에 도달하면, `endBehavior`가 대상 그룹의 나머지 모든 디바이스에 대한 작업 문서 롤아웃을 중지하고 나머지 작업 실행을 진행하는 방법을 결정합니다. 재시도 구성을 통해 선택한 경우 재시도됩니다.

**`TIMEOUT` 실패 유형에 대한 재시도**  
작업을 생성할 때 제한 시간을 활성화하면 상태가에서 로 변경될 때 AWS IoT 작업이 디바이스에 대한 작업 실행을 다시 시도`IN_PROGRESS`합니다`TIMED_OUT`. 이 상태 변경은 진행 중 타이머가 시간 초과되거나 지정한 단계 타이머가 `IN_PROGRESS` 상태이다가 시간 초과될 경우 발생할 수 있습니다. 재시도는 작업 실행이 성공하거나 이 실패 유형에 대한 최대 재시도 횟수에 도달할 때까지 계속됩니다.

**연속 작업 및 사물 그룹 멤버십 업데이트**  
작업 상태가 `IN_PROGRESS`인 연속 작업의 경우 사물의 그룹 멤버십이 업데이트되면 재시도 횟수가 0으로 재설정됩니다. 예를 들어, 다섯 번의 재시도 횟수를 지정했고 세 번의 재시도가 이미 수행되었다고 가정해 보겠습니다. 이제 동적 사물 그룹의 경우와 같이 사물이 사물 그룹에서 제거되었다가 그룹에 다시 가입하면 재시도 횟수가 0으로 재설정됩니다. 이제 사물 그룹에 대해 남은 두 번의 시도 대신 다섯 번의 재시도를 수행할 수 있습니다. 또한 사물 그룹에서 사물이 제거되면 추가 재시도 시도가 취소됩니다.

# 추가 구성 지정
<a name="jobs-configurations-specify"></a>

작업 또는 작업 템플릿을 생성할 때 이러한 추가 구성을 지정할 수 있습니다. 다음은 이러한 구성을 지정할 수 있는 경우를 보여 줍니다.
+ 사용자 정의 작업 템플릿을 생성하는 경우. 템플릿에서 작업을 생성할 때 지정한 추가 구성 설정이 저장됩니다.
+ 작업 파일을 사용하여 사용자 정의 작업을 생성하는 경우. 작업 파일은 S3 버킷에 업로드되는 JSON 파일일 수 있습니다.
+ 사용자 정의 작업 템플릿을 사용하여 사용자 정의 작업을 생성하는 경우. 이미 템플릿에 이러한 설정이 지정된 경우 설정을 재사용하거나 새 구성 설정을 지정하여 재정의할 수 있습니다.
+  AWS 관리형 템플릿을 사용하여 사용자 지정 작업을 생성하는 경우.

**Topics**
+ [를 사용하여 작업 구성 지정 AWS Management Console](job-configurations-console.md)
+ [작업 API를 사용하여 AWS IoT 작업 구성 지정](job-configurations-api.md)

# 를 사용하여 작업 구성 지정 AWS Management Console
<a name="job-configurations-console"></a>

 AWS IoT 콘솔을 사용하여 작업에 대한 다양한 구성을 추가할 수 있습니다. 작업을 생성한 후 작업 세부 정보 페이지에서 작업 구성의 상태 세부 정보를 확인할 수 있습니다. 다양한 구성 및 구성 작동 방식에 대한 자세한 내용은 [작업 구성 작동 방식](jobs-configurations-details.md) 섹션을 참조하세요.

작업 또는 작업 템플릿을 생성할 때 작업 구성을 추가합니다.

**사용자 정의 작업 템플릿을 생성하는 경우**  
사용자 정의 작업 템플릿을 생성할 때 롤아웃 구성을 지정하려면

1. [AWS IoT 콘솔의 작업 템플릿 허브로](https://console.aws.amazon.com/iot/home#/jobtemplatehub) 이동하여 **작업 템플릿 생성을** 선택합니다.

1. 작업 템플릿 속성을 지정하고, 작업 문서를 제공하고, 추가할 구성을 확장한 다음 구성 파라미터를 지정합니다.

**사용자 정의 작업을 생성하는 경우**  
사용자 정의 작업을 생성할 때 롤아웃 구성을 지정하려면

1. [AWS IoT 콘솔의 작업 허브로](https://console.aws.amazon.com/iot/home#/jobhub) 이동하여 **작업 생성을** 선택합니다.

1. **사용자 정의 작업 생성(Create a custom job)**을 선택하고 작업 속성, 대상 및 작업 문서에 대해 작업 파일 또는 템플릿을 사용할지 여부를 지정합니다. 사용자 지정 템플릿 또는 AWS 관리형 템플릿을 사용할 수 있습니다.

1. 작업 구성을 선택한 다음 **롤아웃 구성(Rollout configuration)**을 확장하여 **상수 속도(Constant rate)**를 사용할지, 아니면 **지수 속도(Exponential rate)**를 사용할지를 지정합니다. 그런 다음 구성 파라미터를 지정합니다.

다음 섹션에서는 각 구성에 대해 지정할 수 있는 파라미터를 보여줍니다.

## 롤아웃 구성
<a name="job-rollout-console"></a>

상수 롤아웃 속도를 사용할지, 아니면 지수 속도를 사용할지를 지정할 수 있습니다.
+ 

**상수 롤아웃 속도 설정**  
작업 실행에 대해 상수 속도를 설정하려면 **상수 속도**를 선택한 다음 속도의 상한에 대한 **분당 최대**를 지정합니다. 이 값은 선택 사항이며 범위는 1\$11,000입니다. 이 값을 설정하지 않으면 1,000이 기본값으로 사용됩니다.
+ 

**기하급수적 롤아웃 속도 설정**  
기하급수적 속도를 설정하려면 **지수 속도(Exponential rate)**를 선택하고 다음 파라미터를 지정합니다.
  + 

**분당 기본 속도**  
**속도 증가 기준**에서 **알림을 받은 디바이스 수** 또는 **성공한 디바이스 수** 임계값이 충족될 때까지 작업이 실행되는 속도입니다.
  + 

**증분 계수**  
**속도 증가 기준(Rate increase criteria)**에서 **알림을 받는 디바이스 수(Number of notified devices)** 또는 **성공한 디바이스 수(Number of succeeded devices)** 임계값이 충족된 후 롤아웃 속도 증가에 사용되는 지수 인자입니다.
  + 

**속도 증가 기준**  
**알림을 받는 디바이스 수(Number of notified devices)** 또는 **성공한 디바이스 수(Number of succeeded devices)**에 대한 임계값입니다.

## 중단 구성
<a name="job-abort-console"></a>

**새 구성 추가(Add new configuration)**를 선택하고 각 구성에 대해 다음 파라미터를 지정합니다.
+ 

**실패 유형**  
작업 중단을 시작하는 실패 유형을 지정합니다. 여기에는 **FAILED**, **REJECTED**, **TIMED\$1OUT** 또는 **ALL**이 포함됩니다.
+ 

**증분 계수**  
작업 중단 기준이 충족되기 전에 발생해야 하는 완료된 작업 실행 수를 지정합니다.
+ 

**임계값 비율**  
작업 중단을 시작하는 실행된 총 사물 수를 지정합니다.

## 예약 구성
<a name="job-scheduling-console"></a>

각 작업을 처음 생성 시 바로 시작하거나 이후 날짜 및 시간에 시작되도록 예약하거나 반복 유지 관리 기간에 시작하도록 할수 있습니다.

**새 구성 추가(Add new configuration)**를 선택하고 각 구성에 대해 다음 파라미터를 지정합니다.
+ 

**Job start(작업 시작)**  
작업이 시작될 날짜와 시간을 지정합니다.
+ 

**반복 유지 관리 기간**  
반복 유지 관리 기간은 작업이 작업의 대상 디바이스에 작업 문서를 배포할 수 있는 특정 날짜 및 시간을 정의합니다. 유지 관리 기간은 매일, 매주, 매월 또는 사용자 지정 날짜 및 시간에 반복될 수 있습니다.
+ 

**Job end(작업 종료)**  
작업이 종료될 날짜와 시간을 지정합니다.
+ 

**Job end behavior(작업 종료 동작)**  
작업이 끝날 때 완료되지 않은 모든 작업 실행에 대한 종료 동작을 선택합니다.

**참고**  
선택적 예약 구성과 종료 시간이 있는 작업이 해당 종료 시간에 도달하면 대상 그룹의 나머지 모든 디바이스에 대한 롤아웃을 중지합니다. 또한 나머지 작업 실행을 진행하는 방법에 대해 선택한 종료 동작과 재시도 구성에 따른 재시도를 활용합니다.

## 제한 시간 구성
<a name="job-timeout-console"></a>

기본적으로 제한 시간이 없으며 작업 실행은 취소되거나 삭제됩니다. 제한 시간을 사용하려면 **제한 시간 활성화**를 선택하고 1분에서 7일 사이의 제한 시간 값을 지정합니다.

## 재시도 구성
<a name="job-retry-console"></a>

**참고**  
작업이 생성된 후에는 재시도 횟수를 업데이트할 수 없습니다. 모든 실패 유형에 대한 재시도 구성을 제거할 수만 있습니다. 작업을 생성할 때 구성에 사용할 적절한 재시도 횟수를 고려합니다. 잠재적인 재시도 실패로 인해 과도한 비용이 발생하지 않도록 하려면 중단 구성을 추가합니다.

**새 구성 추가(Add new configuration)**를 선택하고 각 구성에 대해 다음 파라미터를 지정합니다.
+ 

**실패 유형**  
작업 실행 재시도를 트리거해야 하는 실패 유형을 지정합니다. 여기에는 **실패(Failed)**, **제한 시간(Timeout)** 및 **모두(All)**가 포함됩니다.
+ 

**재시도 횟수**  
선택한 **실패 유형(Failure type)**에 대한 재시도 횟수를 지정합니다. 두 실패 유형을 합하여 최대 10번의 재시도를 시도할 수 있습니다.

# 작업 API를 사용하여 AWS IoT 작업 구성 지정
<a name="job-configurations-api"></a>

[CreateJob](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html) 또는 [CreateJobTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJobTemplate.html) API를 사용하여 다양한 작업 구성을 지정할 수 있습니다. 다음 섹션에서는 이러한 구성을 추가하는 방법을 설명합니다. 구성을 추가한 후 [JobExecutionSummary](https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecutionSummary.html) 및 [JobExecutionSummaryForJob](https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecutionSummaryForJob.html)을 사용하여 상태를 볼 수 있습니다.

다양한 구성 및 구성 작동 방식에 대한 자세한 내용은 [작업 구성 작동 방식](jobs-configurations-details.md) 섹션을 참조하세요.

## 롤아웃 구성
<a name="job-rollout-api"></a>

롤아웃 구성에 대해 상수 롤아웃 속도 또는 기하급수적 롤아웃 속도를 지정할 수 있습니다.
+ 

**상수 롤아웃 속도 설정**  
상수 롤아웃 속도를 설정하려면 [https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecutionsRolloutConfig.html](https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecutionsRolloutConfig.html) 객체를 사용하여 `maximumPerMinute` 파라미터를 `CreateJob` 요청에 추가합니다. 이 파라미터는 작업 실행이 발생할 수 있는 속도의 상한을 지정합니다. 이 값은 선택 사항이며 범위는 1\$11,000입니다. 이 값을 설정하지 않으면 1,000이 기본값으로 사용됩니다.

  ```
      "jobExecutionsRolloutConfig": {
          "maximumPerMinute": 1000
      }
  ```
+ 

**기하급수적 롤아웃 속도 설정**  
가변 작업 롤아웃 속도를 설정하려면 [https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecutionsRolloutConfig.html](https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecutionsRolloutConfig.html) 객체를 사용합니다. `CreateJob` API 작업을 실행할 때 `ExponentialRolloutRate` 속성을 구성할 수 있습니다. 다음 예에서는 `exponentialRate` 파라미터를 사용하여 기하급수적 롤아웃 속도를 설정합니다. 파라미터에 대한 자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_ExponentialRolloutRate.html](https://docs.aws.amazon.com/iot/latest/apireference/API_ExponentialRolloutRate.html) 섹션을 참조하세요.

  ```
  {
  ...
    "jobExecutionsRolloutConfig": {
      "exponentialRate": {
        "baseRatePerMinute": 50,
        "incrementFactor": 2,
        "rateIncreaseCriteria": {
          "numberOfNotifiedThings": 1000,
          "numberOfSucceededThings": 1000
        },
        "maximumPerMinute": 1000
      }
    }
  ...
  }
  ```

여기서 파라미터는 다음과 같습니다.

**baseRatePerMinute**  
`numberOfNotifiedThings` 또는 `numberOfSucceededThings` 임계값이 충족될 때까지 작업이 실행되는 속도를 지정합니다.

**incrementFactor**  
`numberOfNotifiedThings` 또는 `numberOfSucceededThings` 임계값이 충족된 후 롤아웃 속도 증가의 기준이 되는 지수 인자를 지정합니다.

**rateIncreaseCriteria**  
`numberOfNotifiedThings` 또는 `numberOfSucceededThings` 임계값을 지정합니다.

## Abort configuration(중단 구성)
<a name="job-abort-api"></a>

API를 사용하여 이 구성을 추가하려면 [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html) 또는 [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJobTemplate.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJobTemplate.html) API 작업을 실행할 때 [https://docs.aws.amazon.com/iot/latest/apireference/API_AbortConfig.html](https://docs.aws.amazon.com/iot/latest/apireference/API_AbortConfig.html) 파라미터를 지정합니다. 다음 예제에서는 `CreateJob` API 작업에 지정된 대로 여러 번의 실패한 실행이 발생한 작업 롤아웃에 대한 중단 구성을 보여줍니다.

**참고**  
작업 실행 삭제는 완료된 전체 실행의 계산 값에 영향을 미칩니다. 작업이 중단되면 서비스는 자동화된 `comment` 및 `reasonCode`을 생성해 사용자 주도 취소를 작업 중단 취소와 구분합니다.

```
   "abortConfig": { 
      "criteriaList": [ 
         { 
            "action": "CANCEL",
            "failureType": "FAILED",
            "minNumberOfExecutedThings": 100,
            "thresholdPercentage": 20
         },
         { 
            "action": "CANCEL",
            "failureType": "TIMED_OUT",
            "minNumberOfExecutedThings": 200,
            "thresholdPercentage": 50
         }
      ]
    }
```

여기서 파라미터는 다음과 같습니다.

**action**  
중단 기준 충족 시 취할 조치를 지정합니다. 이는 필수 파라미터로, `CANCEL`이 유일하게 유효한 값입니다.

**failureType**  
작업 중단을 시작해야 하는 실패 유형을 지정합니다. 유효한 값은 `FAILED`, `REJECTED`, `TIMED_OUT` 및 `ALL`입니다.

**minNumberOfExecutedThings**  
작업 중단 기준이 충족되기 전에 발생해야 하는 완료된 작업 실행 수를 지정합니다. 이 예제에서 AWS IoT 는 100개 이상의 디바이스에서 작업 실행을 완료할 때까지 작업 중단이 발생해야 하는지 확인하지 않습니다.

**thresholdPercentage**  
작업 중단을 시작할 수 있는 작업이 실행된 총 사물 수를 지정합니다. 이 예제에서는 순차적으로를 AWS IoT 확인하고 임계값 백분율이 충족되면 작업 중단을 시작합니다. 100번의 실행이 완료된 후 전체 실행의 20% 이상이 실패하는 경우 작업 롤아웃이 취소됩니다. 이 기준이 충족되지 않으면 AWS IoT 는 완료된 실행의 50% 이상이 200회 실행이 완료된 후 시간 초과되었는지 확인합니다. 이 경우 작업 롤아웃이 취소됩니다.

## Scheduling configuration(예약 구성)
<a name="job-scheduling-api"></a>

API를 사용하여 이 구성을 추가하려면 [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html) 또는 [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJobTemplate.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJobTemplate.html) API 작업을 실행할 때 선택적 [https://docs.aws.amazon.com/iot/latest/apireference/API_SchedulingConfig.html](https://docs.aws.amazon.com/iot/latest/apireference/API_SchedulingConfig.html)를 지정합니다.

```
    "SchedulingConfig": { 
      "endBehavior": string
      "endTime": string
      "maintenanceWindows": string
      "startTime": string
   }
```

여기서 파라미터는 다음과 같습니다.

startTime****  
작업이 시작될 날짜와 시간을 지정합니다.

**endTime**  
작업이 종료될 날짜와 시간을 지정합니다.

**maintenanceWindows**  
작업 문서를 대상 그룹의 모든 디바이스에 롤아웃하기 위해 예약된 작업에 대해 선택적 유지 관리 기간을 선택했는지를 지정합니다. `maintenanceWindow`의 문자열 형식은 날짜의 경우 YYYYY/MM/DD이고 시간의 경우 hh:mm입니다.

**endBehavior**  
`endTime`에 도달할 때 예약된 작업의 작업 동작을 지정합니다.

**참고**  
작업에 대한 선택적 `SchedulingConfig`는 [https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeJob.html](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeJob.html) 및 [https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeJobTemplate.html](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeJobTemplate.html) API에서 볼 수 있습니다.

## 제한 시간 구성
<a name="job-timeout-api"></a>

API를 사용하여 이 구성을 추가하려면 [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html) 또는 [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJobTemplate.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJobTemplate.html) API 작업을 실행할 때 [https://docs.aws.amazon.com/iot/latest/apireference/API_TimeoutConfig.html](https://docs.aws.amazon.com/iot/latest/apireference/API_TimeoutConfig.html) 파라미터를 지정합니다.

제한 시간 구성을 사용하려면

1. 작업 또는 작업 템플릿을 생성할 때 진행 중 타이머를 설정하려면 선택 사항인 [TimeoutConfig](https://docs.aws.amazon.com//iot/latest/apireference/API_TimeoutConfig.html) 객체의 `inProgressTimeoutInMinutes` 속성에 값을 설정합니다.

   ```
       "timeoutConfig": { 
         "inProgressTimeoutInMinutes": number
      }
   ```

1. 작업 실행을 위한 단계 타이머를 지정하려면 [UpdateJobExecution](https://docs.aws.amazon.com//iot/latest/apireference/API_iot-jobs-data_UpdateJobExecution.html)을 호출할 때 `stepTimeoutInMinutes`에 값을 설정합니다. 단계 타이머는 업데이트하는 작업 실행에만 적용됩니다. 작업 실행을 업데이트할 때마다 이 타이머에 대해 새 값을 설정할 수 있습니다.
**참고**  
`UpdateJobExecution`은 -1 값으로 새 단계 타이머를 생성함으로써 이미 생성된 단계 타이머를 폐기할 수 없습니다.

   ```
   {
      ... 
       "statusDetails": { 
         "string" : "string" 
      },
      "stepTimeoutInMinutes": number
   }
   ```

1. 새 단계 타이머를 생성하려면 [StartNextPendingJobExecution](https://docs.aws.amazon.com//iot/latest/apireference/API_iot-jobs-data_StartNextPendingJobExecution.html) API 작업을 호출할 수도 있습니다.

## 재시도 구성
<a name="job-retry-api"></a>

**참고**  
작업을 생성할 때 구성에 사용할 적절한 재시도 횟수를 고려합니다. 잠재적인 재시도 실패로 인해 과도한 비용이 발생하지 않도록 하려면 중단 구성을 추가합니다. 작업이 생성된 후에는 재시도 횟수를 업데이트할 수 없습니다. [UpdateJob](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateJob.html) API 작업을 사용하여 재시도 횟수를 0으로만 설정할 수 있습니다.

API를 사용하여 이 구성을 추가하려면 [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html) 또는 [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJobTemplate.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJobTemplate.html) API 작업을 실행할 때 [https://docs.aws.amazon.com/iot/latest/apireference/API_jobExecutionsRetryConfig.html](https://docs.aws.amazon.com/iot/latest/apireference/API_jobExecutionsRetryConfig.html) 파라미터를 지정합니다.

```
{
...
  "jobExecutionsRetryConfig": { 
      "criteriaList": [ 
         { 
            "failureType": "string",
            "numberOfRetries": number
         }
      ]
  }
...
}
```

여기서 **criteriaList**는 작업의 각 실패 유형에 대해 허용되는 재시도 횟수를 결정하는 기준 목록을 지정하는 배열입니다.

# 디바이스와 작업
<a name="jobs-devices"></a>

디바이스는 MQTT, HTTP 서명 버전 4 또는 HTTP TLS를 사용하여 AWS IoT작업과 통신할 수 있습니다. 디바이스가 AWS IoT작업과 통신할 때 사용할 엔드포인트를 확인하려면 **DescribeEndpoint** 명령을 실행합니다. 예를 들면 다음 명령을 실행하는 경우

```
aws iot describe-endpoint --endpoint-type iot:Data-ATS
```

다음과 같은 결과가 출력됩니다.

```
{
    "endpointAddress": "a1b2c3d4e5f6g7-ats.iot.us-west-2.amazonaws.com"
}
```

## MQTT 프로토콜 사용
<a name="jobs-using-mqtt"></a>

디바이스는 MQTT 프로토콜을 사용하여 AWS IoT작업과 통신할 수 있습니다. 디바이스는 MQTT 주제를 구독하여 새 작업에 대한 알림을 받고 AWS IoT작업 서비스로부터 응답을 받습니다. 또한 MQTT 주제에 게시하여 작업 시작 상태에 대한 쿼리를 실행하거나 업데이트하기도 합니다. 또한 디바이스마다 자체적으로 일반 MQTT 주제가 있습니다. MQTT 주제 게시 및 구독에 대한 자세한 내용은 [디바이스 통신 프로토콜](protocols.md) 단원을 참조하세요.

이 통신 방법을 사용하면 디바이스가 디바이스별 인증서와 프라이빗 키를 사용하여 AWS IoT작업으로 인증합니다.

디바이스는 다음 주제를 구독할 수 있습니다. `thing-name`은 디바이스와 연결된 사물의 이름입니다.
+ 

**`$aws/things/thing-name/jobs/notify`**  
보류 중인 작업 시작 목록에서 작업 시작이 추가되거나 제거될 때 알림을 받으려면 이 주제를 구독합니다.
+ 

**`$aws/things/thing-name/jobs/notify-next`**  
보류 중인 다음 작업 실행이 변경될 때 알림을 받으려면 이 주제를 구독합니다.
+ 

**`$aws/things/thing-name/jobs/request-name/accepted`**  
AWS IoT작업 서비스는 MQTT 주제에 성공 및 실패 메시지를 게시합니다. 이 주제는 요청에 사용된 주제에 `accepted` 또는 `rejected`를 추가해 구성합니다. 여기서 `request-name`는 `Get`와 같은 요청의 이름이며 주제는 `$aws/things/myThing/jobs/get`.AWS IoTJobs가 `$aws/things/myThing/jobs/get/accepted` 주제에 성공 메시지를 게시할 수 있습니다.
+ 

**`$aws/things/thing-name/jobs/request-name/rejected`**  
여기서 `request-name`은 `Get`과 같은 요청의 이름입니다. 요청이 실패하면 AWS IoT작업에서 `$aws/things/myThing/jobs/get/rejected` 주제에 실패 메시지를 게시합니다.

다음 HTTPS API 작업을 사용할 수도 있습니다.
+ [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_UpdateJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_UpdateJobExecution.html) API를 호출하여 작업 실행 상태를 업데이트할 수 있습니다.
+ [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html) API를 호출하여 작업 실행 상태에 대한 쿼리를 실행할 수 있습니다.
+ [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_GetPendingJobExecutions.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_GetPendingJobExecutions.html) API를 호출하여 대기 중인 작업 실행 목록을 가져올 수 있습니다.
+ `jobId`를 `$next`로 사용하여 [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html) API를 호출하여 다음 보류 중인 작업 실행을 가져올 수 있습니다.
+ [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_StartNextPendingJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_StartNextPendingJobExecution.html) API를 호출하여 다음 대기 중인 작업 실행을 가져와 시작할 수 있습니다.

## HTTP 서명 버전 4 사용
<a name="jobs-using-http-v4"></a>

디바이스는 포트 443에서 HTTP 서명 버전 4를 사용하여 AWS IoT작업과 통신할 수 있습니다. 이는 AWS SDK와 CLI에 의해 사용되는 방법입니다. 이러한 도구에 대한 자세한 내용은 [AWS CLI 명령 참조: iot-jobs-data](https://docs.aws.amazon.com/cli/latest/reference/iot-jobs-data/index.html) 또는 [AWS SDK 및 도구](https://aws.amazon.com/tools/#sdk)와 기본 언어의 IotJobsDataPlane 단원을 참조하세요.

이 통신 방법을 사용하면 디바이스가 IAM 자격 증명을 사용하여 AWS IoT작업으로 인증합니다.

이 방법을 사용하는 경우 다음 명령을 사용할 수 있습니다.
+ **DescribeJobExecution**

  `aws iot-jobs-data describe-job-execution ...` 
+ **GetPendingJobExecutions**

  `aws iot-jobs-data get-pending-job-executions ...` 
+ **StartNextPendingJobExecution**

  `aws iot-jobs-data start-next-pending-job-execution ...` 
+ **UpdateJobExecution**

  `aws iot-jobs-data update-job-execution ...` 

## HTTP TLS 사용
<a name="jobs-using-http-tls"></a>

디바이스는이 프로토콜을 지원하는 타사 소프트웨어 클라이언트를 사용하여 포트 8443에서 HTTP TLS를 사용하여 AWS IoT작업과 통신할 수 있습니다.

디바이스는 이 방법으로 X.509 인증서 기반 인증을 사용합니다(예: 디바이스별 인증서 및 프라이빗 키).

이 방법을 사용하는 경우 다음 명령을 사용할 수 있습니다.
+ **DescribeJobExecution**
+ **GetPendingJobExecutions**
+ **StartNextPendingJobExecution**
+ **UpdateJobExecution**

## 작업 서비스와 작업할 수 있도록 디바이스를 프로그래밍
<a name="programming-devices"></a>

이 섹션의 예제에서는 MQTT를 사용하여 디바이스가 AWS IoT 작업 서비스와 작업하는 방식을 보여줍니다. 또는 해당 API 또는 CLI 명령을 사용할 수 있습니다. 여기 예제에서는 `MyThing` 디바이스가 다음 MQTT 주제를 구독한다고 가정합니다.
+ `$aws/things/MyThing/jobs/notify`(또는 `$aws/things/MyThing/jobs/notify-next`)
+ `$aws/things/MyThing/jobs/get/accepted`
+ `$aws/things/MyThing/jobs/get/rejected`
+ `$aws/things/MyThing/jobs/jobId/get/accepted`
+ `$aws/things/MyThing/jobs/jobId/get/rejected`

 에 코드 서명을 사용하는 경우 AWS IoT디바이스 코드는 코드 파일의 서명을 확인해야 합니다. 이 서명은 작업 문서의 `codesign` 속성에 있습니다. 코드 파일 서명 확인에 대한 자세한 내용은 [디바이스 에이전트 샘플](https://github.com/aws/aws-iot-device-sdk-js#jobsAgent)을 참조하세요.

**Topics**
+ [작업 서비스와 작업할 수 있도록 디바이스를 프로그래밍](#programming-devices)
+ [디바이스 워크플로우](jobs-workflow-device-online.md)
+ [작업 워크플로](jobs-workflow-jobs-online.md)
+ [작업 알림](jobs-comm-notifications.md)

# 디바이스 워크플로우
<a name="jobs-workflow-device-online"></a>

디바이스는 다음 방법 중 하나를 사용하여 실행되는 작업을 처리할 수 있습니다.
+ 

**다음 작업 가져오기**

  1. 디바이스가 처음 온라인에 연결되면 해당 디바이스의 `notify-next` 주제를 구독해야 합니다.

  1. jobId `$next`와 함께 [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) MQTT API를 호출하고 `statusDetails`에 저장된 모든 상태를 포함하여 다음 작업, 작업 문서 및 기타 세부 정보를 가져옵니다. 작업 문서에 코드 파일 서명이 있는 경우 작업 요청을 진행하기 전에 서명을 확인해야 합니다.

  1. [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) MQTT API를 호출하여 작업 상태를 업데이트합니다. 혹은 이번 단계와 이전 단계를 단일 호출로 결합하고 싶다면 디바이스에서 [StartNextPendingJobExecution](jobs-mqtt-api.md#mqtt-startnextpendingjobexecution)을 호출해도 좋습니다.

  1. (선택 사항) [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) 또는 [StartNextPendingJobExecution](jobs-mqtt-api.md#mqtt-startnextpendingjobexecution)를 호출하면 `stepTimeoutInMinutes`에 대한 값을 설정하여 단계 타이머를 추가할 수 있습니다.

  1. 작업 진행 상황에 대해 보고하려면 [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) MQTT API를 사용하여 작업 문서에서 지정한 작업을 실행합니다.

  1. 이 jobId로 [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) MQTT API를 호출하여 작업 실행을 계속 모니터링합니다. 작업 실행이 삭제되면 [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution)에서 `ResourceNotFoundException`을 반환합니다.

     디바이스가 작업을 실행하는 동안 작업 실행이 취소되거나 삭제된 경우 디바이스는 유효한 상태로 복구할 수 있어야 합니다.

  1. 작업이 완료되면 [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) MQTT API를 호출하여 작업 상태를 업데이트하고 성공 또는 실패 여부를 보고합니다.

  1. 이번 작업의 실행 상태는 종료 상태로 바뀌었기 때문에 다음에 실행할 수 있는 작업(있는 경우)도 바뀝니다. 그러고 나서 디바이스에게도 다음 대기 중인 작업 실행이 바뀌었다는 알림 메시지가 수신됩니다. 이때는 디바이스가 2단계에서 설명한 대로 계속 진행되어야 합니다.

  디바이스가 계속해서 온라인 상태이면 보류 중인 다음 작업 실행에 대한 알림 메시지가 계속해서 수신됩니다. 여기에는 작업을 완료할 때 또는 보류 중인 작업 실행이 새롭게 추가될 때 작업 실행 데이터가 포함됩니다. 이때는 디바이스가 2단계에서 설명한 대로 계속 진행됩니다.
+ 

**사용 가능한 작업 중에서 선택**

  1. 디바이스가 처음 온라인에 연결되면 해당 사물의 `notify` 주제를 구독해야 합니다.

  1. [GetPendingJobExecutions](jobs-mqtt-api.md#mqtt-getpendingjobexecutions) MQTT API를 호출하여 대기 중인 작업 실행 목록을 가져옵니다.

  1. 목록에 작업 실행이 다수인 경우에는 하나를 선택합니다.

  1. [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) MQTT API를 호출하고 `statusDetails`에 저장된 모든 상태를 포함하여 작업 문서와 기타 세부 정보를 가져옵니다.

  1. [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) MQTT API를 호출하여 작업 상태를 업데이트합니다. 이 명령에서 `includeJobDocument` 필드가 `true`로 설정되어 있으면 디바이스가 이전 단계를 건너뛰고 이번 단계에서 작업 문서를 가져올 수 있습니다.

  1. 선택적으로, [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution)를 호출하면 `stepTimeoutInMinutes`에 대한 값을 설정하여 단계 타이머를 추가할 수 있습니다.

  1. 작업 진행 상황에 대해 보고하려면 [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) MQTT API를 사용하여 작업 문서에서 지정한 작업을 실행합니다.

  1. 이 jobId로 [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) MQTT API를 호출하여 작업 실행을 계속 모니터링합니다. 디바이스가 작업을 실행하는 동안 그 작업 실행이 취소되거나 삭제될 경우, 디바이스가 유효한 상태로 복구할 수 있어야 합니다.

  1. 작업이 완료되면 [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) MQTT API를 호출하여 작업 상태를 업데이트하고 성공 또는 실패 여부를 보고합니다.

  디바이스가 계속해서 온라인 상태이면 대기 중인 작업 실행이 새롭게 추가될 때 대기 중인 모든 작업 실행에 대해 알림 메시지가 수신됩니다. 이때는 디바이스가 2단계에서 설명한 대로 계속 진행할 수 있습니다.

디바이스가 작업을 수행할 수 없는 경우에는 [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) MQTT API를 호출하여 작업 상태를 `REJECTED`로 업데이트해야 합니다.

# 작업 워크플로
<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
        }]
    }
}
```

# 작업 알림
<a name="jobs-comm-notifications"></a>

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

## 작업 알림 유형
<a name="jobs-comm-notifications-types"></a>

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

**ListNotification**

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

`ListNotification`은(는) 다음 기준 중 하나가 충족될 때마다 게시됩니다.
+ 새로운 작업 실행이 대기 중이거나 비단말 상태(`IN_PROGRESS` 또는 `QUEUED`)로 변경되었습니다.
+ 기존 작업 실행이 터미널 상태(`FAILED`, `SUCCEEDED`, `CANCELED`, `TIMED_OUT`, `REJECTED` 또는 `REMOVED`)로 변경됩니다.

예약 구성을 사용하거나 사용하지 않는 제한에 대한 자세한 내용은 [작업 실행 한도](job-limits.md#job-execution-limits) 섹션을 참조하세요.

**NextNotification**
+ `NextNotification`에는 대기열에서 다음 순서인 작업 실행 하나에 대한 요약 정보가 포함되어 있습니다.

  `NextNotification`은(는) 목록 상의 첫 번째 작업 실행에 변경이 있을 때마다 게시됩니다.
  + 새로운 작업 실행은 `QUEUED` 상태로 목록에 추가되어 목록상의 첫 번째 작업 실행이 됩니다.
  + 목록에서 첫 번째가 아닌 기존 작업 실행의 상태는 `QUEUED`에서 `IN_PROGRESS`로 변경되어 목록상의 첫 번째 작업 실행이 됩니다. (이런 경우는 목록에 다른 `IN_PROGRESS`작업 실행이 없거나 상태가 `QUEUED`에서 `IN_PROGRESS`(으)로 변경된 작업 실행이 목록의 다른 `IN_PROGRESS` 작업 실행보다 먼저 대기열에 오른 경우에 발생합니다.) 
  + 목록에서 첫 번째인 작업 실행의 상태는 단말 상태로 변경되어 목록에서 제거됩니다.

MQTT 주제 게시 및 구독에 대한 자세한 내용은 [디바이스 통신 프로토콜](protocols.md) 단원을 참조하세요.

**참고**  
HTTP 서명 버전 4 또는 HTTP TLS를 사용하여 이 작업과 통신할 경우 알림을 사용할 수 없습니다.

## 작업 보류 중
<a name="jobs-comm-pending"></a>

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

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

# AWS IoT 작업 API 작업
<a name="jobs-api"></a>

AWS IoT 작업 API는 다음 범주 중 하나에 사용할 수 있습니다.
+ 작업 관리 및 제어와 같은 관리 작업. 이것은 *제어 영역*입니다.
+ 이러한 작업을 수행하는 디바이스. 이것은 **데이터 영역으로, 데이터를 전송하고 수신하도록 허용합니다.

작업을 관리하고 제어할 때는 HTTPS 프로토콜 API를 사용합니다. 디바이스는 MQTT 또는 HTTPS 프로토콜 API 중에서 하나를 사용할 수 있습니다. 제어 영역 API는 일반적으로 작업을 생성하거나 추적할 때 적은 용량의 호출에 맞게 설계되었습니다. 그래서 단일 요청일 때 연결을 개시하고, 응답이 수신되면 연결을 종료합니다. 데이터 영역 HTTPS 및 MQTT API는 긴 폴링을 허용합니다. 이 API 작업들은 수백만 개의 디바이스까지 확장되는 대용량 트래픽에 맞게 설계되었습니다.

각 AWS IoT 작업 HTTPS API에는 AWS Command Line Interface ()에서 API를 호출할 수 있는 해당 명령이 있습니다AWS CLI. 이러한 명령들은 소문자이며, API 이름을 구성하는 단어들 사이에 하이픈(-)을 사용합니다. 예를 들어 CLI에서 다음과 같이 입력하면 `CreateJob` API를 호출할 수 있습니다.

```
aws iot create-job ...
```

작업 중 오류가 발생하면 오류에 대한 정보가 포함된 오류 응답을 받습니다.

## ErrorResponse
<a name="jobs-mqtt-error-response"></a>

 AWS IoT 작업 서비스 작업에서 발생한 오류에 대한 정보가 포함됩니다.

다음 예는 이 작업의 구문을 보여줍니다.

```
{
    "code": "ErrorCode",
    "message": "string",
    "clientToken": "string",
    "timestamp": timestamp,
    "executionState": JobExecutionState
}
```

다음은 이 `ErrorResponse`에 대한 설명입니다.

`code`  
ErrorCode는 다음과 같이 설정할 수 있습니다.    
InvalidTopic  
요청이 API 작업에 매핑되지 않는 AWS IoT 작업 네임스페이스의 주제로 전송되었습니다.  
InvalidJson  
요청 내용이 유효한 UTF-8-인코딩 JSON으로 해석되지 않았습니다.  
InvalidRequest  
요청 내용이 잘못되었습니다. 예를 들어 `UpdateJobExecution` 요청에 잘못된 상태 세부 정보가 포함되어 있으면 이 코드가 반환됩니다. 메시지에는 오류에 대한 세부 정보가 포함됩니다.  
InvalidStateTransition  
업데이트가 작업 실행의 현재 상태 때문에 유효하지 않은 상태로 작업 실행을 변경하려고 했습니다. 예를 들어, SUCCEEDED 상태의 요청을 IN\$1PROGRESS로 변경하려고 합니다. 이때는 오류 메시지 본문에 `executionState` 필드도 포함됩니다.  
ResourceNotFound  
요청 주제에서 지정한 `JobExecution`이 존재하지 않습니다.  
VersionMismatch  
요청에 지정된 예상 버전이 작업 AWS IoT 서비스의 작업 실행 버전과 일치하지 않습니다. 이때는 오류 메시지 본문에 `executionState` 필드도 포함됩니다.  
InternalError  
요청을 처리하는 도중 내부 오류가 발생했습니다.  
RequestThrottled  
요청에 병목 현상이 발생했습니다.  
TerminalStateReached  
종료 상태의 작업에서 작업을 설명하는 명령을 실행했을 때 발생합니다.

`message`  
오류 메시지 문자열입니다.

`clientToken`  
요청과 응답의 연관성을 나타내는 임의 문자열입니다.

`timestamp`  
epoch 이후 경과 시간(초)입니다.

`executionState`  
[https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_JobExecutionState.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_JobExecutionState.html) 객체입니다. 이 필드는 `code` 필드에 `InvalidStateTransition` 또는 `VersionMismatch` 값이 있을 때만 포함됩니다. 이 두 가지 경우에는 `DescribeJobExecution` 요청을 별도로 실행하여 현재 작업 실행 상태에 대한 데이터를 가져올 필요가 없습니다.

**Topics**
+ [작업 관리 및 제어 API 및 데이터 형식](jobs-management-control-api.md)
+ [작업 디바이스 MQTT API 및 HTTPS API 작업 및 데이터 형식](jobs-mqtt-https-api.md)

# 작업 관리 및 제어 API 및 데이터 형식
<a name="jobs-management-control-api"></a>

**Topics**
+ [작업 관리 및 제어 데이터 형식](#jobs-control-plane-data-types)
+ [작업 관리 및 제어 API 작업](#jobs-http-api)

CLI 명령에 대한 *endpoint-url* 파라미터를 확인하려면 이 명령을 실행합니다.

```
aws iot describe-endpoint --endpoint-type=iot:Jobs
```

이 명령은 다음 출력을 반환합니다.

```
{
"endpointAddress": "account-specific-prefix.jobs.iot.aws-region.amazonaws.com"
}
```

**참고**  
작업 엔드포인트는 ALPN `x-amzn-http-ca`를 지원하지 않습니다.  
듀얼 스택 엔드포인트(IPv6와 IPv6)를 사용하는 경우 `iot:Data-ATS` 엔드포인트를 사용합니다. `iot:Jobs` 엔드포인트는 IPv4만 지원합니다.

## 작업 관리 및 제어 데이터 형식
<a name="jobs-control-plane-data-types"></a>

다음 데이터 형식은 관리 및 제어 애플리케이션에서 AWS IoT 작업과 통신하는 데 사용됩니다.

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

`Job` 객체에는 작업에 대한 세부 정보가 포함됩니다. 다음 예제에서는 구문을 보여줍니다.

```
{
    "jobArn": "string", 
    "jobId": "string", 
    "status": "IN_PROGRESS|CANCELED|SUCCEEDED", 
    "forceCanceled": boolean,
    "targetSelection": "CONTINUOUS|SNAPSHOT",
    "comment": "string",
    "targets": ["string"], 
    "description": "string",
    "createdAt": timestamp,
    "lastUpdatedAt": timestamp,
    "completedAt": timestamp,
    "jobProcessDetails": {
        "processingTargets": ["string"],
        "numberOfCanceledThings": long, 
        "numberOfSucceededThings": long, 
        "numberOfFailedThings": long,
        "numberOfRejectedThings": long, 
        "numberOfQueuedThings": long, 
        "numberOfInProgressThings": long, 
        "numberOfRemovedThings": long, 
        "numberOfTimedOutThings": long
    }, 
    "presignedUrlConfig": {
        "expiresInSec": number, 
        "roleArn": "string"
    }, 
    "jobExecutionsRolloutConfig": { 
        "exponentialRate": { 
           "baseRatePerMinute": integer,
           "incrementFactor": integer,
           "rateIncreaseCriteria": { 
              "numberOfNotifiedThings": integer, // Set one or the other
              "numberOfSucceededThings": integer // of these two values.
           },
           "maximumPerMinute": integer
      }
    },    
    "abortConfig": { 
       "criteriaList": [ 
          { 
             "action": "string",
             "failureType": "string",
             "minNumberOfExecutedThings": integer,
             "thresholdPercentage": integer
          }
       ]
    },
    "SchedulingConfig": { 
      "startTime": string
      "endTime": string
      "timeZone": string


      "endTimeBehavior": string

   },
    "timeoutConfig": {
        "inProgressTimeoutInMinutes": long
    }
}
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_Job.html](https://docs.aws.amazon.com/iot/latest/apireference/API_Job.html) 또는 [https://docs.aws.amazon.com/cli/latest/reference/iot/job.html](https://docs.aws.amazon.com/cli/latest/reference/iot/job.html) 섹션을 참조하세요.

### JobSummary
<a name="jobs-job-summary"></a>

`JobSummary` 객체에는 작업 요약이 포함됩니다. 다음 예제에서는 구문을 보여줍니다.

```
{
    "jobArn": "string", 
    "jobId": "string",
    "status": "IN_PROGRESS|CANCELED|SUCCEEDED|SCHEDULED", 
    "targetSelection": "CONTINUOUS|SNAPSHOT",
    "thingGroupId": "string",
    "createdAt": timestamp, 
    "lastUpdatedAt": timestamp, 
    "completedAt": timestamp
}
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_JobSummary.html](https://docs.aws.amazon.com/iot/latest/apireference/API_JobSummary.html) 또는 [https://docs.aws.amazon.com/cli/latest/reference/iot/job-summary.html](https://docs.aws.amazon.com/cli/latest/reference/iot/job-summary.html) 섹션을 참조하세요.

### JobExecution
<a name="jobs-job-execution"></a>

`JobExecution` 객체는 디바이스의 작업 실행을 나타냅니다. 다음 예제에서는 구문을 보여줍니다.

**참고**  
컨트롤 플레인 API 작업을 사용하는 경우 `JobExecution` 데이터 유형에는 필드가 `JobDocument` 포함되지 않습니다. 이 정보를 얻으려면 [https://docs.aws.amazon.com/iot/latest/apireference/API_GetJobDocument.html](https://docs.aws.amazon.com/iot/latest/apireference/API_GetJobDocument.html) API 작업 또는 [https://docs.aws.amazon.com/cli/latest/reference/get-job-document.html](https://docs.aws.amazon.com/cli/latest/reference/get-job-document.html) CLI 명령을 사용할 수 있습니다.

```
{
    "approximateSecondsBeforeTimedOut": 50,
    "executionNumber": 1234567890,
    "forceCanceled": true|false,
    "jobId": "string",
    "lastUpdatedAt": timestamp, 
    "queuedAt": timestamp,
    "startedAt": timestamp,
    "status": "QUEUED|IN_PROGRESS|FAILED|SUCCEEDED|CANCELED|TIMED_OUT|REJECTED|REMOVED",
    "forceCanceled": boolean,
    "statusDetails": {
        "detailsMap": { 
            "string": "string" ...
        },
        "status": "string"
    }, 
    "thingArn": "string", 
    "versionNumber": 123
}
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecution.html) 또는 [https://docs.aws.amazon.com/cli/latest/reference/iot/job-execution.html](https://docs.aws.amazon.com/cli/latest/reference/iot/job-execution.html) 섹션을 참조하세요.

### JobExecutionSummary
<a name="jobs-job-execution-summary"></a>

`JobExecutionSummary` 객체에는 작업 실행 요약 정보가 포함됩니다. 다음 예제에서는 구문을 보여줍니다.

```
{
    "executionNumber": 1234567890,
    "queuedAt": timestamp,
    "lastUpdatedAt": timestamp,
    "startedAt": timestamp,
    "status": "QUEUED|IN_PROGRESS|FAILED|SUCCEEDED|CANCELED|TIMED_OUT|REJECTED|REMOVED"
}
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecutionSummary.html](https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecutionSummary.html) 또는 [https://docs.aws.amazon.com/cli/latest/reference/iot/job-execution-summary.html](https://docs.aws.amazon.com/cli/latest/reference/iot/job-execution-summary.html) 섹션을 참조하세요.

### JobExecutionSummaryForJob
<a name="jobs-job-execution-summary-for-job"></a>

`JobExecutionSummaryForJob` 객체에는 특정 작업에서 작업 실행에 대한 요약 정보가 포함됩니다. 다음 예제에서는 구문을 보여줍니다.

```
{
    "executionSummaries": [
        {
            "thingArn": "arn:aws:iot:us-west-2:123456789012:thing/MyThing", 
            "jobExecutionSummary": {
                "status": "IN_PROGRESS", 
                "lastUpdatedAt": 1549395301.389, 
                "queuedAt": 1541526002.609, 
                "executionNumber": 1
            }
        }, 
        ...
    ]
}
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecutionSummaryForJob.html](https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecutionSummaryForJob.html) 또는 [https://docs.aws.amazon.com/cli/latest/reference/iot/job-execution-summary-for-job.html](https://docs.aws.amazon.com/cli/latest/reference/iot/job-execution-summary-for-job.html) 섹션을 참조하세요.

### JobExecutionSummaryForThing
<a name="jobs-job-execution-summary-for-thing"></a>

`JobExecutionSummaryForThing` 객체에는 특정 사물의 작업 실행에 대한 요약 정보가 포함됩니다. 다음 예시에서는 구문을 보여줍니다.

```
{
    "executionSummaries": [
        {
            "jobExecutionSummary": {
                "status": "IN_PROGRESS", 
                "lastUpdatedAt": 1549395301.389, 
                "queuedAt": 1541526002.609, 
                "executionNumber": 1
            }, 
            "jobId": "MyThingJob"
        },
        ...
    ]
}
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecutionSummaryForThing.html](https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecutionSummaryForThing.html) 또는 [https://docs.aws.amazon.com/cli/latest/reference/iot/job-execution-summary-for-thing.html](https://docs.aws.amazon.com/cli/latest/reference/iot/job-execution-summary-for-thing.html) 섹션을 참조하세요.

## 작업 관리 및 제어 API 작업
<a name="jobs-http-api"></a>

다음 API 작업 또는 CLI 명령을 사용합니다.

### AssociateTargetsWithJob
<a name="jobs-AssociateTargetsWithJob"></a>

그룹을 연속 작업과 연결합니다. 단, 다음 기준을 만족해야 합니다.
+ 생성된 작업에서 `targetSelection` 필드가 `CONTINUOUS`로 설정되어 있어야 합니다.
+ 작업 상태가 현재 `IN_PROGRESS`이어야 합니다.
+ 작업에 연결되는 대상의 총 수가 100을 넘어서는 안 됩니다.

------
#### [ HTTPS request ]

```
POST /jobs/jobId/targets
 
{ 
"targets": [ "string" ],
"comment": "string"
}
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_AssociateTargetsWithJob.html](https://docs.aws.amazon.com/iot/latest/apireference/API_AssociateTargetsWithJob.html) 단원을 참조하십시오.

------
#### [ CLI syntax ]

```
aws iot  associate-targets-with-job \
--targets <value> \
--job-id <value> \
[--comment <value>]  \
[--cli-input-json <value>] \
[--generate-cli-skeleton]
```

 `cli-input-json` 형식:

```
{
"targets": [
"string"
],
"jobId": "string",
"comment": "string"
}
```

자세한 내용은 [https://docs.aws.amazon.com/cli/latest/reference/iot/associate-targets-with-job.html](https://docs.aws.amazon.com/cli/latest/reference/iot/associate-targets-with-job.html) 단원을 참조하십시오.

------

### CancelJob
<a name="jobs-CancelJob"></a>

작업을 취소합니다.

------
#### [ HTTPS request ]

```
PUT /jobs/jobId/cancel
 
{ 
"force": boolean,
"comment": "string",
"reasonCode": "string"
}
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_CancelJob.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CancelJob.html) 단원을 참조하십시오.

------
#### [ CLI syntax ]

```
aws iot cancel-job \
    --job-id <value> \
    [--force <value>]  \
    [--comment <value>]  \
    [--reasonCode <value>]  \
    [--cli-input-json <value>] \
    [--generate-cli-skeleton]
```

 `cli-input-json` 형식:

```
{
    "jobId": "string",
    "force": boolean,
    "comment": "string"
}
```

자세한 내용은 [https://docs.aws.amazon.com/cli/latest/reference/iot/cancel-job.html](https://docs.aws.amazon.com/cli/latest/reference/iot/cancel-job.html) 단원을 참조하십시오.

------

### CancelJobExecution
<a name="jobs-CancelJobExecution"></a>

디바이스의 작업 실행을 취소합니다.

------
#### [ HTTPS request ]

```
PUT /things/thingName/jobs/jobId/cancel
 
{ 
"force": boolean,
"expectedVersion": "string",
"statusDetails": {
    "string": "string"
    ...
}
}
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_CancelJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CancelJobExecution.html) 단원을 참조하십시오.

------
#### [ CLI syntax ]

```
aws iot cancel-job-execution \
--job-id <value> \
--thing-name <value> \
[--force | --no-force] \
[--expected-version <value>] \
[--status-details <value>]  \
[--cli-input-json <value>] \
[--generate-cli-skeleton]
```

 `cli-input-json` 형식:

```
{
"jobId": "string",
"thingName": "string",
"force": boolean,
"expectedVersion": long,
"statusDetails": {
"string": "string"
}
}
```

자세한 내용은 [https://docs.aws.amazon.com/cli/latest/reference/iot/cancel-job-execution.html](https://docs.aws.amazon.com/cli/latest/reference/iot/cancel-job-execution.html) 단원을 참조하십시오.

------

### CreateJob
<a name="jobs-CreateJob"></a>

작업을 생성합니다. 작업 문서는 Amazon S3 버킷(`documentSource` 파라미터)에서 또는 요청 본문(`document` 파라미터)에서 파일에 대한 링크로 제공될 수 있습니다.

선택적 `targetSelection` 파라미터를 `CONTINUOUS`(기본값은 `SNAPSHOT`)로 설정하여 작업을 *연속 작업*으로 만들 수 있습니다. 연속 작업은 계속 실행되고 새로 추가된 사물에서 시작되므로 그룹에 추가된 디바이스를 온보딩하거나 업그레이드할 때 사용할 수 있습니다. 이는 작업을 생성할 때 그룹에 있던 사물이 작업을 완료한 후에도 발생할 수 있습니다.

작업은 진행 중 타이머의 값을 설정하는 선택 사항인 [TimeoutConfig](https://docs.aws.amazon.com//iot/latest/apireference/API_TimeoutConfig.html)를 포함할 수 있습니다. 진행 중 타이머는 업데이트될 수 없으며 이 작업에 대한 모든 작업 실행에 적용됩니다.

다음은 `CreateJob` API에 대한 인수에서 실행하는 확인 작업입니다.
+ `targets` 인수는 유효한 사물 또는 사물 그룹 ARN의 목록이어야 합니다. 모든 사물 및 사물 그룹은에 있어야 합니다 AWS 계정.
+ `documentSource` 인수는 작업 문서에 대해 유효한 Amazon S3 URL이어야 합니다. Amazon S3 URL의 형식은 `https://s3.amazonaws.com/bucketName/objectName`과 같습니다.
+ `documentSource` 인수에서 지정하는 URL에 저장된 문서는 UTF-8 인코딩 JSON 문서이어야 합니다.
+ 작업 문서의 크기는 MQTT 메시지 크기(128KB) 및 암호화에 대한 제한으로 인해 32KB를 넘을 수 없습니다.
+ 는에서 고유해야 `jobId` 합니다 AWS 계정.

------
#### [ HTTPS request ]

```
PUT /jobs/jobId
 
{
"targets": [ "string" ],
"document": "string",
"documentSource": "string",
"description": "string",
"jobTemplateArn": "string",
"presignedUrlConfigData": {
    "roleArn": "string", 
    "expiresInSec": "integer" 
},
"targetSelection": "CONTINUOUS|SNAPSHOT",
"jobExecutionsRolloutConfig": { 
    "exponentialRate": { 
       "baseRatePerMinute": integer,
       "incrementFactor": integer,
       "rateIncreaseCriteria": { 
          "numberOfNotifiedThings": integer, // Set one or the other
          "numberOfSucceededThings": integer // of these two values.
       },
       "maximumPerMinute": integer
  }
},
"abortConfig": { 
   "criteriaList": [ 
      { 
         "action": "string",
         "failureType": "string",
         "minNumberOfExecutedThings": integer,
         "thresholdPercentage": integer
      }
   ]
},
"SchedulingConfig": { 
    "startTime": string
    "endTime": string
    "timeZone": string


    "endTimeBehavior": string

   }
"timeoutConfig": { 
  "inProgressTimeoutInMinutes": long
}
}
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html) 단원을 참조하십시오.

------
#### [ CLI syntax ]

```
aws iot create-job \
    --job-id <value> \
    --targets <value> \
    [--document-source <value>] \
    [--document <value>] \
    [--description <value>] \
    [--job-template-arn <value>] \
    [--presigned-url-config <value>] \
    [--target-selection <value>] \
    [--job-executions-rollout-config <value>] \
    [--abort-config <value>] \
    [--timeout-config <value>] \
    [--document-parameters <value>]  \
    [--cli-input-json <value>] \
    [--generate-cli-skeleton]
```

 `cli-input-json` 형식:

```
{
    "jobId": "string",
    "targets": [ "string" ],
    "documentSource": "string",
    "document": "string",
    "description": "string",
    "jobTemplateArn": "string",
    "presignedUrlConfig": {
        "roleArn": "string",
        "expiresInSec": long
     },
    "targetSelection": "string",
    "jobExecutionsRolloutConfig": { 
          "exponentialRate": { 
              "baseRatePerMinute": integer,
              "incrementFactor": integer,
              "rateIncreaseCriteria": { 
                 "numberOfNotifiedThings": integer, // Set one or the other
                 "numberOfSucceededThings": integer // of these two values.
              },
      "maximumPerMinute": integer
      }
    }, 
    "abortConfig": { 
    "criteriaList": [ 
        { 
           "action": "string",
           "failureType": "string",
           "minNumberOfExecutedThings": integer,
           "thresholdPercentage": integer
         }
      ]
    },
    "timeoutConfig": { 
          "inProgressTimeoutInMinutes": long
    },
    "documentParameters": {
    "string": "string"
    }
}
```

자세한 내용은 [https://docs.aws.amazon.com/cli/latest/reference/iot/create-job.html](https://docs.aws.amazon.com/cli/latest/reference/iot/create-job.html) 단원을 참조하십시오.

------

### DeleteJob
<a name="jobs-DeleteJob"></a>

특정 작업과 그와 관련한 작업 실행을 삭제합니다.

작업을 삭제하려면 그 작업에 대해 생성된 작업 실행의 수와 기타 여러 가지 요인에 따라 시간이 걸릴 수 있습니다. 작업이 삭제되는 동안 그 작업의 상태는 "DELETION\$1IN\$1PROGRESS"로 표시됩니다. 상태가 이미 "DELETION\$1IN\$1PROGRESS"인 작업을 삭제하거나 취소하려고 하면 오류가 발생합니다.

------
#### [ HTTPS request ]

```
DELETE /jobs/jobId?force=force 
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteJob.html](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteJob.html) 단원을 참조하십시오.

------
#### [ CLI syntax ]

```
aws iot  delete-job \
--job-id <value> \
[--force | --no-force]  \
[--cli-input-json <value>] \
[--generate-cli-skeleton]
```

 `cli-input-json` 형식:

```
{
"jobId": "string",
"force": boolean
}
```

자세한 내용은 [https://docs.aws.amazon.com/cli/latest/reference/iot/delete-job.html](https://docs.aws.amazon.com/cli/latest/reference/iot/delete-job.html) 단원을 참조하십시오.

------

### DeleteJobExecution
<a name="jobs-DeleteJobExecution"></a>

작업 실행을 삭제합니다.

------
#### [ HTTPS request ]

```
DELETE /things/thingName/jobs/jobId/executionNumber/executionNumber?force=force
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteJobExecution.html) 단원을 참조하십시오.

------
#### [ CLI syntax ]

```
aws iot  delete-job-execution \
--job-id <value> \
--thing-name <value> \
--execution-number <value> \
[--force | --no-force]  \
[--cli-input-json <value>] \
[--generate-cli-skeleton]
```

 `cli-input-json` 형식:

```
{
"jobId": "string",
"thingName": "string",
"executionNumber": long,
"force": boolean
}
```

자세한 내용은 [https://docs.aws.amazon.com/cli/latest/reference/iot/delete-job-execution.html](https://docs.aws.amazon.com/cli/latest/reference/iot/delete-job-execution.html) 단원을 참조하십시오.

------

### DescribeJob
<a name="jobs-DescribeJob"></a>

작업 실행에 대한 세부 정보를 가져옵니다.

------
#### [ HTTPS request ]

```
GET /jobs/jobId
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeJob.html](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeJob.html) 단원을 참조하십시오.

------
#### [ CLI syntax ]

```
aws iot describe-job \
--job-id <value>  \
[--cli-input-json <value>] \
[--generate-cli-skeleton]
```

 `cli-input-json` 형식:

```
{
"jobId": "string"
}
```

자세한 내용은 [https://docs.aws.amazon.com/cli/latest/reference/iot/describe-job.html](https://docs.aws.amazon.com/cli/latest/reference/iot/describe-job.html) 단원을 참조하십시오.

------

### DescribeJobExecution
<a name="jobs-DescribeJobExecution"></a>

작업 실행에 대한 세부 정보를 가져옵니다. 작업 실행 상태는 `SUCCEEDED` 또는 `FAILED`가 되어야 합니다.

------
#### [ HTTPS request ]

```
GET /things/thingName/jobs/jobId?executionNumber=executionNumber
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeJobExecution.html) 단원을 참조하십시오.

------
#### [ CLI syntax ]

```
aws iot  describe-job-execution \
--job-id <value> \
--thing-name <value> \
[--execution-number <value>]  \
[--cli-input-json <value>] \
[--generate-cli-skeleton]
```

 `cli-input-json` 형식:

```
{
"jobId": "string",
"thingName": "string",
"executionNumber": long
}
```

자세한 내용은 [https://docs.aws.amazon.com/cli/latest/reference/iot/describe-job-execution.html](https://docs.aws.amazon.com/cli/latest/reference/iot/describe-job-execution.html) 단원을 참조하십시오.

------

### GetJobDocument
<a name="jobs-GetJobDocument"></a>

임의 작업에 대한 작업 문서를 가져옵니다.

**참고**  
반환되는 문서에서는 자리 표시자 URL이 미리 서명된 Amazon S3 URL로 바뀌지 않습니다. 미리 서명된 URLs은 AWS IoT Jobs 서비스가 MQTT를 통해 요청을 수신하는 경우에만 생성됩니다.

------
#### [ HTTPS request ]

```
GET /jobs/jobId/job-document
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_GetJobDocument.html](https://docs.aws.amazon.com/iot/latest/apireference/API_GetJobDocument.html) 단원을 참조하십시오.

------
#### [ CLI syntax ]

```
aws iot get-job-document \
--job-id <value>  \
[--cli-input-json <value>] \
[--generate-cli-skeleton]
```

 `cli-input-json` 형식:

```
{
"jobId": "string"
}
```

자세한 내용은 [https://docs.aws.amazon.com/cli/latest/reference/iot/get-job-document.html](https://docs.aws.amazon.com/cli/latest/reference/iot/get-job-document.html) 단원을 참조하십시오.

------

### ListJobExecutionsForJob
<a name="jobs-listJobExecutionsForJob"></a>

임의 작업에 대한 작업 실행 목록을 가져옵니다.

------
#### [ HTTPS request ]

```
GET /jobs/jobId/things?status=status&maxResults=maxResults&nextToken=nextToken
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_ListJobExecutionsForJob.html](https://docs.aws.amazon.com/iot/latest/apireference/API_ListJobExecutionsForJob.html) 단원을 참조하십시오.

------
#### [ CLI syntax ]

```
aws iot  list-job-executions-for-job \
--job-id <value> \
[--status <value>] \
[--max-results <value>] \
[--next-token <value>]  \
[--cli-input-json <value>] \
[--generate-cli-skeleton]
```

 `cli-input-json` 형식:

```
{
"jobId": "string",
"status": "string",
"maxResults": "integer",
"nextToken": "string"
}
```

자세한 내용은 [https://docs.aws.amazon.com/cli/latest/reference/iot/list-job-executions-for-job.html](https://docs.aws.amazon.com/cli/latest/reference/iot/list-job-executions-for-job.html) 단원을 참조하십시오.

------

### ListJobExecutionsForThing
<a name="jobs-ListJobExecutionsForThing"></a>

사물의 작업 실행 목록을 가져옵니다.

------
#### [ HTTPS request ]

```
GET /things/thingName/jobs?status=status&maxResults=maxResults&nextToken=nextToken
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_ListJobExecutionsForThing.html](https://docs.aws.amazon.com/iot/latest/apireference/API_ListJobExecutionsForThing.html) 단원을 참조하십시오.

------
#### [ CLI syntax ]

```
aws iot list-job-executions-for-thing \
--thing-name <value> \
[--status <value>] \
[--max-results <value>] \
[--next-token <value>]  \
[--cli-input-json <value>] \
[--generate-cli-skeleton]
```

 `cli-input-json` 형식:

```
{
"thingName": "string",
"status": "string",
"maxResults": "integer",
"nextToken": "string"
}
```

자세한 내용은 [https://docs.aws.amazon.com/cli/latest/reference/iot/list-job-executions-for-thing.html](https://docs.aws.amazon.com/cli/latest/reference/iot/list-job-executions-for-thing.html) 단원을 참조하십시오.

------

### ListJobs
<a name="jobs-listJobs"></a>

에서 작업 목록을 가져옵니다 AWS 계정.

------
#### [ HTTPS request ]

```
GET /jobs?status=status&targetSelection=targetSelection&thingGroupName=thingGroupName&thingGroupId=thingGroupId&maxResults=maxResults&nextToken=nextToken
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_ListJobs.html](https://docs.aws.amazon.com/iot/latest/apireference/API_ListJobs.html) 단원을 참조하십시오.

------
#### [ CLI syntax ]

```
aws iot list-jobs \
[--status <value>] \
[--target-selection <value>] \
[--max-results <value>] \
[--next-token <value>] \
[--thing-group-name <value>] \
[--thing-group-id <value>]  \
[--cli-input-json <value>] \
[--generate-cli-skeleton]
```

 `cli-input-json` 형식:

```
{
"status": "string",
"targetSelection": "string",
"maxResults": "integer",
"nextToken": "string",
"thingGroupName": "string",
"thingGroupId": "string"
}
```

자세한 내용은 [https://docs.aws.amazon.com/cli/latest/reference/iot/list-jobs.html](https://docs.aws.amazon.com/cli/latest/reference/iot/list-jobs.html) 단원을 참조하십시오.

------

### UpdateJob
<a name="jobs-UpdateJob"></a>

지정된 작업의 지원되는 필드를 업데이트합니다. `timeoutConfig`에 대해 업데이트된 값은 새로 진행 중인 시작 작업에만 적용됩니다. 현재 진행 중인 시작은 이전의 제한 시간 구성으로 계속 실행됩니다.

------
#### [ HTTPS request ]

```
PATCH /jobs/jobId
{
"description": "string",
"presignedUrlConfig": { 
  "expiresInSec": number,
  "roleArn": "string"
},
"jobExecutionsRolloutConfig": { 
  "exponentialRate": { 
     "baseRatePerMinute": number,
     "incrementFactor": number,
     "rateIncreaseCriteria": { 
        "numberOfNotifiedThings": number,
        "numberOfSucceededThings": number
     }, 
  "maximumPerMinute": number
  },
"abortConfig": { 
  "criteriaList": [ 
     { 
        "action": "string",
        "failureType": "string",
        "minNumberOfExecutedThings": number,
        "thresholdPercentage": number
     }
  ]
},
"timeoutConfig": { 
  "inProgressTimeoutInMinutes": number
}
}
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateJob.html](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateJob.html) 단원을 참조하십시오.

------
#### [ CLI syntax ]

```
aws iot  update-job \
--job-id <value> \
[--description <value>] \
[--presigned-url-config <value>] \
[--job-executions-rollout-config <value>] \
[--abort-config <value>] \
[--timeout-config <value>] \
[--cli-input-json <value>] \
[--generate-cli-skeleton]
```

 `cli-input-json` 형식:

```
{
"description": "string",
"presignedUrlConfig": { 
  "expiresInSec": number,
  "roleArn": "string"
},
"jobExecutionsRolloutConfig": { 
  "exponentialRate": { 
     "baseRatePerMinute": number,
     "incrementFactor": number,
     "rateIncreaseCriteria": { 
        "numberOfNotifiedThings": number,
        "numberOfSucceededThings": number
     }
  },
  "maximumPerMinute": number
},
"abortConfig": { 
  "criteriaList": [ 
     { 
        "action": "string",
        "failureType": "string",
        "minNumberOfExecutedThings": number,
        "thresholdPercentage": number
     }
  ]
},
"timeoutConfig": { 
  "inProgressTimeoutInMinutes": number
}
}
```

자세한 내용은 [https://docs.aws.amazon.com/cli/latest/reference/iot/update-job.html](https://docs.aws.amazon.com/cli/latest/reference/iot/update-job.html) 단원을 참조하십시오.

------

# 작업 디바이스 MQTT API 및 HTTPS API 작업 및 데이터 형식
<a name="jobs-mqtt-https-api"></a>

다음은 MQTT 및 HTTPS 프로토콜을 통해 사용할 수 있는 명령입니다. 작업을 실행하는 디바이스의 데이터 영역에서 이러한 API 작업을 사용합니다.

## 작업 디바이스 MQTT 및 HTTPS 데이터 형식
<a name="jobs-data-plane-data-types"></a>

다음 데이터 형식은 MQTT 및 HTTPS 프로토콜을 통해 AWS IoT 작업 서비스와 통신하는 데 사용됩니다.

### JobExecution
<a name="jobs-mqtt-job-execution-data"></a>

`JobExecution` 객체는 디바이스의 작업 실행을 나타냅니다. 다음 예제에서는 구문을 보여줍니다.

**참고**  
MQTT 및 HTTP 데이터 영역 API 작업을 사용하는 경우 `JobExecution` 데이터 유형에 `JobDocument` 필드가 포함됩니다. 디바이스는 이 정보를 사용하여 작업 실행에서 작업 문서를 검색할 수 있습니다.

```
{
    "jobId" : "string",
    "thingName" : "string",
    "jobDocument" : "string",
    "status": "QUEUED|IN_PROGRESS|FAILED|SUCCEEDED|CANCELED|TIMED_OUT|REJECTED|REMOVED",
    "statusDetails": {
        "string": "string"
    },
    "queuedAt" : "timestamp",
    "startedAt" : "timestamp",
    "lastUpdatedAt" : "timestamp",
    "versionNumber" : "number",
    "executionNumber": long
}
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_JobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_JobExecution.html) 또는 [https://docs.aws.amazon.com/cli/latest/reference/iot-data/job-execution.html](https://docs.aws.amazon.com/cli/latest/reference/iot-data/job-execution.html) 섹션을 참조하세요.

### JobExecutionState
<a name="jobs-mqtt-job-execution-state"></a>

`JobExecutionState`에는 작업 실행 상태에 대한 정보가 들어 있습니다. 다음 예제에서는 구문을 보여줍니다.

```
{
    "status": "QUEUED|IN_PROGRESS|FAILED|SUCCEEDED|CANCELED|TIMED_OUT|REJECTED|REMOVED",
    "statusDetails": {
        "string": "string"
        ...
    }
    "versionNumber": "number"
}
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_JobExecutionState.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_JobExecutionState.html) 또는 [https://docs.aws.amazon.com/cli/latest/reference/iot-data/job-execution-state.html](https://docs.aws.amazon.com/cli/latest/reference/iot-data/job-execution-state.html) 섹션을 참조하세요.

### JobExecutionSummary
<a name="jobs-mqtt-job-execution-summary"></a>

작업 실행에 대한 정보의 하위 집합이 포함됩니다. 다음 예제에서는 구문을 보여줍니다.

```
{
    "jobId": "string",
    "queuedAt": timestamp,
    "startedAt": timestamp,
    "lastUpdatedAt": timestamp,
    "versionNumber": "number",
    "executionNumber": long 
}
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_JobExecutionSummary.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_JobExecutionSummary.html) 또는 [https://docs.aws.amazon.com/cli/latest/reference/iot-data/job-execution-summary.html](https://docs.aws.amazon.com/cli/latest/reference/iot-data/job-execution-summary.html) 섹션을 참조하세요.

**Topics**
+ [작업 디바이스 MQTT 및 HTTPS 데이터 형식](#jobs-data-plane-data-types)
+ [작업 디바이스 MQTT API 작업](jobs-mqtt-api.md)
+ [작업 디바이스 HTTP API](jobs-http-device-api.md)

# 작업 디바이스 MQTT API 작업
<a name="jobs-mqtt-api"></a><a name="jobs-mqtt-note"></a>

[작업 명령에 사용되는 예약된 주제](reserved-topics.md#reserved-topics-job)에 MQTT 메시지를 게시하여 작업 디바이스 명령을 발행할 수 있습니다.

디바이스 측 클라이언트는 이러한 명령의 응답 메시지 항목을 구독해야 합니다. AWS IoT Device Client를 사용하는 경우 디바이스는 자동으로 응답 주제를 구독합니다. 즉, 클라이언트가 응답 메시지 주제를 구독했는지 여부에 관계없이 메시지 브로커가 명령 메시지를 게시한 클라이언트에 응답 메시지 주제를 게시합니다. 이러한 응답 메시지는 메시지 브로커를 통과하지 않으며 다른 클라이언트나 규칙에 의해 구독될 수 없습니다.

플릿 모니터링 솔루션에 대한 작업 및 `jobExecution` 이벤트 주제를 구독할 때 먼저 [작업 및 작업 실행 이벤트](iot-events.md)를 사용하여 클라우드 측에서 이벤트를 수신합니다. 메시지 브로커를 통해 처리되고 AWS IoT 규칙에서 사용할 수 있는 작업 진행 메시지는 [작업 이벤트](events-jobs.md)로 게시됩니다. 메시지 브로커가 응답 메시지를 게시하기 때문에, 명시적인 구독을 하지 않더라도 수신하는 메시지를 수신하고 식별하도록 클라이언트를 구성해야 합니다. 또한 클라이언트는 클라이언트가 메시지에 대해 작업을 수행하기 전에 수신 메시지 주제의 *thingName*이 클라이언트의 사물 이름에 적용되는지 확인해야 합니다.

**참고**  
MQTT Jobs API 명령 메시지에 대한 응답으로가 AWS IoT 전송하는 메시지는 명시적으로 구독했는지 여부에 관계없이 계정에 요금이 부과됩니다.

다음은 MQTT API 작업과 해당 요청 및 응답 구문을 보여 줍니다. 모든 MQTT API 작업에는 다음 파라미터가 있습니다.

clientToken  
요청과 응답의 연관성을 나타내는 데 사용하는 선택적 클라이언트 토큰입니다. 여기에 임의 값을 입력하면 응답에 반영됩니다.

`timestamp`  
메시지가 전송된 Epoch 이후 경과 시간(초)입니다.

## GetPendingJobExecutions
<a name="mqtt-getpendingjobexecutions"></a>

지정된 사물에 대해 종료 상태가 아닌 사물의 모든 작업 목록을 가져옵니다.

이 API를 호출하려면 `$aws/things/thingName/jobs/get` 주제에 메시지를 게시합니다.

요청 페이로드:

```
{ "clientToken": "string" }
```

메시지 브로커는 특정 구독 없이도 `$aws/things/thingName/jobs/get/accepted`와 `$aws/things/thingName/jobs/get/rejected`를 게시합니다. 그러나 클라이언트가 메시지를 수신하려면 메시지를 수신 대기해야 합니다. 자세한 내용은 [작업 API 메시지에 대한 참고 사항](#jobs-mqtt-note)을 참조하세요.

응답 페이로드:

```
{
"inProgressJobs" : [ JobExecutionSummary ... ], 
"queuedJobs" : [ JobExecutionSummary ... ],
"timestamp" : 1489096425069,
"clientToken" : "client-001"
}
```

여기서 `inProgressJobs` 및 `queuedJobs`에서는 상태가 `IN_PROGRESS` 또는 `QUEUED`인 [JobExecutionSummary](jobs-mqtt-https-api.md#jobs-mqtt-job-execution-summary) 객체 목록을 반환합니다.

## StartNextPendingJobExecution
<a name="mqtt-startnextpendingjobexecution"></a>

사물의 다음 번 대기 중 작업 실행을 가져오고 시작합니다(`IN_PROGRESS` 또는 `QUEUED` 상태).
+ 상태가 `IN_PROGRESS`인 모든 작업 실행이 먼저 반환됩니다.
+ 작업 실행이 대기열에 추가된 순서대로 반환됩니다. 작업의 대상 그룹에 사물이 추가 또는 제거되면 새 작업 실행의 롤아웃 순서를 기존 작업 실행과 비교하여 확인하세요.
+ 다음 대기 중인 작업 실행이 `QUEUED` 상태이면, 상태가 `IN_PROGRESS`로 바뀌고 작업 실행의 상태 세부 정보가 지정한 대로 설정됩니다.
+ 다음 보류 중인 작업 실행이 이미 `IN_PROGRESS` 상태이면 상태 세부 정보가 바뀌지 않습니다.
+ 보류 중인 작업 실행이 없으면 응답에 `execution` 필드가 포함되지 않습니다.
+ 선택적으로 `stepTimeoutInMinutes` 속성에 대한 값을 설정하여 단계 타이머를 생성할 수 있습니다. `UpdateJobExecution`를 실행하여 이 속성 값을 업데이트하지 않은 경우 단계 타이머가 만료할 때 작업 실행이 시간 초과됩니다.

이 API를 호출하려면 `$aws/things/thingName/jobs/start-next` 주제에 메시지를 게시합니다.

요청 페이로드:

```
{ 
"statusDetails": {
    "string": "job-execution-state"
    ...
},
"stepTimeoutInMinutes": long,
"clientToken": "string"
}
```

`statusDetails`  
작업 실행 상태를 설명하는 이름-값 페어의 모음입니다. 지정하지 않으면 `statusDetails`가 바뀌지 않습니다.

`stepTimeOutInMinutes`  
이 디바이스가 이 작업 실행을 마쳐야 하는 시간을 지정합니다. 이 타이머가 완료하기 전에 또는 타이머가 재설정되면(`UpdateJobExecution`를 호출하고, 상태를 `IN_PROGRESS`에 설정하고, 새로운 제한 시간 값을 필드 `stepTimeoutInMinutes`에 지정하여) 작업 실행 상태는 `TIMED_OUT`로 설정됩니다. 이 시간 초과를 설정해도 작업이 생성되었을 때(`CreateJob` 필드를 사용하는`timeoutConfig`) 지정했을 수도 있는 이 작업 실행 시간 초과에는 영향을 주지 않는다는 점을 유의하세요.  
이 파라미터의 유효한 값 범위는 1\$110080(1분\$17일)입니다. -1 값도 유효하며 (UpdateJobExecutionRequest를 조기 사용하여 생성된) 현재 단계 타이머를 취소합니다.

메시지 브로커는 특정 구독 없이도 `$aws/things/thingName/jobs/start-next/accepted`와 `$aws/things/thingName/jobs/start-next/rejected`를 게시합니다. 그러나 클라이언트가 메시지를 수신하려면 메시지를 수신 대기해야 합니다. 자세한 내용은 [작업 API 메시지에 대한 참고 사항](#jobs-mqtt-note)을 참조하세요.

응답 페이로드:

```
{
"execution" : JobExecutionData,
"timestamp" : timestamp,
"clientToken" : "string"
}
```

여기서 `execution`은 [JobExecution](jobs-mqtt-https-api.md#jobs-mqtt-job-execution-data) 객체입니다. 예:

```
{
"execution" : {
    "jobId" : "022",
    "thingName" : "MyThing",
    "jobDocument" : "< contents of job document >",
    "status" : "IN_PROGRESS",
    "queuedAt" : 1489096123309,
    "lastUpdatedAt" : 1489096123309,
    "versionNumber" : 1,
    "executionNumber" : 1234567890
},
"clientToken" : "client-1",
"timestamp" : 1489088524284,
}
```

## DescribeJobExecution
<a name="mqtt-describejobexecution"></a>

작업 실행에 대한 세부 정보를 가져옵니다.

`jobId`를 `$next`로 설정하여 다음 대기 중인(`IN_PROGRESS` 또는 `QUEUED` 상태) 사물의 작업 실행을 반환할 수 있습니다.

이 API를 호출하려면 `$aws/things/thingName/jobs/jobId/get` 주제에 메시지를 게시합니다.

요청 페이로드:

```
{ 
"jobId" : "022",
"thingName" : "MyThing",
"executionNumber": long,
"includeJobDocument": boolean,
"clientToken": "string" 
}
```

`thingName`  
디바이스와 연결된 사물의 이름입니다.

`jobId`  
작업 생성 시 할당한 고유 식별자입니다.  
또는 `$next`를 사용하여 다음 대기 중인(`IN_PROGRESS` 또는 `QUEUED` 상태) 사물의 작업 실행을 반환할 수 있습니다. 이 경우에는 상태가 `IN_PROGRESS`인 모든 작업 실행이 먼저 반환됩니다. 작업 실행이 생성된 순서대로 반환됩니다.

`executionNumber`  
(선택 사항) 디바이스에서 작업 실행을 식별하기 위한 숫자입니다. 지정하지 않으면 최신 작업 실행이 반환됩니다.

`includeJobDocument`  
(선택 사항) `false`로 설정하지 않을 경우 응답에 작업 문서가 포함됩니다. 기본값은 `true`입니다.

메시지 브로커는 특정 구독 없이도 `$aws/things/thingName/jobs/jobId/get/accepted`와 `$aws/things/thingName/jobs/jobId/get/rejected`를 게시합니다. 그러나 클라이언트가 메시지를 수신하려면 메시지를 수신 대기해야 합니다. 자세한 내용은 [작업 API 메시지에 대한 참고 사항](#jobs-mqtt-note)을 참조하세요.

응답 페이로드:

```
{
"execution" : JobExecutionData,
"timestamp": "timestamp",
"clientToken": "string"
}
```

여기서 `execution`은 [JobExecution](jobs-mqtt-https-api.md#jobs-mqtt-job-execution-data) 객체입니다.

## UpdateJobExecution
<a name="mqtt-updatejobexecution"></a>

작업 실행의 상태를 업데이트합니다. `stepTimeoutInMinutes` 속성에 대한 값을 설정하여 단계 타이머를 선택적으로 추가할 수 있습니다. `UpdateJobExecution`를 다시 실행하여 이 속성 값을 업데이트하지 않은 경우 단계 타이머가 만료할 때 작업 실행이 시간 초과됩니다.

이 API를 호출하려면 `$aws/things/thingName/jobs/jobId/update` 주제에 메시지를 게시합니다.

요청 페이로드:

```
{
"status": "job-execution-state",
"statusDetails": { 
    "string": "string"
    ...
},
"expectedVersion": "number",
"executionNumber": long,
"includeJobExecutionState": boolean,
"includeJobDocument": boolean,
"stepTimeoutInMinutes": long,
"clientToken": "string"
}
```

`status`  
작업 실행의 새 상태(`IN_PROGRESS`, `FAILED`, `SUCCEEDED` 또는 `REJECTED`). 이 명령은 업데이트할 때마다 지정해야 합니다.

`statusDetails`  
작업 실행 상태를 설명하는 이름-값 페어의 모음입니다. 지정하지 않으면 `statusDetails`가 바뀌지 않습니다.

`expectedVersion`  
예상되는 현재 작업 실행 버전입니다. 작업 실행은 업데이트할 때마다 버전이 일정하게 증가합니다. AWS IoT 작업 서비스에 저장된 작업 실행 버전이 일치하지 않으면 업데이트가 `VersionMismatch` 오류와 함께 거부됩니다. 현재 작업 실행 상태 데이터가 포함된 [ErrorResponse](jobs-api.md#jobs-mqtt-error-response)도 반환됩니다. (이러한 경우에는 작업 실행 상태에 대한 데이터를 가져오기 위해 `DescribeJobExecution` 요청을 별도로 실행할 필요가 없습니다)

`executionNumber`  
(선택 사항) 디바이스에서 작업 실행을 식별하기 위한 숫자입니다. 지정하지 않으면 최신 작업 실행이 사용됩니다.

`includeJobExecutionState`  
(선택 사항) 이 명령을 추가하여 `true`로 설정하면 응답에 `JobExecutionState` 필드가 포함됩니다. 기본값은 `false`입니다.

`includeJobDocument`  
(선택 사항) 이 명령을 추가하여 `true`로 설정하면 응답에 `JobDocument` 필드가 포함됩니다. 기본값은 `false`입니다.

`stepTimeoutInMinutes`  
이 디바이스가 이 작업 실행을 마쳐야 하는 시간을 지정합니다. 이 타이머가 만료되기 전에 또는 타이머가 재설정되기 전에 작업 실행 상태가 최종 상태로 설정되지 않으면 작업 실행 상태가 `TIMED_OUT`이 됩니다. 이 제한 시간을 설정 또는 재설정하더라도 작업을 생성했을 때 지정했을 수 있는 작업 실행 제한 시간은 바뀌지 않습니다.

메시지 브로커는 특정 구독 없이도 `$aws/things/thingName/jobs/jobId/update/accepted`와 `$aws/things/thingName/jobs/jobId/update/rejected`를 게시합니다. 그러나 클라이언트가 메시지를 수신하려면 메시지를 수신 대기해야 합니다. 자세한 내용은 [작업 API 메시지에 대한 참고 사항](#jobs-mqtt-note)을 참조하세요.

응답 페이로드:

```
{
"executionState": JobExecutionState,
"jobDocument": "string",
"timestamp": timestamp,
"clientToken": "string"
}
```

`executionState`  
[JobExecutionState](jobs-mqtt-https-api.md#jobs-mqtt-job-execution-state) 객체입니다.

`jobDocument`  
[작업 문서](key-concepts-jobs.md) 객체.  
MQTT 응답에서 `jobDocument` 필드는 JSON 객체입니다. HTTP 응답에서 JSON 객체의 문자열 표현입니다.

`timestamp`  
메시지가 전송된 Epoch 이후 경과 시간(초)입니다.

`clientToken`  
요청과 응답의 연관성을 나타낼 때 사용하는 클라이언트 토큰입니다.

MQTT 프로토콜을 사용하는 경우 다음 업데이트를 수행할 수도 있습니다.

## JobExecutionsChanged
<a name="mqtt-jobexecutionschanged"></a>

대기 중인 사물의 작업 실행 목록에 작업 실행이 추가되거나 제거될 때마다 전송됩니다.

다음 주제를 사용합니다.

`$aws/things/thingName/jobs/notify`

메시지 페이로드:

```
{
"jobs" : {
    "JobExecutionState": [ [https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecutionSummary.html](https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecutionSummary.html) ... ]
         },
    "timestamp": timestamp
}
```

## NextJobExecutionChanged
<a name="mqtt-nextjobexecutionchanged"></a>

`jobId` `$next`를 사용하는 [https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeJobExecution.html)에서 정의한 바와 같이 대기 중인 사물의 작업 실행 목록에서 다음 작업 실행에 변경 사항이 있을 때마다 전송됩니다. 다음 작업의 실행 세부 정보가 변경될 때는 전송되지 않으며, 오직 `jobId` `$next`를 사용한 `DescribeJobExecution`에서 반환되는 다음 작업이 변경되었을 때만 전송됩니다. 예들 들어 작업 실행 J1과 J2가 `QUEUED` 상태라고 가정하겠습니다. J1은 대기 중인 작업 실행 목록에서 다음 작업 실행입니다. 이때 J1의 상태는 아무런 변화가 없는데 J2의 상태가 `IN_PROGRESS`로 바뀐다면 이 알림 메시지가 J2의 세부 정보와 함께 전송됩니다.

다음 주제를 사용합니다.

`$aws/things/thingName/jobs/notify-next`

메시지 페이로드:

```
{
"execution" : [https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecution.html),
"timestamp": timestamp,
}
```

# 작업 디바이스 HTTP API
<a name="jobs-http-device-api"></a>

디바이스는 포트 443에서 HTTP 서명 버전 4를 사용하여 AWS IoT 작업과 통신할 수 있습니다. 이는 AWS SDKs 및 CLI에서 사용하는 방법입니다. 이 도구에 관한 자세한 내용은 [AWS CLI 명령 참조: iot-jobs-data](https://docs.aws.amazon.com/cli/latest/reference/iot-jobs-data/index.html) 또는 [AWS SDK 및 도구](https://aws.amazon.com/tools/#sdk)를 참조하세요.

다음 명령은 작업을 실행하는 디바이스에 사용할 수 있습니다. MQTT 프로토콜에서 API 작업을 사용하는 방법에 대한 자세한 내용은 [작업 디바이스 MQTT API 작업](jobs-mqtt-api.md) 섹션을 참조하세요.

## GetPendingJobExecutions
<a name="http-getpendingjobexecutions"></a>

지정된 사물에 대해 최종 상태가 아닌 모든 작업 목록을 가져옵니다.

------
#### [ HTTPS request ]

```
GET /things/thingName/jobs
```

응답:

```
{
"inProgressJobs" : [ JobExecutionSummary ... ], 
"queuedJobs" : [ JobExecutionSummary ... ]
}
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_GetPendingJobExecutions.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_GetPendingJobExecutions.html) 단원을 참조하십시오.

------
#### [ CLI syntax ]

```
aws iot-jobs-data get-pending-job-executions \
--thing-name <value>  \
[--cli-input-json <value>] \
[--generate-cli-skeleton]
```

 `cli-input-json` 형식:

```
{
"thingName": "string"
}
```

자세한 내용은 [https://docs.aws.amazon.com/cli/latest/reference/iot-jobs-data/get-pending-job-executions.html](https://docs.aws.amazon.com/cli/latest/reference/iot-jobs-data/get-pending-job-executions.html) 단원을 참조하십시오.

------

## StartNextPendingJobExecution
<a name="http-startnextpendingjobexecution"></a>

사물의 다음 번 대기 중 작업 실행을 가져오고 시작합니다(`IN_PROGRESS` 또는 `QUEUED` 상태).
+ 상태가 `IN_PROGRESS`인 모든 작업 실행이 먼저 반환됩니다.
+ 작업 실행이 생성된 순서대로 반환됩니다.
+ 다음 대기 중인 작업 실행이 `QUEUED` 상태이면, 상태가 `IN_PROGRESS`로 바뀌고 작업 실행의 상태 세부 정보가 지정한 대로 설정됩니다.
+ 다음 보류 중인 작업 실행이 이미 `IN_PROGRESS` 상태이면 상태 세부 정보가 바뀌지 않습니다.
+ 보류 중인 작업 실행이 없으면 응답에 `execution` 필드가 포함되지 않습니다.
+ 선택적으로 `stepTimeoutInMinutes` 속성에 대한 값을 설정하여 단계 타이머를 생성할 수 있습니다. `UpdateJobExecution`를 실행하여 이 속성 값을 업데이트하지 않은 경우 단계 타이머가 만료할 때 작업 실행이 시간 초과됩니다.

------
#### [ HTTPS request ]

다음 예제에서는 요청 구문을 보여줍니다.

```
PUT /things/thingName/jobs/$next
{
"statusDetails": { 
    "string": "string" 
    ... 
},
"stepTimeoutInMinutes": long
}
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_StartNextPendingJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_StartNextPendingJobExecution.html) 단원을 참조하십시오.

------
#### [ CLI syntax ]

**시놉시스:**

```
aws iot-jobs-data  start-next-pending-job-execution \
--thing-name <value> \
{--step-timeout-in-minutes <value>] \
[--status-details <value>]  \
[--cli-input-json <value>] \
[--generate-cli-skeleton]
```

 `cli-input-json` 형식:

```
{
"thingName": "string",
"statusDetails": {
"string": "string"
},
"stepTimeoutInMinutes": long
}
```

자세한 내용은 [https://docs.aws.amazon.com/cli/latest/reference/iot-jobs-data/start-next-pending-job-execution.html](https://docs.aws.amazon.com/cli/latest/reference/iot-jobs-data/start-next-pending-job-execution.html) 단원을 참조하십시오.

------

## DescribeJobExecution
<a name="http-describejobexecution"></a>

작업 실행에 대한 세부 정보를 가져옵니다.

`jobId`를 `$next`로 설정하여 다음 대기 중인 사물의 작업 실행을 반환할 수 있습니다. 작업 실행 상태는 `QUEUED` 또는 `IN_PROGRESS`가 되어야 합니다.

------
#### [ HTTPS request ]

요청:

```
GET /things/thingName/jobs/jobId?executionNumber=executionNumber&includeJobDocument=includeJobDocument
```

응답:

```
{
"execution" : JobExecution,
}
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html) 단원을 참조하십시오.

------
#### [ CLI syntax ]

**시놉시스:**

```
aws iot-jobs-data  describe-job-execution \
--job-id <value> \
--thing-name <value> \
[--include-job-document | --no-include-job-document] \
[--execution-number <value>]  \
[--cli-input-json <value>] \
[--generate-cli-skeleton]
```

 `cli-input-json` 형식:

```
{
"jobId": "string",
"thingName": "string",
"includeJobDocument": boolean,
"executionNumber": long
}
```

자세한 내용은 [https://docs.aws.amazon.com/cli/latest/reference/iot-data/describe-job-execution.html](https://docs.aws.amazon.com/cli/latest/reference/iot-data/describe-job-execution.html) 단원을 참조하십시오.

------

## UpdateJobExecution
<a name="http-updatejobexecution"></a>

작업 실행의 상태를 업데이트합니다. 선택적으로 `stepTimeoutInMinutes` 속성에 대한 값을 설정하여 단계 타이머를 생성할 수 있습니다. `UpdateJobExecution`를 다시 실행하여 이 속성 값을 업데이트하지 않은 경우 단계 타이머가 만료할 때 작업 실행이 시간 초과됩니다.

------
#### [ HTTPS request ]

요청:

```
POST /things/thingName/jobs/jobId
{
"status": "job-execution-state",
"statusDetails": { 
    "string": "string"
    ...
},
"expectedVersion": "number",
"includeJobExecutionState": boolean,
"includeJobDocument": boolean,
"stepTimeoutInMinutes": long,
"executionNumber": long 
}
```

자세한 내용은 [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_UpdateJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_UpdateJobExecution.html) 단원을 참조하십시오.

------
#### [ CLI syntax ]

**시놉시스:**

```
aws iot-jobs-data  update-job-execution \
--job-id <value> \
--thing-name <value> \
--status <value> \
[--status-details <value>] \
[--expected-version <value>] \
[--include-job-execution-state | --no-include-job-execution-state] \
[--include-job-document | --no-include-job-document] \
[--execution-number <value>]  \
[--cli-input-json <value>] \
[--step-timeout-in-minutes <value>] \
[--generate-cli-skeleton]
```

 `cli-input-json` 형식:

```
{
"jobId": "string",
"thingName": "string",
"status": "string",
"statusDetails": {
"string": "string"
},
"stepTimeoutInMinutes": number,
"expectedVersion": long,
"includeJobExecutionState": boolean,
"includeJobDocument": boolean,
"executionNumber": long
}
```

자세한 내용은 [https://docs.aws.amazon.com/cli/latest/reference/iot-data/update-job-execution.html](https://docs.aws.amazon.com/cli/latest/reference/iot-data/update-job-execution.html) 단원을 참조하십시오.

------

# AWS IoT 작업으로 사용자 및 디바이스 보호
<a name="iot-jobs-security"></a>

사용자에게 디바이스에서 AWS IoT 작업을 사용하도록 권한을 부여하려면 IAM 정책을 사용하여 권한을 부여해야 합니다. 그런 다음 AWS IoT Core 정책을 사용하여 디바이스에 안전하게 연결하고 AWS IoT, 작업 실행을 수신하고, 실행 상태를 업데이트하여 디바이스에 권한을 부여해야 합니다.

## AWS IoT 작업에 필요한 정책 유형
<a name="jobs-required-policy"></a>

다음 표에서는 권한 부여에 사용해야 하는 다양한 유형의 정책을 보여줍니다. 사용해야 하는 필수 정책에 대한 자세한 내용은 [권한 부여](iot-authorization.md) 섹션을 참조하세요.


**필수 정책 유형**  

| 사용 사례: | 프로토콜 | Authentication | 컨트롤 플레인/데이터 영역 | 자격 증명 유형 | 필수 정책 유형 | 
| --- | --- | --- | --- | --- | --- | 
| 관리자, 운영자 또는 클라우드 서비스가 작업과 안전하게 작업하도록 권한 부여 | HTTPS | AWS 서명 버전 4 인증(포트 443) | 제어 영역 및 데이터 영역 모두 | Amazon Cognito, IAM 또는 연동 페더레이션 사용자 | IAM 정책 | 
| IoT 디바이스가 작업과 안전하게 작동하도록 권한 부여 | MQTT/HTTPS | TCP 또는 TLS 상호 인증(포트 8883 또는 443) | 데이터 영역 | X.509 인증서 | AWS IoT Core 정책 | 

컨트롤 플레인과 데이터 플레인 모두에서 수행할 수 있는 AWS IoT 작업 작업을 승인하려면 IAM 정책을 사용해야 합니다. 이 작업을 수행하려면 AWS IoT 에 자격 증명이 인증되어 있어야 합니다. [Amazon Cognito 자격 증명](cognito-identities.md) 또는 [IAM 사용자, 그룹 및 역할](iam-users-groups-roles.md)이어야 합니다. 인증에 대한 자세한 내용은 [Authentication](authentication.md) 섹션을 참조하세요.

이제 디바이스 게이트웨이에 안전하게 연결하기 위한 AWS IoT Core 정책을 사용하여 데이터 영역에서 디바이스를 승인해야 합니다. 디바이스 게이트웨이를 사용하면 디바이스가와 안전하게 통신하고 AWS IoT, 작업 실행을 수신하고, 작업 실행 상태를 업데이트할 수 있습니다. 보안 [MQTT](mqtt.md) 또는 [HTTPS 게시](http.md) 통신 프로토콜을 사용하여 디바이스 통신이 보호됩니다. 이러한 프로토콜은에서 제공하는 [X.509 클라이언트 인증서](x509-client-certs.md) AWS IoT 를 사용하여 디바이스 연결을 인증합니다.

다음은 사용자, c 시끄러운 서비스 및 디바이스에 AWS IoT 작업을 사용하도록 권한을 부여하는 방법을 보여줍니다. 제어 영역 및 데이터 영역 API 작업에 대한 자세한 내용은 [AWS IoT 작업 API 작업](jobs-api.md) 섹션을 참조하세요.

**Topics**
+ [AWS IoT 작업에 필요한 정책 유형](#jobs-required-policy)
+ [사용자 및 클라우드 서비스에 AWS IoT 작업 사용 권한 부여](iam-policy-users-jobs.md)
+ [디바이스가 데이터 영역에서 AWS IoT 작업을 안전하게 사용하도록 권한 부여](iot-data-plane-jobs.md)

# 사용자 및 클라우드 서비스에 AWS IoT 작업 사용 권한 부여
<a name="iam-policy-users-jobs"></a>

사용자 및 클라우드 서비스에 권한을 부여하려면 제어 영역과 데이터 영역 모두에서 IAM 정책을 사용해야 합니다. 정책은 HTTPS 프로토콜과 함께 사용해야 하며 사용자를 인증하기 위해 AWS 서명 버전 4 인증(포트 443)을 사용해야 합니다.

**참고**  
AWS IoT Core 정책은 컨트롤 플레인에서 사용해서는 안 됩니다. 사용자 또는 클라우드 서비스 권한 부여에는 IAM 정책만 사용됩니다. 필수 정책 유형에 대한 자세한 내용은 [AWS IoT 작업에 필요한 정책 유형](iot-jobs-security.md#jobs-required-policy) 섹션을 참조하세요.

IAM 정책은 정책 문을 포함하는 JSON 문서입니다. 정책 문은 *Effect*,*Action* 및 *Resource* 요소를 사용하여 리소스, 허용되거나 거부되는 작업, 작업이 허용되거나 거부되는 조건을 지정합니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM JSON 정책 요소 참조](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_elements.html)를 참조하세요.

**주의**  
`"Action": ["iot:*"]` IAM 정책 또는 AWS IoT Core 정책과 같은 와일드카드 권한을 사용하지 않는 것이 좋습니다. 와일드카드 권한을 사용하는 것은 권장되는 보안 모범 사례가 아닙니다. 자세한 내용은 [AWS IoT policies overly permissive](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/audit-chk-iot-policy-permissive.html)를 참조하세요.

## 제어 영역의 IAM 정책
<a name="iam-jobs-control-plane"></a>

제어 영역에서 IAM 정책은 작업에 `iot:` 접두사를 사용하여 해당 작업 API 작업을 승인합니다. 예를 들어, `iot:CreateJob` 정책 작업은 사용자에게 [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html) API를 사용할 권한을 부여합니다.

### 정책 작업
<a name="iam-control-plane-actions"></a>

다음 표는 IAM 정책 작업 및 API 작업을 사용할 수 있는 권한을 보여줍니다. 리소스 유형에 대한 자세한 내용은에서 [정의한 리소스 유형을 AWS IoT](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-job) 참조하세요. 작업에 대한 AWS IoT 자세한 내용은에서 [정의한 작업을 AWS IoT](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html) 참조하세요.


**제어 영역에서의 IAM 정책 작업**  

| 정책 작업 | API 작업 | 조건 키 | 설명 | 
| --- | --- | --- | --- | 
| iot:AssociateTargetsWithJob | [https://docs.aws.amazon.com/iot/latest/apireference/API_AssociateTargetsWithJob.html](https://docs.aws.amazon.com/iot/latest/apireference/API_AssociateTargetsWithJob.html) |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/iam-policy-users-jobs.html)  | 그룹을 연속 작업에 연결할 수 있는 권한을 나타냅니다. 대상 연결을 요청할 때마다 iot:AssociateTargetsWithJob 권한이 확인됩니다. | 
| iot:CancelJob | [https://docs.aws.amazon.com/iot/latest/apireference/API_CancelJob.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CancelJob.html) | 작업 | 작업을 취소할 수 있는 권한을 나타냅니다. 작업 취소를 요청할 때마다 iot:CancelJob 권한이 확인됩니다. | 
| iot:CancelJobExecution | [https://docs.aws.amazon.com/iot/latest/apireference/API_CancelJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CancelJobExecution.html) |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/iam-policy-users-jobs.html)  | 작업 실행을 취소할 수 있는 권한을 나타냅니다. 작업 실행 취소를 요청할 때마다 iot: CancelJobExecution 권한이 확인됩니다. | 
| iot:CreateJob | [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html) |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/iam-policy-users-jobs.html)  | 작업을 생성할 수 있는 권한을 나타냅니다. 작업 생성을 요청할 때마다 iot: CreateJob 권한이 확인됩니다. | 
| iot:CreateJobTemplate | [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJobTemplate.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJobTemplate.html) |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/iam-policy-users-jobs.html)  | 작업 템플릿을 생성할 수 있는 권한을 나타냅니다. 작업 템플릿 생성을 요청할 때마다 iot: CreateJobTemplate 권한이 확인됩니다. | 
| iot:DeleteJob | [https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteJob.html](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteJob.html) | 작업 | 작업을 삭제할 수 있는 권한을 나타냅니다. 작업 삭제를 요청할 때마다 iot: DeleteJob 권한이 확인됩니다. | 
| iot:DeleteJobTemplate | [https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteJobTemplate.html](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteJobTemplate.html) | jobtemplate | 작업 템플릿을 삭제할 수 있는 권한을 나타냅니다. 작업 템플릿 삭제를 요청할 때마다 iot: CreateJobTemplate 권한이 확인됩니다. | 
| iot:DeleteJobExecution | [https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteJobExecution.html) |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/iam-policy-users-jobs.html)  | 작업 실행을 삭제할 수 있는 권한을 나타냅니다. 작업 실행 삭제를 요청할 때마다 iot: DeleteJobExecution 권한이 확인됩니다. | 
| iot:DescribeJob | [https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeJob.html](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeJob.html) | 작업 | 작업을 설명할 수 있는 권한을 나타냅니다. 작업 설명을 요청할 때마다 iot: DescribeJob 권한이 확인됩니다. | 
| iot:DescribeJobExecution | [https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeJobExecution.html) |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/iam-policy-users-jobs.html)  | 작업 실행을 설명할 수 있는 권한을 나타냅니다. 작업 실행 설명을 요청할 때마다 iot: DescribeJobExecution 권한이 확인됩니다. | 
| iot:DescribeJobTemplate | [https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeJobTemplate.html](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeJobTemplate.html) | jobtemplate | 작업 템플릿을 설명할 수 있는 권한을 나타냅니다. 작업 템플릿 설명을 요청할 때마다 iot: DescribeJobTemplate 권한이 확인됩니다. | 
| iot:DescribeManagedJobTemplate | [https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeManagedJobTemplate.html](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeManagedJobTemplate.html) | jobtemplate | 관리형 작업 템플릿을 설명할 수 있는 권한을 나타냅니다. 관리형 작업 템플릿 설명을 요청할 때마다 iot: DescribeManagedJobTemplate 권한이 확인됩니다. | 
| iot:GetJobDocument | [https://docs.aws.amazon.com/iot/latest/apireference/API_GetJobDocument.html](https://docs.aws.amazon.com/iot/latest/apireference/API_GetJobDocument.html) | 작업 | 작업에 대한 작업 문서를 가져올 수 있는 권한을 나타냅니다. 작업 문서 가져오기를 요청할 때마다 iot:GetJobDocument 권한이 확인됩니다. | 
| iot:ListJobExecutionsForJob | [https://docs.aws.amazon.com/iot/latest/apireference/API_ListJobExecutionsForJob.html](https://docs.aws.amazon.com/iot/latest/apireference/API_ListJobExecutionsForJob.html) | 작업 | 작업에 대한 작업 실행을 나열할 수 있는 권한을 나타냅니다. 작업에 대한 작업 실행 나열을 요청할 때마다 iot:ListJobExecutionsForJob 권한이 확인됩니다. | 
| iot:ListJobExecutionsForThing | [https://docs.aws.amazon.com/iot/latest/apireference/API_ListJobExecutionsForThing.html](https://docs.aws.amazon.com/iot/latest/apireference/API_ListJobExecutionsForThing.html) | thing | 작업에 대한 작업 실행을 나열할 수 있는 권한을 나타냅니다. 사물에 대한 작업 실행 나열을 요청할 때마다 iot:ListJobExecutionsForThing 권한이 확인됩니다. | 
| iot:ListJobs | [https://docs.aws.amazon.com/iot/latest/apireference/API_ListJobs.html](https://docs.aws.amazon.com/iot/latest/apireference/API_ListJobs.html) | 없음 | 작업을 나열할 수 있는 권한을 나타냅니다. 작업 나열을 요청할 때마다 iot:ListJobs 권한이 확인됩니다. | 
| iot:ListJobTemplates | [https://docs.aws.amazon.com/iot/latest/apireference/API_ListJobTemplates.html](https://docs.aws.amazon.com/iot/latest/apireference/API_ListJobTemplates.html) | 없음 | 작업 템플릿을 나열할 수 있는 권한을 나타냅니다. 작업 템플릿 나열을 요청할 때마다 iot:ListJobTemplates 권한이 확인됩니다. | 
| iot:ListManagedJobTemplates | [https://docs.aws.amazon.com/iot/latest/apireference/API_ListManagedJobTemplates.html](https://docs.aws.amazon.com/iot/latest/apireference/API_ListManagedJobTemplates.html) | 없음 | 관리형 작업 템플릿을 나열할 수 있는 권한을 나타냅니다. 관리형 작업 템플릿 나열을 요청할 때마다 iot:ListManagedJobTemplates 권한이 확인됩니다. | 
| iot:UpdateJob | [https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateJob.html](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateJob.html) | 작업 | 작업을 업데이트할 수 있는 권한을 나타냅니다. 작업 업데이트를 요청할 때마다 iot:UpdateJob 권한이 확인됩니다. | 
| iot:TagResource | [https://docs.aws.amazon.com/iot/latest/apireference/API_TagResource.html](https://docs.aws.amazon.com/iot/latest/apireference/API_TagResource.html) |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/iam-policy-users-jobs.html)  | 특정 리소스에 태그를 지정할 수 있는 권한을 부여합니다. | 
| iot:UntagResource | [https://docs.aws.amazon.com/iot/latest/apireference/API_UntagResource.html](https://docs.aws.amazon.com/iot/latest/apireference/API_UntagResource.html) |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/iam-policy-users-jobs.html)  | 특정 리소스의 태그를 해제할 수 있는 권한을 나타냅니다. | 

### 기본 IAM 정책 예시
<a name="iam-control-plane-example"></a>

다음 예시는 IoT 사물 및 사물 그룹에 대해 다음 작업을 수행할 수 있는 사용자 권한을 허용하는 IAM 정책을 보여줍니다.

이 예에서 다음과 같이 대체합니다.
+ *region* with your AWS 리전, 예: `us-east-1`.
+ *account-id*와 같은 사용자 AWS 계정 번호`57EXAMPLE833`.
+ *thing-group-name*을 작업의 대상인 IoT 사물 그룹의 이름으로 대체합니다. 예: `FirmwareUpdateGroup`.
+ *thing-name*을 작업의 대상인 IoT 사물의 이름으로 대체합니다. 예: `MyIoTThing`.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "iot:CreateJobTemplate",
                "iot:CreateJob"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:iot:us-east-1:123456789012:thinggroup/thing-group-name"
        },
        {
            "Action": [
                "iot:DescribeJob",
                "iot:CancelJob",
                "iot:DeleteJob"
            ],
            "Effect": "Allow",
	    "Resource": "arn:aws:iot:us-east-1:123456789012:job/*"
        },
        {
            "Action": [
                "iot:DescribeJobExecution",
                "iot:CancelJobExecution",
                "iot:DeleteJobExecution"
            ],
            "Effect": "Allow",
            "Resource": [
            "arn:aws:iot:us-east-1:123456789012:thing/thing-123",
                "arn:aws:iot:us-east-1:123456789012:job/*"
            ]
        }
    ]
}
```

### IP 기반 권한 부여에 대한 IAM 정책 예
<a name="iam-control-plane-example1"></a>

*보안 주체*가 특정 IP 주소에서 컨트롤 플레인 엔드포인트로 API를 호출하지 못하도록 제한할 수 있습니다. 허용할 수 있는 IP 주소를 지정하려면 IAM 정책의 Condition 요소에서 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceip](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceip) 전역 조건 키를 사용합니다.

이 조건 키를 사용하면 다른 AWS 서비스에 대한 액세스가와 같이 사용자를 대신하여 이러한 API를 호출하지 못하도록 거부할 수도 있습니다 AWS CloudFormation. 이러한 서비스에 대한 액세스를 허용하려면 aws:SourceIp 키와 함께 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-viaawsservice](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-viaawsservice) 전역 조건 키를 사용합니다. 이렇게 하면 소스 IP 주소 액세스 제한이 보안 주체가 직접 수행한 요청에만 적용됩니다. 자세한 내용은 [AWS: 소스 IP를 AWS 기반으로에 대한 액세스 거부를](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_aws_deny-ip.html) 참조하세요.

다음 예제에서는 특정 IP 주소만 컨트롤 플레인 엔드포인트에 대한 API 호출을 수행할 수 있도록 허용하는 방법을 보여줍니다. `aws:ViaAWSService` 키가 `true`로 설정되어 있으므로 다른 서비스에서 사용자를 대신하여 API를 호출할 수 있습니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:CreateJobTemplate",
                "iot:CreateJob"
            ],
            "Resource": [
                "*"
            ],
            "Condition": {
                 "IpAddress": {
                     "aws:SourceIp": "123.45.167.89"
             },
                 "Bool": {
                     "aws:ViaAWSService": "false"
        }
        }
    }]
}
```

## 데이터 영역의 IAM 정책
<a name="iam-jobs-data-plane"></a>

데이터 영역의 IAM 정책은 `iotjobsdata:` 접두사를 사용하여 사용자가 수행할 수 있는 작업 API 작업에 권한을 부여합니다. 데이터 플레인에서 `iotjobsdata:DescribeJobExecution` 정책 작업을 사용하여 사용자에게 [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html) API 사용 권한을 부여할 수 있습니다.

**주의**  
 AWS IoT 작업의 대상으로 디바이스를 지정할 때는 데이터 영역에서 IAM 정책을 사용하는 것을 권장하지 않습니다. 사용자가 작업을 생성하고 관리할 수 있도록 제어 영역에서 IAM 정책을 사용하는 것이 좋습니다. 데이터 영역에서 디바이스가 작업 실행을 검색하고 실행 상태를 업데이트하도록 권한을 부여하려면 [AWS IoT Core HTTPS 프로토콜에 대한 정책](iot-data-plane-jobs.md#iot-jobs-data-http)을(를) 사용하세요.

### 기본 IAM 정책 예시
<a name="iam-data-plane-example"></a>

권한을 부여받아야 하는 API 작업은 일반적으로 CLI 명령을 입력하여 수행합니다. 다음은 `DescribeJobExecution` 작업을 수행하는 예를 보여줍니다.

이 예에서 다음과 같이 대체합니다.
+ *region* with your AWS 리전, 예: `us-east-1`.
+ *account-id*와 같은 사용자 AWS 계정 번호`57EXAMPLE833`.
+ *thing-name*을 작업의 대상인 IoT 사물의 이름으로 대체합니다. 예: `myRegisteredThing`.
+ `job-id`는 API를 사용하여 대상이 지정된 작업의 고유 식별자입니다.

```
aws iot-jobs-data describe-job-execution \ 
    --endpoint-url "https://account-id.jobs.iot.region.amazonaws.com" \ 
    --job-id jobID --thing-name thing-name
```

다음은 이 작업을 승인하는 샘플 IAM 정책을 보여줍니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Action": [
            "iotjobsdata:DescribeJobExecution"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:iot:us-east-1:123456789012:thing/thing-123"
    }
}
```

### IP 기반 권한 부여에 대한 IAM 정책 예
<a name="iam-data-plane-example1"></a>

*보안 주체*가 특정 IP 주소에서 데이터 영역 엔드포인트로 API를 호출하지 못하도록 제한할 수 있습니다. 허용할 수 있는 IP 주소를 지정하려면 IAM 정책의 Condition 요소에서 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceip](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceip) 전역 조건 키를 사용합니다.

이 조건 키를 사용하면 다른 AWS 서비스에 대한 액세스가와 같이 사용자를 대신하여 이러한 API를 호출하지 못하도록 거부할 수도 있습니다 AWS CloudFormation. 이러한 서비스에 대한 액세스를 허용하려면 `aws:SourceIp` 조건 키와 함께 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-viaawsservice](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-viaawsservice) 전역 조건 키를 사용합니다. 이렇게 하면 IP 주소 액세스 제한이 보안 주체가 직접 수행한 요청에만 적용됩니다. 자세한 내용은 [AWS: 소스 IP를 AWS 기반으로에 대한 액세스 거부를](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_aws_deny-ip.html) 참조하세요.

다음 예제에서는 특정 IP 주소만 데이터 영역 엔드포인트에 대한 API 호출을 수행할 수 있도록 허용하는 방법을 보여줍니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Effect": "Allow",
        "Action": [
            "iotjobsdata:*"
        ],
        "Resource": [
            "*"
        ],
        "Condition": {
            "IpAddress": {
                "aws:SourceIp": "123.45.167.89"
        },
            "Bool": {
                "aws:ViaAWSService": "false"
        }
        }
    }]
}
```

다음 예제에서는 특정 IP 주소 또는 주소 범위가 데이터 영역 엔드포인트에 대한 API 호출을 수행하지 못하도록 제한하는 방법을 보여줍니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "iotjobsdata:*"
            ],
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "123.45.167.89",
                        "192.0.2.0/24",
                        "203.0.113.0/24"
                    ]
            }
        },
            "Resource": [
                "*"
            ]
        }
    ]
}
```

### 제어 영역과 데이터 영역 모두에 대한 IAM 정책 예시
<a name="iam-data-plane-example2"></a>

컨트롤 플레인과 데이터 영역 모두에서 API 작업을 수행하는 경우 컨트롤 플레인 정책 작업은 `iot:` 접두사를, 데이터 영역 정책 작업은 `iotjobsdata:` 접두사를 사용해야 합니다.

예: `DescribeJobExecution` API는 제어 영역과 데이터 영역 모두에서 사용할 수 있습니다. 제어 영역에서 [DescribeJobExecution](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeJobExecution.html) API는 작업 실행을 설명하는 데 사용됩니다. 데이터 영역에서 [DescribeJobExecution](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html) API는 작업 실행의 세부 정보를 가져오는 데 사용됩니다.

다음 IAM 정책은 사용자에게 제어 영역과 데이터 영역 모두에서 `DescribeJobExecution` API를 사용할 권한을 부여합니다.

이 예에서 다음과 같이 대체합니다.
+ *region* with your AWS 리전, 예: `us-east-1`.
+ *account-id*와 같은 사용자 AWS 계정 번호`57EXAMPLE833`.
+ *thing-name*을 작업의 대상인 IoT 사물의 이름으로 대체합니다. 예: `MyIoTThing`.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "iotjobsdata:DescribeJobExecution"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:iot:us-east-1:123456789012:thing/thing-123"
        },
        {
            "Action": [
                "iot:DescribeJobExecution",
                "iot:CancelJobExecution",
                "iot:DeleteJobExecution"
            ],
            "Effect": "Allow",
            "Resource": [
            "arn:aws:iot:us-east-1:123456789012:thing/thing-123",
    "arn:aws:iot:us-east-1:123456789012:job/*"
            ]
        }
    ]
}
```

## IoT 리소스의 태깅 권한 부여
<a name="tagging-iot-jobs"></a>

생성, 수정 또는 사용할 수 있는 작업 및 작업 템플릿을 보다 효과적으로 제어하기 위해 작업 또는 작업 템플릿에 태그를 첨부할 수 있습니다. 태그는 또한 소유권을 식별하고 비용을 청구 그룹에 배치하고 태그를 첨부하여 비용을 배분하고 할당하는 데 도움이 됩니다.

사용자가 또는를 사용하여 생성한 작업 AWS Management Console 또는 작업 템플릿에 태그를 지정하려는 경우 AWS CLI IAM 정책은 사용자에게 태그 지정 권한을 부여해야 합니다. 이 권한을 부여하려면 IAM 정책이 `iot:TagResource` 작업을 사용해야 합니다.

**참고**  
IAM 정책에 해당 `iot:TagResource` 작업이 포함되지 않은 경우, 태그가 있는 [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html) 또는 [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJobTemplate.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJobTemplate.html)에서 `AccessDeniedException` 오류가 반환됩니다.

 AWS Management Console 또는를 사용하여 생성한 작업 또는 작업 템플릿에 태그를 지정하려면 AWS CLI IAM 정책에서 해당 작업에 태그를 지정할 수 있는 권한을 부여해야 합니다. 이 권한을 부여하려면 IAM 정책이 `iot:TagResource` 작업을 사용해야 합니다.

리소스 태깅에 대한 자세한 내용은 [AWS IoT 리소스에 태그 지정](tagging-iot.md) 섹션을 참조하세요.

### IAM 정책 예시
<a name="iam-jobs-tags-example"></a>

태깅 권한을 부여하는 다음 IAM 정책 예시를 참조하세요.

*예제 1*.

작업을 만들고 특정 환경에 태그를 지정하기 위해 다음 명령을 사용하는 사용자입니다.

대체 예시:
+ *region* with your AWS 리전, 예: `us-east-1`.
+ *account-id*와 같은 사용자 AWS 계정 번호`57EXAMPLE833`.
+ *thing-name*을 작업의 대상인 IoT 사물의 이름으로 대체합니다. 예: `MyIoTThing`.

```
aws iot create-job 
    --job-id test_job 
    --targets "arn:aws:iot:region:account-id:thing/thingOne"
    --document-source "https://s3.amazonaws.com/amzn-s3-demo-bucket/job-document.json"
    --description "test job description" 
    --tags Key=environment,Value=beta
```

이 예시에서는 다음 IAM 정책을 사용해야 합니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Action": [
            "iot:CreateJob",
            "iot:CreateJobTemplate",
            "iot:TagResource"
        ],
        "Effect": "Allow",
        "Resource": [
           "arn:aws:iot:us-east-1:123456789012:job/*",
           "arn:aws:iot:us-east-1:123456789012:jobtemplate/*"
        ]
    }
}
```

# 디바이스가 데이터 영역에서 AWS IoT 작업을 안전하게 사용하도록 권한 부여
<a name="iot-data-plane-jobs"></a>

디바이스가 데이터 영역에서 AWS IoT 작업과 안전하게 상호 작용할 수 있도록 권한을 부여하려면 AWS IoT Core policy. AWS IoT Core policies for job은 정책 문이 포함된 JSON 문서입니다. 이러한 정책은 *Effect*, *Action*, *Resource* 요소도 사용하며 IAM 정책과 유사한 규칙을 따릅니다. 요소에 대한 자세한 내용은 *IAM 사용 설명서*의 [IAM JSON 정책 요소 참조](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_elements.html)를 참조하세요.

정책은 MQTT 및 HTTPS 프로토콜 모두에서 사용할 수 있으며 TCP 또는 TLS 상호 인증을 사용하여 디바이스를 인증해야 합니다. 다음은 서로 다른 통신 프로토콜에서 이러한 정책을 사용하는 방법을 보여줍니다.

**주의**  
`"Action": ["iot:*"]` IAM 정책 또는 AWS IoT Core 정책과 같은 와일드카드 권한을 사용하지 않는 것이 좋습니다. 와일드카드 권한을 사용하는 것은 권장되는 보안 모범 사례가 아닙니다. 자세한 내용은 [AWS IoT policies overly permissive](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/audit-chk-iot-policy-permissive.html)를 참조하세요.

## AWS IoT Core MQTT 프로토콜에 대한 정책
<a name="iot-jobs-data-mqtt"></a>

AWS IoT Core MQTT 프로토콜에 대한 정책은 작업 디바이스 MQTT API 작업을 사용할 수 있는 권한을 부여합니다. MQTT API 작업은 작업 명령에 예약된 MQTT 주제로 작업하는 데 사용됩니다. 이러한 API 작업에 대한 자세한 내용은 [작업 디바이스 MQTT API 작업](jobs-mqtt-api.md) 섹션을 참조하세요.

MQTT 정책은 `iot:Connect`, `iot:Publish`, `iot:Subscribe`, `iot:Receieve` 등의 정책 작업을 사용하여 작업 주제와 함께 작동합니다. 이러한 정책을 사용하면 메시지 브로커에 연결하고, 작업 MQTT 주제를 구독하고, 디바이스와 클라우드 간에 MQTT 메시지를 송수신할 수 있습니다. 이러한 작업에 대한 자세한 내용은 [AWS IoT Core 정책 작업](iot-policy-actions.md) 섹션을 참조하세요.

 AWS IoT 작업 주제에 대한 자세한 내용은 섹션을 참조하세요[작업 주제](reserved-topics.md#reserved-topics-job).

### 기본 MQTT 정책 예시
<a name="iot-jobs-mqtt-example"></a>

다음 예시에서는 `iot:Publish` 및 `iot:Subscribe`을(를) 사용하여 작업과 작업 실행을 게시하고 구독하는 방법을 보여줍니다.

이 예에서 다음과 같이 대체합니다.
+ *region* with your AWS 리전, 예: `us-east-1`.
+ *account-id*와 같은 사용자 AWS 계정 번호`57EXAMPLE833`.
+ *thing-name*을 작업의 대상인 IoT 사물의 이름으로 대체합니다. 예: `MyIoTThing`.

****  

```
{
    "Version":"2012-10-17",		 	 	 

    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish",
                "iot:Subscribe"
            ],
            "Resource": [
            "arn:aws:iot:us-east-1:123456789012:topic/$aws/events/job/*",
    "arn:aws:iot:us-east-1:123456789012:topic/$aws/events/jobExecution/*",
    "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/thing-123/jobs/*"
            ]
        }
    ]
}
```

## AWS IoT Core HTTPS 프로토콜에 대한 정책
<a name="iot-jobs-data-http"></a>

AWS IoT Core 데이터 영역의 정책은 TLS 인증 메커니즘과 함께 HTTPS 프로토콜을 사용하여 디바이스를 승인할 수도 있습니다. 데이터 영역에서 정책은 `iotjobsdata:` 접두사를 사용하여 디바이스가 수행할 수 있는 작업 API 작업에 권한을 부여합니다. 예를 들어, `iotjobsdata:DescribeJobExecution` 정책 작업은 사용자에게 [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html) API를 사용할 권한을 부여합니다.

**참고**  
데이터 영역 정책 작업은 `iotjobsdata:` 접두사를 사용해야 합니다. 제어 영역에서 작업은 `iot:` 접두사를 사용해야 합니다. 제어 영역과 데이터 영역 정책 작업이 모두 사용되는 경우 IAM 정책 예시는 [제어 영역과 데이터 영역 모두에 대한 IAM 정책 예시](iam-policy-users-jobs.md#iam-data-plane-example2) 섹션을 참조하세요.

### 정책 작업
<a name="iot-data-plane-actions"></a>

다음 표에는 디바이스가 API 작업을 사용하도록 권한을 부여하기 위한 AWS IoT Core 정책 작업 및 권한 목록이 나와 있습니다. 데이터 영역에서 수행할 수 있는 API 작업 목록은 [작업 디바이스 HTTP API](jobs-http-device-api.md) 섹션을 참조하세요.

**참고**  
이 작업 실행 정책 작업은 HTTP TLS 엔드포인트에만 적용됩니다. MQTT 엔드포인트를 사용할 경우 앞서 정의한 MQTT 정책 작업을 사용해야 합니다.


**AWS IoT Core 데이터 영역의 정책 작업**  

| 정책 작업 | API 작업 | 조건 키 | 설명 | 
| --- | --- | --- | --- | 
| iotjobsdata:DescribeJobExecution | [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_DescribeJobExecution.html) |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/iot-data-plane-jobs.html)  | 작업 실행을 검색할 수 있는 권한을 나타냅니다. 작업 실행 검색을 요청할 때마다 iotjobsdata:DescribeJobExecution 권한이 확인됩니다. | 
| iotjobsdata:GetPendingJobExecutions | [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_GetPendingJobExecutions.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_GetPendingJobExecutions.html) | thing | 사물에 대해 단말 상태가 아닌 작업의 목록을 검색할 수 있는 권한을 나타냅니다. 목록 검색이 요청될 때마다 iotjobsdata:GetPendingJobExecutions 권한이 확인됩니다. | 
| iotjobsdata:StartNextPendingJobExecution | [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_GetPendingJobExecutions.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_GetPendingJobExecutions.html) | thing | 사물에 대해 대기 중인 다음 작업 실행을 가져오고 시작할 수 있는 권한을 나타냅니다. (즉, QUEUED에서 IN\$1PROGRESS 상태로 작업 실행을 업데이트함) 대기 중인 다음 작업의 실행 시작이 요청될 때마다 iotjobsdata:StartNextPendingJobExecution 권한이 확인됩니다. | 
| iotjobsdata:UpdateJobExecution | [https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_UpdateJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-jobs-data_UpdateJobExecution.html) | thing | 작업 실행을 업데이트할 수 있는 권한을 나타냅니다. 작업 실행 상태 업데이트가 요청될 때마다 iotjobsdata:UpdateJobExecution 권한이 확인됩니다. | 

### 기본 정책 예시
<a name="iot-data-plane-example"></a>

다음은 모든 리소스에 대한 데이터 영역 API 작업에서 작업을 수행할 수 있는 권한을 부여하는 AWS IoT Core 정책의 예입니다. IoT 사물과 같은 특정 리소스로 정책 범위를 지정할 수 있습니다. 이 예에서 다음과 같이 대체합니다.
+  AWS 리전 와 같은가 있는 *리전*`us-east-1`.
+ *account-id*와 같은 사용자 AWS 계정 번호`57EXAMPLE833`.
+ *thing-name*을 IoT 사물의 이름으로 대체합니다. 예: `MyIoTthing`.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "iotjobsdata:GetPendingJobExecutions",
                "iotjobsdata:StartNextPendingJobExecution",
                "iotjobsdata:DescribeJobExecution",
                "iotjobsdata:UpdateJobExecution"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:iot:us-east-1:123456789012:thing/thing-123"
        }
    ]
}
```

이러한 정책을 사용해야 하는 경우는 IoT 디바이스가 AWS IoT Core 정책을 사용하여 이 API 작업 중 하나에 액세스하는 경우입니다. 예를 들면 `DescribeJobExecution` API의 다음 예와 같습니다.

```
GET /things/thingName/jobs/jobId?executionNumber=executionNumber&includeJobDocument=includeJobDocument&namespaceId=namespaceId HTTP/1.1
```

# AWS IoT 작업 제한
<a name="job-limits"></a>

AWS IoT 작업에는의 최대 서비스 리소스 또는 작업 수에 해당하는 서비스 할당량 또는 제한이 있습니다 AWS 계정.

**Topics**
+ [작업 실행 한도](#job-execution-limits)
+ [활성 및 동시 작업 제한](#job-limits-active-concurrent)

## 작업 실행 한도
<a name="job-execution-limits"></a>

이 섹션에서는 AWS IoT Device Management의 작업 실행 한도에 대한 정보를 제공합니다.

**참고**  
이러한 한도는 [AWS IoT Device Management Service Quotas 설명서](https://docs.aws.amazon.com/general/latest/gr/iot_device_management.html#iot_device_management_quotas)에서 찾을 수 있는 서비스 할당량의 일부가 아닙니다.

보류 중인 작업 실행 수에 대한 정보를 얻으려면 `GetPendingJobExecutions` API를 사용하거나 AWS IoT 작업에 대한 MQTT 예약 주제를 구독하고를 수신할 수 있습니다[작업 알림 유형](jobs-comm-notifications.md#jobs-comm-notifications-types).

계정에서 보류 중인 작업 실행 수는 예약 구성을 활성화하고 반복 유지 관리 기간을 사용하는지 여부에 따라 달라질 수 있습니다.


**대기 중인 작업 실행의 최대 수**  

| API/알림 이름 | 설명 | 예약 구성 사용 | 예약 구성 미사용 | 
| --- | --- | --- | --- | 
| ListNotification | 이전 작업 실행이 터미널 상태가 되거나 새 작업 실행이 대기열에 추가되거나 비터미널 상태로 변경될 때마다 ListNotification가 게시됩니다. QUEUED 또는 IN\$1PROGRESS인 보류 중인 작업 실행을 최대 15개까지 표시할 수 있습니다. | 10 | 15(유지 관리 기간 동안에 최대 5개의 작업 실행이 ListNotification에만 표시됨). | 
| GetPendingJobExecutions | `GetPendingJobExecutions` API를 간접 호출하면 아직 시작되지 않은 작업 실행 목록이 반환되며, API 직접 호출 후에 시작할 수 있습니다. API는 최대 10개의 보류 중인 작업 실행을 반환할 수 있습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/job-limits.html)  | 10 | 15 | 

## 활성 및 동시 작업 제한
<a name="job-limits-active-concurrent"></a>

이 단원에서는 활성 및 동시 작업과 해당 작업에 적용되는 제한에 대해 자세히 알아볼 수 있습니다.

**활성 작업 및 활성 작업 제한**  
 AWS IoT 콘솔 또는 `CreateJob` API를 사용하여 작업을 생성하면 작업 상태가 로 변경됩니다`IN_PROGRESS`. 진행 중인 모든 작업은 *활성 작업*이며 활성 작업 제한에 포함됩니다. 여기에는 새 작업 실행을 롤아웃하는 작업이나 디바이스가 작업 실행을 완료할 때까지 대기 중인 작업이 포함됩니다. 이 제한은 연속 작업과 스냅샷 작업 모두에 적용됩니다.

**동시 작업 및 작업 동시성 제한**  
새 작업 실행을 롤아웃하는 진행 중인 작업 또는 이전에 생성된 작업 실행을 취소하는 작업은 *동시 작업*이며 작업 동시성 한도에 포함됩니다. AWS IoT 작업은 분당 1,000개의 디바이스 속도로 작업 실행을 신속하게 롤아웃하고 취소할 수 있습니다. 각 작업은 `concurrent`이며 짧은 시간 동안만 작업 동시 실행 한도에 포함됩니다. 작업 실행이 롤아웃되거나 취소된 후에는 작업이 더 이상 동시 작업이 아니며 작업 동시성 제한에 포함되지 않습니다. 디바이스가 작업 실행을 완료할 때까지 기다리는 동안 작업 동시성을 통해 많은 수의 작업을 생성할 수 있습니다.

**참고**  
선택적 예약 구성이 설정되었고 작업 문서 롤아웃이 유지 관리 기간 중에 수행되도록 예약된 작업이 선택한 `startTime`에 도달하고 최대 작업 동시 실행 한도에 도달하면 예약된 해당 작업은 `CANCELED` 상태가 됩니다.

작업이 동시인지 확인하려면 AWS IoT 콘솔에서 또는 `DescribeJob` 또는 `ListJob` API를 사용하여 작업의 `IsConcurrent` 속성을 사용할 수 있습니다. 이 제한은 연속 작업과 스냅샷 작업 모두에 적용됩니다.

에 대한 활성 작업 및 작업 동시성 한도와 기타 AWS IoT 작업 할당량을 보고 한도 증가를 요청 AWS 계정 하려면 [AWS IoT 의 디바이스 관리 엔드포인트 및 할당량을 참조하세요](https://docs.aws.amazon.com/general/latest/gr/iot_device_management.html#job-limits) AWS 일반 참조.

다음 다이어그램은 진행 중인 작업과 취소 중인 작업에 작업 동시성이 어떻게 적용되는지 보여줍니다.

![\[AWS IoT 작업의 다양한 상태를 보여주는 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/job-states-concurrency.png)


**참고**  
선택적 `SchedulingConfig`가 있는 새 작업은 초기 상태인 `SCHEDULED`로 유지된 후 선택된 `startTime`에 도달하면 `IN_PROGRESS`로 업데이트됩니다. 선택적 `SchedulingConfig`가 있는 새 작업이 선택된 `startTime`에 도달하여 `IN_PROGRESS`로 업데이트되면 활성 작업 제한 및 작업 동시성 제한 계산에 포함됩니다. 상태가 `SCHEDULED`인 작업은 활성 작업 제한을 계산하는 데 포함되지만 작업 동시성 제한을 계산하는 데는 포함되지 않습니다.

다음 표에서는 활성 및 동시 작업과 작업 상태의 동시 단계와 비동시 단계에 적용되는 제한을 보여줍니다.


**활성 및 동시 작업 제한**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/job-limits.html)

**참고**  
반복 유지 관리 기간의 최대 기간은 23시간 50분입니다.