View a markdown version of this page

AWS IoT 命令故障診斷 - AWS IoT Core

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

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是非終端的。裝置仍然可以將執行更新為終端機狀態 (SUCCEEDEDREJECTEDFAILEDTIMED_OUT)。

注意

裝置起始TIMED_OUT是終端機狀態,無法對此命令執行進行進一步更新。

如何檢視 CloudWatch 日誌中的錯誤?

UpdateCommandExecution MQTT 請求的錯誤會記錄在 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" }