

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# AWS IoT 命令故障診斷
<a name="commands-troubleshooting"></a>

這是 AWS IoT Device Management Commands 的疑難排解區段。

## 命令執行問題
<a name="commands-execution-troubleshooting"></a>

**命令執行會保持在 CREATED 狀態**  
當命令執行保持 `CREATED` 狀態且未繼續 `IN_PROGRESS`或其他狀態時，請考慮下列事項：  
+ 確認裝置已連線至 AWS IoT Core，並已訂閱命令請求主題。
+ 檢查裝置政策是否允許命令請求主題`iot:Receive`上的 `iot:Subscribe`和 ，以及命令回應主題`iot:Publish`上的 。
+ 如果裝置離線並使用 MQTT 持久性工作階段，命令會在 AWS IoT Core 中等待。當裝置在持久性工作階段逾時和執行逾時之前重新連線時，可以處理 命令。如果執行逾時過期，則執行會轉換為 `TIMED_OUT`。

**UpdateCommandExecution 上的 DataConflict 錯誤**  
當平行或在短時間內對服務提出多個`UpdateCommandExecution`請求時 （例如，緊`IN_PROGRESS`接著 )，就會`DataConflict`發生錯誤`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 IN\_PROGRESS，更新裝置啟動的TIMED\_OUT執行。 | 
| 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"
}
```