本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS IoT 命令故障診斷
這是 AWS IoT Device Management Commands 的疑難排解區段。
命令執行問題
- 命令執行會保持在 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 日誌中的錯誤?
-
UpdateCommandExecutionMQTT 請求的錯誤會記錄在 Amazon CloudWatch 的AWSIoTLogsV2日誌群組中。若要啟用記錄和檢視日誌,請參閱 設定 AWS IoT 記錄。
UpdateCommandExecution 錯誤代碼
當 UpdateCommandExecution MQTT 請求失敗時,服務會將錯誤回應發佈至/rejected主題。錯誤回應包含錯誤代碼和訊息。下表列出可傳回的錯誤代碼。
| 錯誤碼 | 可重試 | 說明 |
|---|---|---|
InvalidStateTransition |
否 | 不允許請求的狀態轉換。例如,從 轉換為 SUCCEEDED IN_PROGRESS,更新裝置啟動的TIMED_OUT執行。 |
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" }