기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS IoT 명령 문제 해결
명령에 대한 문제 해결 섹션 AWS IoT Device Management 입니다.
명령 실행 문제
- 명령 실행은 CREATED 상태로 유지됩니다.
-
명령 실행이
CREATED상태로 유지되고IN_PROGRESS또는 다른 상태로 진행되지 않는 경우 다음을 고려하세요.-
디바이스가 AWS IoT 코어에 연결되어 있고 명령 요청 주제를 구독했는지 확인합니다.
-
디바이스 정책이 명령 요청 주제
iot:Subscribe및 명령 응답 주제iot:Publish에서 및iot:Receive를 허용하는지 확인합니다. -
디바이스가 오프라인 상태이고 MQTT 영구 세션을 사용하는 경우 명령은 AWS IoT 코어에서 대기합니다. 영구 세션 제한 시간 및 실행 제한 시간 전에 디바이스가 다시 연결되면 명령을 처리할 수 있습니다. 실행 제한 시간이 만료되면 실행이 로 전환됩니다
TIMED_OUT.
-
- UpdateCommandExecution에서 DataConflict 오류 발생
-
DataConflict오류는 서비스에 대해 여러UpdateCommandExecution요청이 병렬로 또는 짧은 시간 내에 이루어질 때 발생합니다(예: 바로IN_PROGRESS뒤에가 오는 경우SUCCEEDED).이 문제를 해결하는 방법:
-
/accepted및/rejected응답 주제를 구독하여 다음 주제를 보내기 전에 각 상태 업데이트가 처리되었는지 확인합니다. -
DataConflict오류를 수신할 때 지수 백오프를 사용하여 재시도 로직을 구현합니다.
-
- 명령 실행이 예기치 않게 TIMED_OUT 터미널 상태로 이동합니다.
-
디바이스가 명령 실행을 처리하기
TIMED_OUT전에 명령 실행이 로 전환되는 경우:-
명령 실행에 대해 구성된 제한 시간 값을 검토합니다. 기본 제한 시간은 사용 사례에 비해 너무 짧을 수 있습니다.
-
명령을 전송할 때 디바이스가 오프라인 상태인 경우 제한 시간이 만료되기 전에 디바이스가 다시 연결되어 실행 요청을 받았는지 확인합니다.
-
클라우드 시작은 비터미널
TIMED_OUT입니다. 디바이스는 여전히 실행을 터미널 상태(SUCCEEDED,REJECTED, 또는FAILEDTIMED_OUT)로 업데이트할 수 있습니다.
참고
디바이스 시작
TIMED_OUT은 터미널 상태이며이 명령 실행을 더 이상 업데이트할 수 없습니다. -
- CloudWatch 로그에서 오류를 보려면 어떻게 해야 합니까?
-
UpdateCommandExecutionMQTT 요청의 오류는 Amazon CloudWatch의AWSIoTLogsV2로그 그룹에 로깅됩니다. 로깅을 활성화하고 로그를 보려면 섹션을 참조하세요AWS IoT 로깅 구성.
UpdateCommandExecution 오류 코드
UpdateCommandExecution MQTT 요청이 실패하면 서비스가 /rejected 주제에 대한 오류 응답을 게시합니다. 오류 응답에는 오류 코드와 메시지가 포함됩니다. 다음 표에는 반환할 수 있는 오류 코드가 나열되어 있습니다.
| 오류 코드 | 재시도 가능 | 설명 |
|---|---|---|
InvalidStateTransition |
아니요 | 요청된 상태 전환은 허용되지 않습니다. 예를 들어에서 SUCCEEDED로 전환하여 디바이스 시작 TIMED_OUT 실행을 IN_PROGRESS업데이트합니다. |
TerminalStateReached |
아니요 | 명령 실행이 이미 터미널 상태에 도달했으며 업데이트할 수 없습니다. |
ResourceNotFound |
아니요 | 지정된 명령 실행이 존재하지 않습니다. |
DataConflict |
예 | 명령 실행이 동시에 수정되었습니다. 이는 상태 업데이트가 빠르게 연속적으로 전송될 때 발생할 수 있습니다. /accepted 및 /rejected 응답 주제를 구독하여 다음 주제를 보내기 전에 각 상태 업데이트가 처리되었는지 확인합니다. 자세한 내용은 UpdateCommandExecution의 DataConflict 오류를 참조하세요. |
InternalError |
예 | 내부 서버 오류가 발생했습니다. 지수 백오프를 사용하여 요청을 재시도합니다. |
다음은 /rejected 주제에 게시된 오류 응답의 예입니다.
{ "clientToken": "client-token-1", "executionId": "2bd65c51-4cfd-49e4-9310-d5cbfdbc8554", "error": "DataConflict", "errorMessage": "The command execution was modified concurrently" }