

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

# AWS IoT 명령 문제 해결
<a name="commands-troubleshooting"></a>

명령에 대한 문제 해결 섹션 AWS IoT Device Management 입니다.

## 명령 실행 문제
<a name="commands-execution-troubleshooting"></a>

**명령 실행은 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`, 또는 `FAILED``TIMED_OUT`)로 업데이트할 수 있습니다.
디바이스 시작`TIMED_OUT`은 터미널 상태이며이 명령 실행을 더 이상 업데이트할 수 없습니다.

**CloudWatch 로그에서 오류를 보려면 어떻게 해야 합니까?**  
`UpdateCommandExecution` MQTT 요청의 오류는 Amazon CloudWatch의 `AWSIoTLogsV2` 로그 그룹에 로깅됩니다. 로깅을 활성화하고 로그를 보려면 섹션을 참조하세요[AWS IoT 로깅 구성](configure-logging.md).

## UpdateCommandExecution 오류 코드
<a name="commands-error-codes"></a>

`UpdateCommandExecution` MQTT 요청이 실패하면 서비스가 `/rejected` 주제에 대한 오류 응답을 게시합니다. 오류 응답에는 오류 코드와 메시지가 포함됩니다. 다음 표에는 반환할 수 있는 오류 코드가 나열되어 있습니다.


| 오류 코드 | 재시도 가능 | 설명 | 
| --- | --- | --- | 
| InvalidStateTransition | 아니요 | 요청된 상태 전환은 허용되지 않습니다. 예를 들어에서 SUCCEEDED로 전환하여 디바이스 시작 TIMED\_OUT 실행을 IN\_PROGRESS업데이트합니다. | 
| TerminalStateReached | 아니요 | 명령 실행이 이미 터미널 상태에 도달했으며 업데이트할 수 없습니다. | 
| ResourceNotFound | 아니요 | 지정된 명령 실행이 존재하지 않습니다. | 
| DataConflict | 예 | 명령 실행이 동시에 수정되었습니다. 이는 상태 업데이트가 빠르게 연속적으로 전송될 때 발생할 수 있습니다. /accepted 및 /rejected 응답 주제를 구독하여 다음 주제를 보내기 전에 각 상태 업데이트가 처리되었는지 확인합니다. 자세한 내용은 [ UpdateCommandExecution의 DataConflict 오류를](#commands-execution-troubleshooting) 참조하세요. | 
| InternalError | 예 | 내부 서버 오류가 발생했습니다. 지수 백오프를 사용하여 요청을 재시도합니다. | 

다음은 `/rejected` 주제에 게시된 오류 응답의 예입니다.

```
{
    "clientToken": "client-token-1",
    "executionId": "2bd65c51-4cfd-49e4-9310-d5cbfdbc8554",
    "error": "DataConflict",
    "errorMessage": "The command execution was modified concurrently"
}
```