명령 개념 및 상태 - AWS IoT Core

명령 개념 및 상태

AWS IoT 명령을 사용하여 클라우드에서 AWS IoT에 연결된 디바이스로 지침을 전송할 수 있습니다. 명령 기능을 사용하려면:

  1. 먼저 디바이스에서 명령을 실행하는 데 필요한 구성이 포함된 페이로드를 사용하여 명령 리소스를 생성합니다.

  2. 페이로드를 수신하고 지정된 작업을 수행할 대상 디바이스를 지정합니다.

  3. 대상 디바이스에서 명령을 실행하고 디바이스에서 상태 정보를 검색합니다. 문제를 해결하려면 CloudWatch 로그를 참조하세요.

이 워크플로에 대한 자세한 내용은 상위 수준 명령 워크플로 섹션을 참조하세요.

명령 주요 개념

다음은 명령 기능을 사용하기 위한 몇 가지 주요 개념을 보여줍니다.

명령

명령은 클라우드에서 IoT 디바이스로 전송되는 지침입니다. 이러한 지침(명령 페이로드)은 MQTT 메시지로 디바이스에 전송됩니다. 디바이스는 명령 페이로드를 수신한 후 지침을 처리하여 해당하는 작업을 수행할 수 있습니다. 이러한 작업의 예로는 디바이스 구성 설정 수정, 센서 판독 값 전송 또는 로그 업로드 등이 있습니다. 그러면 디바이스가 명령을 실행하고 결과를 클라우드에 반환할 수 있습니다. 이를 통해 연결된 디바이스를 원격으로 모니터링하고 제어할 수 있습니다.

네임스페이스,

명령 기능을 사용할 때 명령의 네임스페이스를 지정할 수 있습니다. AWS IoT Device Management에서 명령을 생성하려면 기본 AWS-IoT 네임스페이스를 사용해야 합니다. 이 네임스페이스를 사용하는 경우, 명령을 생성할 때 페이로드를 제공해야 합니다. 해당 페이로드는 대상 디바이스에서 명령을 실행할 때 사용됩니다. AWS IoT FleetWise에 대한 명령을 생성하려면, 기본 AWS-IoT-FleetWise 네임스페이스를 사용해야 합니다. 자세한 내용은 명령에 대한 AWS IoT FleetWise IoT 개발자 안내서원격 명령을 참조하세요.

페이로드:

명령을 생성할 때, 디바이스가 수행해야 하는 작업을 정의하는 페이로드를 제공해야 합니다. 페이로드는 원하는 형식을 사용할 수 있습니다. 디바이스가 전송 중인 정보를 올바르게 읽고 이해할 수 있도록 하려면 명령에 페이로드 형식 유형을 지정하는 것이 좋습니다. 디바이스가 MQTT5를 사용하는 경우 MQTT 표준에 따라 페이로드 형식을 식별할 수 있습니다. JSON 또는 CBOR에 대한 형식 표시기는 명령 요청 주제에서 사용할 수 있습니다.

대상 디바이스

명령을 실행하려면 명령을 수신하고 작업을 수행할 대상 디바이스를 지정해야 합니다. 디바이스가 AWS IoT에 사물로 등록된 경우 사물 이름을 사용할 수 있습니다. 디바이스가 사물로 등록되지 않은 경우 MQTT 클라이언트 ID를 대신 사용할 수 있습니다. 클라이언트 ID는 MQTT 프로토콜에 정의된 디바이스 또는 클라이언트의 고유 식별자입니다. 디바이스를 AWS IoT에 연결하는 데 사용할 수 있습니다.

명령 실행

명령 실행은 대상 디바이스에서 실행되는 명령의 인스턴스입니다. 실행을 시작하면 명령(페이로드)이 대상 디바이스로 전달됩니다. 이제 대상에 대해 고유한 명령 실행 ID가 생성됩니다. 그러면 디바이스가 명령을 실행하고 진행 상황을 AWS IoT에 보고할 수 있습니다. 디바이스 측 로직은 명령이 실행되는 방법과 예약된 주제에 상태가 게시되는 방법을 결정합니다.

명령 주제

명령을 실행하기 전에 디바이스가 명령 요청 주제를 구독해야 합니다. 명령을 실행하기 위해 클라우드에 요청을 보내면 해당 명령 요청 주제의 디바이스로 페이로드가 전송됩니다. 디바이스가 명령을 실행한 후 실행 결과 및 상태를 명령 응답 주제에 게시할 수 있습니다. 자세한 내용은 명령 주제 섹션을 참조하세요.

명령 상태

AWS 계정에서 생성하는 명령은 사용 가능, 사용되지 않음 또는 삭제 보류 중 상태일 수 있습니다.

사용 가능

명령 리소스를 성공적으로 생성하면 사용 가능 상태가 됩니다. 이제 해당 명령을 사용하여 디바이스에 명령 실행을 전송할 수 있습니다.

사용되지 않음.

더 이상 명령을 사용하지 않으려는 경우 사용 중단으로 표시할 수 있습니다. 이 상태에서는 명령의 새로운 실행을 디바이스로 전송할 수 없습니다. 이미 시작된 보류 중인 실행은 완료될 때까지 디바이스에서 계속 실행됩니다. 새로운 실행을 전송하려면 명령을 복원하여 사용할 수 있게 해야 합니다.

삭제 보류 중

삭제 명령을 표시할 때, 명령이 최대 제한 시간보다 긴 기간 동안 사용되지 않은 경우 명령이 자동으로 삭제됩니다. 이 작업은 영구적이며 실행 취소할 수 없습니다. 기본적으로 최대 제한 시간은 12시간입니다. 명령이 사용되지 않는 상태거나 최대 제한 시간보다 짧은 기간 동안 사용되지 않았던 경우 해당 명령은 삭제 보류 중 상태가 됩니다. 최대 제한 시간이 지나면 계정에서 해당 명령이 자동으로 제거됩니다.

명령 실행 상태

대상 디바이스에서 명령 실행을 시작하면 명령 실행은 CREATED 상태가 됩니다. 그런 다음 디바이스에서 보고하는 상태에 따라 다른 명령 실행 상태로 전환할 수 있습니다. 그러면 상태 정보를 검색하고 명령 실행을 추적할 수 있습니다.

참고

지정된 대상 디바이스에 대해 여러 명령을 동시에 실행할 수 있습니다. 동시성 제어 기능으로 동일한 디바이스로 전송되는 최대 실행 수를 제한하여 디바이스에 과부하가 걸리지 않도록 할 수 있습니다. 각 디바이스에 대해 실행할 수 있는 최대 동시 실행 수에 대한 자세한 내용은 AWS IoT Device Management 명령 할당량을 참조하세요.

다음 표에는 명령 실행의 다양한 상태와 실행 진행 상황에 따라 명령 실행이 다양한 상태 간에 전환되는 방법이 나와 있습니다.

명령 실행 상태 및 소스
명령 실행 상태 디바이스/클라우드에 의한 시작 여부 터미널 실행 여부 허용된 상태 전환
CREATED 클라우드 아니요
  • IN_PROGRESS

  • SUCCEEDED

  • FAILED

  • REJECTED

  • TIMED_OUT

IN_PROGRESS 디바이스 아니요
  • IN_PROGRESS

  • SUCCEEDED

  • FAILED

  • REJECTED

  • TIMED_OUT

TIMED_OUT 디바이스 및 클라우드 아니요
  • SUCCEEDED

  • FAILED

  • REJECTED

  • TIMED_OUT

SUCCEEDED 디바이스 해당 사항 없음
FAILED 디바이스 해당 사항 없음
REJECTED 디바이스 해당 사항 없음

디바이스가 명령을 실행하면, 디바이스는 명령이 예약된 MQTT 주제를 사용하여, 언제든지 클라우드에 상태 및 결과에 대한 업데이트를 게시할 수 있습니다. 클라우드에 각 명령 실행의 상태에 대한 추가 컨텍스트를 제공하기 위해 statusReason 객체 내에 포함된 reasonCodereasonDescription를 사용할 수 있습니다.

다음 다이어그램은 다양한 명령 실행 상태와 명령 실행 상태 간 전환 방식을 보여줍니다.

명령 실행 상태가 다양한 상태 간에 어떻게 전환되는지 보여주는 이미지입니다.
참고

AWS IoT가 제한 시간 내에 디바이스 응답을 감지하지 못하면 TIMED_OUT가 재시도 및 상태 변경을 허용하는 임시 상태로 설정됩니다. 디바이스가 명령 실행 중에 명시적으로 TIMED_OUT을 보고하는 경우 이는 더 이상 전환할 수 없는 터미널 상태가 됩니다. 비터미널 명령 실행을(를) 참조하세요.

다음 섹션에서는 터미널 및 비터미널 명령 실행, 다양한 실행 상태 및 작동 방식에 대해 설명합니다.

비터미널 명령 실행

실행에서 디바이스 또는 클라이언트의 업데이트를 수락할 수 있는 경우 명령 실행은 비터미널 상태입니다. 비터미널 상태의 실행은 활성 상태로 간주됩니다. 다음 상태는 비터미널 상태입니다.

  • CREATED

    AWS IoT 콘솔에서 명령 실행을 시작하거나, StartCommandExecution API를 사용해 명령 요청 주제로 디바이스에 명령을 보냅니다. 요청이 성공하면 명령 실행 상태가 CREATED로 변경됩니다. 이 상태에서 명령 실행은 다른 비터미널 또는 터미널 상태로 전환될 수 있습니다.

  • IN_PROGRESS

    명령 페이로드를 수신한 후 디바이스는 페이로드의 지침을 실행하기 시작하고 지정된 작업을 수행할 수 있습니다. 명령을 실행하는 동안 디바이스는 명령 응답 주제에 대한 응답을 게시하고 명령 실행 상태를 IN_PROGRESS로 업데이트할 수 있습니다. IN_PROGRESS 상태에서 명령 실행은 CREATED이외의 다른 터미널 또는 비터미널 상태로 전환될 수 있습니다.

    참고

    UpdateCommandExecution API는 IN_PROGRESS 상태로 여러 번 호출될 수 있습니다. statusReason 객체를 사용하여 실행에 대한 추가 세부 정보를 지정할 수 있습니다.

  • TIMED_OUT

    이 명령 실행 상태는 클라우드와 디바이스에서 모두 트리거될 수 있습니다. 다음과 같은 이유로 CREATED 또는 IN_PROGRESS 상태의 실행이 TIMED_OUT 상태로 변경될 수 있습니다.

    • 명령이 디바이스로 전송되면 타이머가 시작됩니다. 지정된 기간 내에 디바이스에서 응답이 없으면 클라우드가 명령 실행 상태를 TIMED_OUT로 변경합니다. 이 경우 명령 실행은 비터미널 상태입니다.

    • 디바이스는 해당 상태를 다른 터미널 상태로 재정의하거나, 명령을 실행할 때 시간 초과가 발생했음을 보고하고 상태를 TIMED_OUT로 설정할 수 있습니다. 이 경우에 실행 상태는 TIMED_OUT로 유지되지만 StatusReason 객체의 필드는 디바이스에서 보고하는 정보에 따라 변경됩니다. 이제 명령 실행이 터미널 상태가 됩니다.

    자세한 내용은 제한 시간 값 및 TIMED_OUT 명령 실행 상태 섹션을 참조하세요.

터미널 명령 실행

실행에서 더 이상 디바이스의 추가 업데이트를 수락하지 않으면 명령 실행이 터미널 상태가 됩니다. 다음 상태는 터미널 상태입니다. 실행은 비터미널 상태인 CREATED, IN_PROGRESS또는 TIMED_OUT에서 터미널 상태로 전환할 수 있습니다.

  • SUCCEEDED

    디바이스가 명령 실행을 성공적으로 완료한 경우 명령 응답 주제에 대한 응답을 게시하고 명령 실행 상태를 SUCCEEDED로 업데이트할 수 있습니다.

  • FAILED

    디바이스가 명령 실행을 완료하지 못하면 명령 응답 주제에 대한 응답을 게시하고 명령 실행 상태를 FAILED로 업데이트할 수 있습니다. statusReason 객체의 reasonCodereasonDescription 필드 또는 CloudWatch 로그를 사용하여 실패 문제를 추가로 해결할 수 있습니다.

  • REJECTED

    디바이스는 유효하지 않거나 호환되지 않는 요청을 수신할 경우 REJECTED 상태로 UpdateCommandExecution API를 간접 호출합니다. statusReason 객체의 reasonCodereasonDescription 필드 또는 CloudWatch 로그를 사용하여 문제를 추가로 해결할 수 있습니다.