View a markdown version of this page

명령 실행 시작 및 모니터링 - AWS IoT Core

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

명령 실행 시작 및 모니터링

명령을 생성한 후 대상 디바이스에서 실행을 시작합니다. 디바이스는 결과를 업데이트하고 MQTT 예약 주제에 상태를 게시합니다. 계정에서 실행 상태를 검색하고 모니터링합니다.

AWS IoT 콘솔 또는를 사용하여 명령을 시작하고 모니터링합니다 AWS CLI.

명령 실행 시작

중요

안전하고 관련 법률을 준수하는 방식으로 명령을 배포하는 것은 전적으로 사용자의 책임입니다.

실행을 시작하기 전에 다음을 확인합니다.

  • 페이로드 정보로 AWS IoT 네임스페이스에 명령을 생성했습니다. 실행을 시작할 때 디바이스는 페이로드 지침을 처리하고 지정된 작업을 수행합니다. 명령 생성은 섹션을 참조명령 리소스 생성하세요.

  • 디바이스가 명령에 대한 MQTT 예약 주제를 구독했습니다. 실행을 시작하면 페이로드 정보가이 예약된 MQTT 요청 주제에 게시됩니다.

    <devices>는 사물 또는 MQTT 클라이언트일 수 있습니다. <DeviceID>는 사물 이름 또는 클라이언트 ID입니다. 지원되는 <PayloadFormat> 값: JSON 및 CBOR. 자세한 내용은 명령 주제 단원을 참조하십시오.

    $aws/commands/<devices>/<DeviceID>/executions/+/request/<PayloadFormat>

    비 JSON/CBOR <PayloadFormat>의 경우 다음 명령 주제 형식을 사용합니다.

    $aws/commands/<devices>/<DeviceID>/executions/+/request

명령을 수신하고 실행할 대상 디바이스를 지정합니다. 등록된 디바이스에는 사물 이름을 사용하고 등록되지 않은 디바이스에는 클라이언트 ID를 사용합니다. 페이로드를 수신한 후 디바이스는 명령을 실행하고 지정된 작업을 수행합니다.

AWS IoT 사물

대상 디바이스는 AWS IoT 레지스트리에 등록된 사물일 수 있습니다. 사물은 디바이스 검색 및 관리를 간소화합니다.

Connect 디바이스 페이지에서 또는를 사용하여 디바이스를 사물로 등록합니다CreateThing. 를 사용하여 Thing Hub 또는에서 기존 사물을 찾습니다DescribeThing. 등록 세부 정보는 레지스트리로 사물 관리를 참조하세요.

클라이언트 ID입니다

등록되지 않은 디바이스의 경우 클라이언트 ID를 사용합니다.

클라이언트 ID는 디바이스에 할당하는 고유 식별자입니다. MQTT 프로토콜에 정의되어 있으며 영숫자 문자, 밑줄 또는 대시를 포함합니다. 에 연결하는 각 디바이스에는 고유한 클라이언트 ID가 AWS IoT 필요합니다.

참고
  • 등록된 사물의 경우 클라이언트 ID가 사물 이름과 일치할 수 있습니다.

  • 특정 클라이언트 ID를 대상으로 지정할 때 디바이스는 페이로드를 수신하려면 해당 클라이언트 ID를 AWS IoT 사용하여에 연결해야 합니다.

클라이언트 ID는에 연결할 때 사용하는 MQTT 클라이언트 ID입니다 AWS IoT Core.는이 ID를 AWS IoT 사용하여 디바이스를 식별하고 연결 및 구독을 관리합니다.

제한 시간은 디바이스가 실행 결과를 제공하는 기간(초)을 지정합니다.

실행을 생성한 후 타이머가 시작됩니다. 디바이스가 오프라인 상태가 되거나 제한 시간 내에 결과를 보고하지 못하면 실행이 상태로 시간 초과됩니다TIMED_OUT.

기본값: 10초. 최대: 12시간.

제한 시간 값 및 TIMED_OUT 명령 실행 상태

클라우드와 디바이스 모두 제한 시간을 보고할 수 있습니다.

명령을 전송한 후 타이머가 시작됩니다. 제한 시간 내에 디바이스 응답이 도착하지 않으면 클라우드는 실행 상태를 사유 코드 TIMED_OUT와 함께 로 설정합니다$NO_RESPONSE_FROM_DEVICE.

이는 다음과 같은 경우에 발생합니다.

  • 실행 중에 디바이스가 오프라인 상태가 되었습니다.

  • 디바이스가 제한 시간 내에 실행을 완료하지 못했습니다.

  • 디바이스가 제한 시간 내에 상태를 보고하지 못했습니다.

이 경우에 실행 상태가 클라우드에서 TIMED_OUT으로 보고되면 명령 실행은 비터미널 상태입니다. 디바이스는 상태를 SUCCEEDED, FAILED또는 터미널 상태로 재정의하는 응답을 게시할 수 있습니다REJECTED. 그러면 명령 실행이 터미널이 되고 추가 업데이트를 수락하지 않습니다.

또한 디바이스는 명령을 실행할 때 제한 시간이 발생했음을 보고하여 클라우드에서 시작된 TIMED_OUT 상태를 업데이트할 수 있습니다. 이 경우 명령 실행 상태는 로 유지TIMED_OUT되지만 statusReason 객체는 디바이스에서 보고한 정보를 기반으로 업데이트됩니다. 그러면 명령 실행이 터미널이 되고 추가 업데이트가 수락되지 않습니다.

MQTT 영구 세션 사용

AWS IoT Device Management 명령 기능과 함께 사용하도록 MQTT 영구 세션을 구성할 수 있습니다. 이 기능은 디바이스가 오프라인 상태가 되고 디바이스가 제한 시간 전에 다시 온라인 상태가 될 때 명령을 계속 수신하고 지정된 지침을 수행하는지 확인하려는 경우에 특히 유용합니다.

기본적으로 MQTT 영구 세션 만료는 60분으로 설정됩니다. 명령 실행 제한 시간이이 기간을 초과하는 값으로 구성된 경우 메시지 브로커가 60분 이상 실행되는 명령 실행을 거부하고 실패할 수 있습니다. 지속 시간이 60분을 초과하는 명령을 실행하려면 영구 세션 만료 시간을 늘리도록 요청할 수 있습니다.

참고

MQTT 영구 세션 기능을 올바르게 사용하고 있는지 확인하려면 Clean Start 플래그를 0으로 설정합니다. 자세한 내용은 MQTT 영구 세션을 참조하세요.

콘솔에서 명령 실행을 시작하려면 콘솔의 Command Hub 페이지로 이동하여 다음 단계를 AWS IoT 수행합니다.

  1. 생성한 명령을 실행하려면 명령 실행을 선택합니다.

  2. MQTT 예약 주제 및 해당하는 경우 파라미터를 포함하여 생성한 명령에 대한 정보를 검토합니다.

    동적 명령의 경우 파라미터 값을 입력하거나 기본값으로 둡니다. 기본값이 없는 파라미터의 경우이 실행의 일부로 전송할 값을 제공해야 합니다.

  3. 명령을 수신하고 실행할 대상 디바이스를 지정합니다. 디바이스가에 등록된 경우 AWS IoT 사물로 지정하거나 디바이스가 아직 등록되지 않은 경우 클라이언트 ID를 AWS IoT사용할 수 있습니다. 자세한 내용은 대상 디바이스 고려 사항 섹션을 참조하세요.

  4. (선택 사항) 제한 시간 전에 명령을 실행할 기간을 결정하는 명령의 제한 시간 값을 구성합니다. 명령을 60분 이상 실행해야 하는 경우, MQTT 영구 세션 만료 시간을 늘려야 할 수 있습니다. 자세한 내용은 명령 실행의 제한 시간 고려 사항 단원을 참조하십시오.

  5. 명령 실행을 선택합니다.

StartCommandExecution HTTP 데이터 플레인 API 작업을 사용하여 명령 실행을 시작합니다. API 요청 및 응답은 명령 실행 ID와 상관관계를 가집니다. 디바이스가 명령 실행을 완료한 후, 명령 응답 주제에 메시지를 게시하여 상태 및 실행 결과를 클라우드에 보고할 수 있습니다. 사용자 지정 응답 코드의 경우 소유한 애플리케이션 코드는 응답 메시지를 처리하고 결과를 게시할 수 있습니다 AWS IoT.

디바이스가 명령 요청 주제를 구독한 경우에 StartCommandExecution API는 페이로드 메시지를 주제에 게시합니다. 페이로드는 원하는 형식을 사용할 수 있습니다. 자세한 내용은 명령 페이로드 단원을 참조하십시오.

$aws/commands/<devices>/<DeviceID>/executions/+/request/<PayloadFormat>

페이로드 형식이 JSON 또는 CBOR이 아닌 경우 다음은 명령 요청 주제의 형식을 보여줍니다.

$aws/commands/<devices>/<DeviceID>/executions/+/request

샘플 IAM 정책

이 API 작업을 사용하기 전에 IAM 정책이 디바이스에서 이 작업을 수행할 수 있는 권한을 부여하는지 확인합니다. 다음은 사용자가 StartCommandExecution 작업을 수행할 수 있도록 허용하는 IAM 정책 예시입니다.

대체 예시:

  • region 대신 AWS 리전(예: us-east-1)로 대체합니다.

  • account-id 대신 AWS 계정 번호(예: 123456789012)로 대체합니다.

  • command-id와 같이 AWS IoT 명령의 고유 식별자가 있는 LockDoor. 둘 이상의 명령을 보내려면 IAM 정책에서 이러한 명령을 지정할 수 있습니다.

  • devices 디바이스가 AWS IoT 사물로 등록되었는지 또는 MQTT 클라이언트로 지정되었는지에 client 따라 thing 또는가 있는 .

  • device-id thing-name 또는를 사용합니다 AWS IoT client-id.

{ "Effect": "Allow", "Action": [ "iot:StartCommandExecution" ], "Resource": [ "arn:aws:iot:region:account-id:command/command-id", "arn:aws:iot:region:account-id:devices/device-id" ] }

에 지원되는 조건 키 목록을 보려면 IAM 사용 설명서의에 대한 조건 키를 StartCommandExecution참조하세요. AWS IoT

계정별 데이터 플레인 엔드포인트 획득

API 명령을 실행하기 전에 엔드포인트에 대한 계정별 엔드포인트 URL을 얻어야 합니다. 듀얼 스택 엔드포인트(IPv4 및 IPv6)를 사용하는 경우 iot:Data-ATS를 사용합니다. iot:Jobs 엔드포인트는 IPv4 전용입니다. 예를 들면 다음 명령을 실행하는 경우

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

아래 샘플 응답과 같이 계정별 엔드포인트 URL을 반환합니다.

{ "endpointAddress": "<account-specific-prefix>-ats.iot.<region>.api.com" }

명령 실행 시작 예제(AWS CLI)

다음 예제에서는 명령을 사용하여 start-command-execution AWS CLI 명령 실행을 시작하는 방법을 보여줍니다.

대체 예시:

  • <command-arn>대신 실행하려는 명령의 ARN을 사용합니다. create-command CLI 명령의 응답에서 이 정보를 얻을 수 있습니다. 예를 들어, 조향 모드를 변경하는 명령을 실행하는 경우 arn:aws:iot:region:account-id:command/SetComfortSteeringMode를 사용합니다.

  • <target-arn>대신 명령을 실행하려는 IoT 사물 또는 MQTT 클라이언트일 수 있는 대상 디바이스의 사물 ARN을 사용합니다. 예를 들어, 대상 디바이스 myRegisteredThing에 대해 명령을 실행하는 경우 arn:aws:iot:region:account-id:thing/myRegisteredThing을 사용합니다.

  • <endpoint-url> 대신 계정별 데이터 플레인 엔드포인트 획득에서 얻은 계정별 엔드포인트를 사용하며 https://가 접두사로 붙습니다. 예를 들어 https://123456789012abcd.jobs.iot.us-east-1.amazonaws.com입니다.

  • (선택 사항) StartCommandExecution API 작업을 수행할 때 추가 파라미터로 executionTimeoutSeconds를 지정할 수도 있습니다. 이 선택 필드는 디바이스가 명령 실행을 완료해야 하는 시간을 초 단위로 지정합니다. 기본값은 10초입니다. 명령 실행 상태가 CREATED이면 타이머가 시작됩니다. 타이머가 만료되기 전에 명령 실행 결과가 수신되지 않으면 상태가 자동으로 TIMED_OUT으로 변경됩니다.

  • aws iot-jobs-data start-command-execution \ --command-arn <command-arn> \ --target-arn <target-arn> \ --endpoint <endpoint-url> \ --execution-timeout-seconds 900
  • (선택 사항) 동적 명령의 경우 대체에 사용할 파라미터와 해당 값을 지정합니다. 명령 생성 시 defaultValue가 설정되지 않은 파라미터의 값을 제공해야 합니다. 파라미터에 defaultValue가 있는 경우 여기에 제공된 파라미터 값이 우선합니다. valueConditions가 설정된 파라미터의 경우 여기에 제공된 파라미터 값이 조건을 충족해야 합니다.

    Light_Power_Status 동적 명령 예제 기반:

  • aws iot-jobs-data start-command-execution \ --command-arn arn:aws:iot:us-east-1:123456789012:command/Light_Power_Status \ --target-arn arn:aws:iot:us-east-1:123456789012:thing/exampleThing \ --endpoint <endpoint-url> \ --execution-timeout-seconds 900 \ --parameters "powerStatus={S=ON}"

이 명령을 실행하면 명령 실행 ID가 반환됩니다. 이 ID를 사용하여 명령 실행 상태, 세부 정보 및 명령 실행 기록을 쿼리할 수 있습니다.

참고

명령이 더 이상 사용되지 않는 경우, StartCommandExecution API 요청은 검증 예외로 실패합니다. 이 오류를 해결하려면, 먼저 UpdateCommand API를 사용하여 명령을 복원한 다음 StartCommandExecution 요청을 수행합니다.

{ "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542" }

명령 실행 결과 업데이트

UpdateCommandExecution MQTT 데이터 플레인 API 작업을 사용하여 명령 실행의 상태 또는 결과를 업데이트합니다.

참고

이 API를 사용하기 전에 다음 사항을 주의하세요.

  • 디바이스가 MQTT 연결을 설정하고 명령 요청 및 응답 주제를 구독해야 합니다. 자세한 내용은 상위 수준 명령 워크플로 단원을 참조하십시오.

  • StartCommandExecution API 작업을 사용하여 이 명령을 이미 실행했어야 합니다.

이 API 작업을 사용하기 전에 IAM 정책이 디바이스에 이러한 작업을 수행할 수 있는 권한을 부여해야 합니다. 다음은 디바이스에 작업을 수행할 권한을 부여하는 정책의 예입니다. UpdateCommandExecution MQTT 작업을 수행할 수 있는 사용자 권한을 허용하는 추가 샘플 IAM 정책은 섹션을 참조하세요연결 및 게시 정책 예제.

대체 예시:

  • Region와 AWS 리전같은를 사용합니다us-east-1.

  • AccountID 대신 AWS 계정 번호(예: 123456789012)로 대체합니다.

  • ThingName와 같이 명령 실행을 대상으로 하는 AWS IoT 사물의 이름을 사용합니다myRegisteredThing.

  • commands-request-topic AWS IoT 명령 요청 및 응답 주제의 이름과 commands-response-topic 함께 및 . 자세한 내용은 상위 수준 명령 워크플로 단원을 참조하십시오.

MQTT 클라이언트 ID에 대한 샘플 IAM 정책

다음 코드는 MQTT 클라이언트 ID를 사용할 때의 샘플 디바이스 정책을 보여줍니다.

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Publish", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/json" ] }, { "Effect": "Allow", "Action": "iot:Receive", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/request", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/accepted", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/rejected", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/request/json", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/accepted/json", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/rejected/json" ] }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/request", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/accepted", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/rejected", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/request/json", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/accepted/json", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/rejected/json" ] }, { "Effect": "Allow", "Action": "iot:Connect", "Resource": "arn:aws:iot:us-east-1:123456789012:client/${iot:ClientId}" } ] }

IoT 사물에 대한 샘플 IAM 정책

다음 코드는 AWS IoT 사물을 사용할 때의 샘플 디바이스 정책을 보여줍니다.

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Publish", "Resource": "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response" }, { "Effect": "Allow", "Action": "iot:Receive", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/request", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/accepted", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/rejected", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/request/json", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/accepted/json", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/rejected/json" ] }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/request", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/accepted", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/rejected", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/request/json", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/accepted/json", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/rejected/json" ] }, { "Effect": "Allow", "Action": "iot:Connect", "Resource": "arn:aws:iot:us-east-1:123456789012:client/${iot:ClientId}" } ] }

요청 주제에서 명령 실행이 수신되면 디바이스는 명령을 처리합니다. 그런 다음 UpdateCommandExecution API를 사용하여 명령 실행의 상태 및 결과를 다음 응답 주제로 업데이트합니다.

$aws/commands/<devices>/<DeviceID>/executions/<ExecutionId>/response/<PayloadFormat>

이 예제에서 <DeviceID>는 대상 디바이스의 고유 식별자이고, <execution-id>는 대상 디바이스에서 명령 실행의 식별자입니다. <PayloadFormat>은 JSON 또는 CBOR일 수 있습니다.

참고

디바이스를에 등록하지 않은 경우 사물 이름 대신 클라이언트 ID를 식별자로 사용할 AWS IoT수 있습니다.

$aws/commands/clients/<ClientID>/executions/<ExecutionId>/response/<PayloadFormat>

디바이스의 실행 상태 업데이트 보고

디바이스는 API를 사용하여 명령 실행에 다음과 같은 상태 업데이트를 보고할 수 있습니다. 이러한 상태에 대한 자세한 내용은 명령 실행 상태 섹션을 참조하세요.

  • IN_PROGRESS: 디바이스가 명령 실행을 시작하면 상태를 IN_PROGRESS로 업데이트할 수 있습니다.

  • SUCCEEDED: 디바이스가 명령을 성공적으로 처리하고 실행을 완료하면 디바이스는 응답 주제에 SUCCEEDED로 메시지를 게시할 수 있습니다.

  • FAILED: 디바이스가 명령을 실행하지 못한 경우 응답 주제에 FAILED로 메시지를 게시할 수 있습니다.

  • REJECTED: 디바이스가 명령을 수락하지 못한 경우 응답 주제에 REJECTED로 메시지를 게시할 수 있습니다.

  • TIMED_OUT: 다음과 같은 이유로 명령 실행 상태가 TIMED_OUT으로 변경될 수 있습니다.

    • 명령 실행 결과가 수신되지 않았습니다. 이는 지정된 기간 내에 실행이 완료되지 않았거나, 디바이스가 상태 정보를 응답 주제에 게시하지 못했기 때문에 발생할 수 있습니다.

    • 해당 디바이스는 명령을 실행하려고 시도할 때 시간 초과가 발생했음을 보고합니다.

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

UpdateCommandExecution API 사용 시 고려 사항

다음은 UpdateCommandExecution API를 사용할 때 고려해야 할 몇 가지 중요한 사항입니다.

  • 디바이스는 선택적 statusReason 객체를 사용하여 실행에 대한 추가 정보를 제공할 수 있습니다. 디바이스에서이 객체를 제공하는 경우 객체의 reasonCode 필드는 필수이지만 reasonDescription 필드는 선택 사항입니다.

  • 디바이스가 statusReason 객체를 사용하는 경우는 패턴을 사용해야 [A-Z0-9_-]+ 하며 길이가 64자를 초과하지 않아야 reasonCode 합니다. 를 제공하는 경우 길이reasonDescription가 1,024자를 초과하지 않아야 합니다. 줄 바꿈과 같은 제어 문자를 제외한 모든 문자를 사용할 수 있습니다.

  • 디바이스는 선택적 result 객체를 사용하여 원격 함수 직접 호출의 반환 값과 같은 명령 실행 결과에 대해 정보를 제공할 수 있습니다. result를 제공하는 경우 하나 이상의 항목이 필요합니다.

  • result 필드에서 항목을 키-값 페어로 지정합니다. 각 항목에 대해 데이터 유형 정보를 문자열, 부울 또는 바이너리로 지정해야 합니다. 문자열 데이터 형식은 s 키를 사용하고, 부울 데이터 형식은 b 키를 사용하며, 바이너리 데이터 형식은 bin 키를 사용해야 합니다. 이러한 키가 소문자인지 확인합니다.

  • UpdateCommandExecution API를 실행할 때 오류가 발생하면 Amazon CloudWatch의 AWSIoTLogsV2 로그 그룹에서 오류를 볼 수 있습니다. 로깅 활성화 및 로그 보기에 대한 자세한 내용은 AWS IoT 로깅 구성 섹션을 참조하세요.

UpdateCommandExecution API 예제

다음 코드는 자동차 배터리 백분율을 예로 들어서 디바이스가 UpdateCommandExecution API를 사용하여 실행 상태를 보고하고, statusReason 필드를 사용하여 상태에 대한 추가 정보를 제공하고, 결과 필드를 사용하여 실행 결과에 대한 정보를 제공하는 방법을 보여줍니다.

{ "status": "IN_PROGRESS", "statusReason": { "reasonCode": "200", "reasonDescription": "Execution_in_progress" }, "result": { "car_battery": { "s": "car battery at 50 percent" } } }

명령 실행 검색

명령을 실행한 후 AWS IoT 콘솔 및를 사용하여 명령 실행에 대한 정보를 검색할 수 있습니다 AWS CLI. 다음 정보를 획득할 수 있습니다.

참고

최신 명령 실행 상태를 검색하려면 디바이스가 아래 설명과 같이 UpdateCommandExecution MQTT API를 사용하여 상태 정보를 응답 주제에 게시해야 합니다. 디바이스가 이 주제에 게시될 때까지 GetCommandExecution API는 상태를 CREATED 또는 TIMED_OUT으로 보고합니다.

생성하는 각 명령 실행에는 다음이 포함됩니다.

  • 명령 실행의 고유 식별자인 실행 ID

  • 명령 실행의 상태. 대상 디바이스에서 명령을 실행하면 명령 실행은 CREATED 상태가 됩니다. 그런 다음 아래에 설명된 대로 다른 명령 실행 상태로 전환할 수 있습니다.

  • 명령 실행의 결과.

  • 고유한 명령 ID 및 실행이 생성된 대상 디바이스

  • 명령 실행이 생성된 시간을 보여주는 시작 날짜

다음 방법 중 하나를 사용하여 콘솔에서 명령 실행을 검색할 수 있습니다.

  • Command Hub 페이지에서

    AWS IoT 콘솔의 Command Hub 페이지로 이동하여 다음 단계를 수행합니다.

    1. 대상 디바이스에서 실행을 생성한 명령을 선택합니다.

    2. 명령 세부 정보 페이지의 명령 내역 탭에 생성한 실행이 표시됩니다. 정보를 검색할 실행을 선택합니다.

    3. 디바이스가 UpdateCommandExecution API를 사용하여 결과 정보를 제공한 경우, 이 페이지의 결과 탭에서 이 정보를 찾을 수 있습니다.

  • Thing Hub 페이지에서

    명령을 실행할 때 AWS IoT 사물을 대상 디바이스로 선택한 경우 사물 허브 페이지에서 실행 세부 정보를 볼 수 있습니다.

    1. AWS IoT 콘솔의 Thing Hub 페이지로 이동하여 명령 실행을 생성한 사물을 선택합니다.

    2. 사물 세부 정보 페이지의 명령 내역에 생성한 실행이 표시됩니다. 정보를 검색할 실행을 선택합니다.

    3. 디바이스가 UpdateCommandExecution API를 사용하여 결과 정보를 제공한 경우, 이 페이지의 결과 탭에서 이 정보를 찾을 수 있습니다.

GetCommandExecution AWS IoT Core 컨트롤 플레인 HTTP API 작업을 사용하여 명령 실행에 대한 정보를 검색합니다. StartCommandExecution API 작업을 사용하여 이 명령을 이미 실행했어야 합니다.

샘플 IAM 정책

이 API 작업을 사용하기 전에 IAM 정책이 디바이스에서 이 작업을 수행할 수 있는 권한을 부여하는지 확인합니다. 다음은 사용자가 GetCommandExecution 작업을 수행할 수 있도록 허용하는 IAM 정책 예시입니다.

대체 예시:

  • region 대신 AWS 리전(예: us-east-1)로 대체합니다.

  • account-id 대신 AWS 계정 번호(예: 123456789012)로 대체합니다.

  • command-id와 같은 고유한 AWS IoT 명령 식별자를 사용합니다LockDoor.

  • devices 디바이스가 AWS IoT 사물로 등록되었는지 또는 MQTT 클라이언트로 지정되었는지에 client 따라 thing 또는가 있는 .

  • device-id thing-name 또는를 사용합니다 AWS IoT client-id.

{ "Effect": "Allow", "Action": [ "iot:GetCommandExecution" ], "Resource": [ "arn:aws:iot:region:account-id:command/command-id", "arn:aws:iot:region:account-id:devices/device-id" ] }

명령 실행 검색 예제

다음 예제에서는 명령을 사용하여 실행된 start-command-execution AWS CLI 명령에 대한 정보를 검색하는 방법을 보여줍니다. 다음 예제에서는 조향 모드를 끄기 위해 실행된 명령에 대한 정보를 검색하는 방법을 보여줍니다.

대체 예시:

  • <execution-id> 대신 정보를 검색하려는 명령 실행의 식별자를 사용합니다.

  • <target-arn> 대신 실행을 대상으로 하는 디바이스의 Amazon 리소스 번호(ARN)를 사용합니다. start-command-execution CLI 명령의 응답에서 이 정보를 얻을 수 있습니다.

  • 선택적으로, 디바이스가 UpdateCommandExection API를 사용하여 실행 결과를 제공한 경우, GetCommandExecution API를 사용하여 GetCommandExecution API의 응답에 명령 실행 결과를 포함할지 여부를 지정할 수 있습니다.

aws iot get-command-execution --execution-id <execution-id> \ --target-arn <target-arn> \ --include-result

이 명령을 실행하면, 명령 실행의 ARN, 실행 상태, 실행이 시작된 시간 및 완료된 시간에 대한 정보를 포함한 응답이 생성됩니다. 또한, 상태에 대한 추가 정보가 포함된 statusReason 객체를 제공합니다. 다양한 상태 및 상태 이유에 대한 자세한 내용은 명령 실행 상태 섹션을 참조하세요.

다음 코드는 API 요청의 샘플 응답을 보여줍니다.

참고

실행 응답의 completedAt 필드는 디바이스가 클라우드에 터미널 상태를 보고하는 시간에 해당합니다. TIMED_OUT 상태인 경우, 디바이스가 제한 시간 초과를 보고할 때만 이 필드가 설정됩니다. 클라우드에서 TIMED_OUT 상태를 설정하면 TIMED_OUT 상태가 업데이트되지 않습니다. 이 제한 시간 초과 동작에 대한 자세한 내용은 명령 실행의 제한 시간 고려 사항 섹션을 참조하세요.

{ "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542", "commandArn": "arn:aws:iot:us-east-1:123456789012:command/LockDoor", "targetArn": "arn:aws:iot:us-east-1:123456789012:thing/myRegisteredThing", "status": "SUCCEEDED", "statusReason": { "reasonCode": "DEVICE_SUCCESSFULLY_EXECUTED", "reasonDescription": "SUCCESS" }, "result": { "sn": { "s": "ABC-001" }, "digital": { "b": true } }, "createdAt": "2024-03-23T00:50:10.095000-07:00", "completedAt": "2024-03-23T00:50:10.095000-07:00" }

MQTT 테스트 클라이언트를 사용하여 명령 업데이트 보기

MQTT 테스트 클라이언트를 사용하여, 명령 기능을 사용할 때 MQTT를 통한 메시지 교환을 볼 수 있습니다. 디바이스가와 MQTT 연결을 설정한 후 명령을 생성하고 페이로드를 지정한 다음 디바이스에서 실행할 AWS IoT수 있습니다. 명령을 실행할 때 디바이스가 명령에 대한 MQTT 예약 요청 주제를 구독한 경우이 주제에 게시된 페이로드 메시지가 표시됩니다.

그러면 디바이스가 페이로드 지침을 수신하고 AWS IoT 디바이스에서 지정된 작업을 수행합니다. 그런 다음 UpdateCommandExecution API를 사용하여 명령 실행 결과 및 상태 정보를 command. AWS IoT Device Management listens의 MQTT 예약 응답 주제에 게시하고, 업데이트된 정보를 저장하고, 로그를 AWS CloudTrail 및 Amazon CloudWatch에 게시합니다. 그런 다음 콘솔에서 또는 GetCommandExecution API를 사용하여 최신 명령 실행 정보를 검색할 수 있습니다.

다음 단계에서는 MQTT 테스트 클라이언트를 사용하여 메시지를 관찰하는 방법을 보여줍니다.

  1. AWS IoT 콘솔에서 MQTT 테스트 클라이언트를 엽니다.

  2. 구독 탭에서 다음 주제를 입력한 다음 구독을 선택합니다. 여기서 <thingId>는 등록한 디바이스의 사물 이름입니다 AWS IoT.

    참고

    AWS IoT 콘솔의 Thing Hub 페이지에서 디바이스의 사물 이름을 찾을 수 있습니다. 디바이스를 사물로 등록하지 않은 경우 Connect 디바이스 페이지에서에 연결할 때 디바이스 AWS IoT 를 등록할 수 있습니다.

    $aws/commands/things/<thingId>/executions/+/request
  3. (선택 사항) 구독 탭에서 다음 주제를 입력하고 구독을 선택할 수도 있습니다.

    $aws/commands/things/+/executions/+/response/accepted/json $aws/commands/things/+/executions/+/response/rejected/json
  4. 명령 실행을 시작하면, 디바이스가 구독한 요청 주제인 $aws/commands/things/<thingId>/executions/+/request를 사용하여 메시지 페이로드가 해당 디바이스로 전송됩니다. MQTT 테스트 클라이언트에는 디바이스가 명령을 처리하는 지침이 포함된 명령 페이로드가 표시됩니다.

  5. 디바이스가 명령 실행을 시작하면, 명령에 대한 다음 MQTT 예약 응답 주제에 상태 업데이트를 게시할 수 있습니다.

    $aws/commands/<devices>/<device-id>/executions/<executionId>/response/json

    예를 들어, 온도를 원하는 값으로 낮추기 위해 차량의 AC를 켜는 명령을 실행했다고 가정해 보겠습니다. 다음 JSON은 차량이 응답 주제에 게시한 샘플 메시지로 명령을 실행하지 못했음을 보여줍니다.

    { "deviceId": "My_Car", "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542", "status": "FAILED", "statusReason": { "reasonCode": "CAR_LOW_ON_BATTERY", "reasonDescription": "Car battery is lower than 5 percent" } }

    이 경우 차량의 배터리를 충전한 다음, 명령을 다시 실행할 수 있습니다.

에서 명령 실행 나열 AWS 계정

명령을 실행한 후 AWS IoT 콘솔 및를 사용하여 명령 실행에 대한 정보를 검색할 수 있습니다 AWS CLI. 다음 정보를 획득할 수 있습니다.

  • 명령 실행의 고유 식별자인 실행 ID

  • 명령 실행의 상태. 대상 디바이스에서 명령을 실행하면 명령 실행은 CREATED 상태가 됩니다. 그런 다음 아래에 설명된 대로 다른 명령 실행 상태로 전환할 수 있습니다.

  • 고유한 명령 ID 및 실행이 생성된 대상 디바이스

  • 명령 실행이 생성된 시간을 보여주는 시작 날짜

다음 방법 중 하나를 사용하여 콘솔에서 모든 명령 실행을 볼 수 있습니다.

  • Command Hub 페이지에서

    AWS IoT 콘솔의 Command Hub 페이지로 이동하여 다음 단계를 수행합니다.

    1. 대상 디바이스에서 실행을 생성한 명령을 선택합니다.

    2. 명령 세부 정보 페이지에서 명령 내역 탭으로 이동하면 생성한 실행 목록이 표시됩니다.

  • Thing Hub 페이지에서

    명령을 실행할 때 AWS IoT 사물을 대상 디바이스로 선택하고 단일 디바이스에 대해 여러 명령 실행을 생성한 경우 사물 허브 페이지에서 디바이스의 실행을 볼 수 있습니다.

    1. AWS IoT 콘솔의 Thing Hub 페이지로 이동하여 실행을 생성한 사물을 선택합니다.

    2. 사물 세부 정보 페이지의 명령 내역에 디바이스에 대해 생성한 실행 목록이 표시됩니다.

ListCommandExecutions AWS IoT Core 컨트롤 플레인 HTTP API 작업을 사용하여 계정의 모든 명령 실행을 나열합니다.

샘플 IAM 정책

이 API 작업을 사용하기 전에 IAM 정책이 디바이스에서 이 작업을 수행할 수 있는 권한을 부여하는지 확인합니다. 다음은 사용자가 ListCommandExecutions 작업을 수행할 수 있도록 허용하는 IAM 정책 예시입니다.

대체 예시:

  • region 대신 AWS 리전(예: us-east-1)로 대체합니다.

  • account-id 대신 AWS 계정 번호(예: 123456789012)로 대체합니다.

  • command-id와 같은 고유한 AWS IoT 명령 식별자를 사용합니다LockDoor.

{ "Effect": "Allow", "Action": "iot:ListCommandExecutions", "Resource": * }

명령 실행 나열 예제

다음 예제에서는 AWS 계정에서 명령 실행을 나열하는 방법을 보여줍니다.

명령을 실행할 때 목록을 필터링할 때, targetArn을 사용하여 특정 디바이스에 대해 생성된 명령 실행만 표시할지 또는 commandArn을 사용하여 지정된 특정 명령에 대한 실행만 표시할지 지정해야 합니다.

대체 예시:

  • <target-arn> 대신 실행을 대상으로 하는 디바이스의 Amazon 리소스 번호(ARN)(예: arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f)를 사용합니다.

  • <target-arn> 대신 실행을 대상으로 하는 디바이스의 Amazon 리소스 번호(ARN)(예: arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f)를 사용합니다.

  • <after> 대신 생성된 실행을 나열하려는 시간(예: 2024-11-01T03:00)이 표시됩니다.

aws iot list-command-executions \ --target-arn <target-arn> \ --started-time-filter '{after=<after>}' \ --sort-order "ASCENDING"

이 명령을 실행하면 생성한 명령 실행 목록, 실행이 시작된 시간 및 완료된 시간이 포함된 응답이 생성됩니다. 또한, 상태 정보, 그리고 상태에 대한 추가 정보가 포함된 statusReason 객체도 제공합니다.

{ "commandExecutions": [ { "commandArn": "arn:aws:iot:us-east-1:123456789012:command/TestMe002", "executionId": "b2b654ca-1a71-427f-9669-e74ae9d92d24", "targetArn": "arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f", "status": "TIMED_OUT", "createdAt": "2024-11-24T14:39:25.791000-08:00", "startedAt": "2024-11-24T14:39:25.791000-08:00" }, { "commandArn": "arn:aws:iot:us-east-1:123456789012:command/TestMe002", "executionId": "34bf015f-ef0f-4453-acd0-9cca2d42a48f", "targetArn": "arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f", "status": "IN_PROGRESS", "createdAt": "2024-11-24T14:05:36.021000-08:00", "startedAt": "2024-11-24T14:05:36.021000-08:00" } ] }

다양한 상태 및 상태 이유에 대한 자세한 내용은 명령 실행 상태 섹션을 참조하세요.

명령 실행 삭제

명령 실행을 더 이상 사용하지 않을 경우, 계정에서 영구적으로 제거할 수 있습니다.

참고
  • 명령 실행은 SUCCEEDED, FAILED 또는 REJECTED와 같은 터미널 상태가 된 경우에만 삭제할 수 있습니다.

  • 이 작업은 AWS IoT Core API 또는를 사용해야만 수행할 수 있습니다 AWS CLI. 콘솔에서는 이 작업을 사용할 수 없습니다.

이 API 작업을 사용하기 전에 IAM 정책이 디바이스에 이러한 작업을 수행할 수 있는 권한을 부여해야 합니다. 다음은 디바이스에 작업을 수행할 권한을 부여하는 정책의 예입니다.

대체 예시:

  • Region와 AWS 리전같은를 사용합니다us-east-1.

  • AccountID 대신 AWS 계정 번호(예: 123456789012)로 대체합니다.

  • CommandID 대신 실행을 삭제하려는 명령의 식별자로 대체합니다.

  • devices 디바이스가 AWS IoT 사물로 등록되었는지 또는 MQTT 클라이언트로 지정되었는지에 client 따라 thing 또는가 있는 .

  • device-id thing-name 또는를 사용합니다 AWS IoT client-id.

{ "Effect": "Allow", "Action": [ "iot:DeleteCommandExecution" ], "Resource": [ "arn:aws:iot:region:account-id:command/command-id", "arn:aws:iot:region:account-id:devices/device-id" ] }

다음 예제에서는 명령을 사용하여 delete-command AWS CLI 명령을 삭제하는 방법을 보여줍니다. 애플리케이션에 따라 <execution-id>를 삭제하려는 명령 실행의 식별자로 대체하고 <target-arn>를 대상 디바이스의 ARN으로 바꿉니다.

aws iot delete-command-execution \ --execution-id <execution-id> \ --target-arn <target-arn>

API 요청이 성공하면 명령 실행은 상태 코드 200을 생성합니다. GetCommandExecution API를 사용하여 명령 실행이 계정에 더 이상 존재하지 않는지 확인할 수 있습니다.