View a markdown version of this page

AWS IoT コマンドのトラブルシューティング - AWS IoT Core

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS IoT コマンドのトラブルシューティング

これは コマンドのトラブルシューティングセクション AWS IoT Device Management です。

コマンド実行の問題

コマンド実行は CREATED ステータスのままです

コマンドの実行が CREATEDステータスのままで、 IN_PROGRESSまたは他の ステータスに進まない場合は、次の点を考慮してください。

  • デバイスが AWS IoT Core に接続されており、 コマンドリクエストトピックにサブスクライブしていることを確認します。

  • デバイスポリシーで、コマンドリクエストトピックiot:Receiveiot:Subscribeと が許可されていること、およびコマンドレスポンストピックiot:Publishで が許可されていることを確認します。

  • デバイスがオフラインで MQTT 永続セッションを使用している場合、コマンドは AWS IoT Core で待機します。永続セッションタイムアウトと実行タイムアウトの前にデバイスが再接続すると、 コマンドを処理できます。実行タイムアウトが期限切れになると、実行は に移行しますTIMED_OUT

UpdateCommandExecution での DataConflict エラー

DataConflict エラーは、サービスに対して複数のUpdateCommandExecutionリクエストが並行して、または短期間 (たとえば、 のIN_PROGRESS直後) に行われた場合に発生しますSUCCEEDED

この問題を解決するには:

  • /accepted および /rejectedレスポンストピックをサブスクライブして、次のステータス更新を送信する前に各ステータス更新が処理されたことを確認します。

  • DataConflict エラーを受信したときにエクスポネンシャルバックオフを使用して再試行ロジックを実装します。

コマンド実行が予期せず TIMED_OUT ターミナルステータスに移行する

デバイスが処理TIMED_OUTする前にコマンド実行が に移行する場合:

  • コマンド実行用に設定されたタイムアウト値を確認します。デフォルトのタイムアウトは、ユースケースでは短すぎる可能性があります。

  • コマンドの送信時にデバイスがオフラインだった場合は、タイムアウトの有効期限が切れる前にデバイスが再接続され、実行リクエストを受け取ったことを確認します。

  • クラウド開始型TIMED_OUTは非ターミナルです。デバイスは引き続き実行を終了ステータス (SUCCEEDEDFAILEDREJECTED、または ) に更新できますTIMED_OUT

注記

デバイス開始TIMED_OUTはターミナルステータスであり、このコマンド実行をさらに更新することはできません。

CloudWatch Logs でエラーを表示するにはどうすればよいですか?

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" }