AWS CLI을 사용하여 작업을 생성하고 관리합니다. - AWS IoT Core

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

AWS CLI을 사용하여 작업을 생성하고 관리합니다.

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

작업 생성

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

API 명령 또는 AWS CLI를 사용하여 날짜 및 시간을 입력할 때 구문에 대한 자세한 내용은 타임스탬프를 참조하세요.

작업을 사용한 코드 서명

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

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

start-signing-job 명령을 사용하여 코드 서명 작업을 생성합니다. start-signing-job은 작업 ID를 반환합니다. 서명이 저장되는 Amazon S3 위치를 가져오려면 describe-signing-job 명령을 사용합니다. 그런 다음 Amazon S3에서 서명을 다운로드할 수 있습니다. 코드 서명 작업에 대한 자세한 내용은 AWS IoT의 코드 서명 단원을 참조하세요.

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

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

작업 문서로 작업 생성

다음 명령은 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/my-s3-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 알림을 게시합니다.

작업 롤아웃 및 중단에 대한 구성 생성에 대한 자세한 내용은 작업 롤아웃 및 중단 구성을 참조하세요.

참고

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

작업 업데이트

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

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

자세한 내용은 작업 롤아웃 및 중단 구성을 참조하세요.

작업 취소

작업을 취소하려면 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 상태의 작업을 취소하면 진행 중인 모든 작업 실행이 취소되고 해당 작업을 실행하고 있는 디바이스가 작업의 실행 상태를 업데이트할 수 없게 됩니다. 주의를 기울여 취소된 작업을 실행하는 각 디바이스가 유효한 상태로 복구될 수 있는지 확인하세요.

취소된 작업의 상태나 해당 작업 실행의 상태는 결과적으로 일치합니다. AWS IoT가 새로운 작업 실행 예약을 중단하고 해당 작업에서 QUEUED 상태인 작업 실행을 디바이스에 바로 표시하지 않기 때문입니다. 작업 실행 상태가 CANCELED로 바뀌려면 디바이스 수와 기타 요인에 따라 시간이 걸릴 수 있습니다.

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

작업 실행 취소

디바이스의 작업 실행을 취소하려면 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로 바뀌려면 기타 요인에 따라 시간이 걸릴 수 있습니다.

작업 삭제

작업과 해당 작업 실행을 삭제하려면 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이 발생합니다.

작업 문서 가져오기

작업에 대한 작업 문서를 검색하려면 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/job-test-bucket/datafile}\"\n}" }
참고

이 명령을 사용하여 작업 문서를 가져올 때는 미리 서명된 Amazon S3 URL이 자리 표시자 URL을 대체하지 않습니다. 디바이스가 GetPendingJobExecutions API 작업을 호출하면 자리 표시자 URL이 작업 문서에서 미리 서명된 Amazon S3 URL로 대체됩니다.

작업 목록 조회

AWS 계정의 모든 작업 목록을 가져오려면 ListJobs 명령을 사용합니다. 작업 데이터 및 작업 실행 데이터는 제한된 시간동안 보존됩니다. 다음 명령을 실행하여 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" } ] }

작업 설명

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

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

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

{ "documentSource": "https://s3.amazonaws.com/job-test-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 } } }

작업 실행 목록 조회

특정 디바이스에서 실행되는 작업이 작업 실행 객체로 표현됩니다. 임의 작업에 대한 모든 작업 실행을 나열할 때는 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 } } ] }

사물에 대한 작업 실행 목록 조회

임의 사물에 대한 모든 작업 실행을 나열할 때는 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" } ] }

작업 실행 설명

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

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

위의 명령은 JobExecution을 반환합니다. 다음 예를 참조하세요.

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

작업 실행 삭제

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