

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

# AWS IoT コマンドのトラブルシューティング
<a name="commands-troubleshooting"></a>

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

## コマンド実行の問題
<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 エラー**  
`DataConflict` エラーは、サービスに対して複数の`UpdateCommandExecution`リクエストが並行して、または短期間 (たとえば、 の`IN_PROGRESS`直後) に行われた場合に発生します`SUCCEEDED`。  
この問題を解決するには:  
+ `/accepted` および `/rejected`レスポンストピックをサブスクライブして、次のステータス更新を送信する前に各ステータス更新が処理されたことを確認します。
+ `DataConflict` エラーを受信したときにエクスポネンシャルバックオフを使用して再試行ロジックを実装します。

**コマンド実行が予期せず TIMED\_OUT ターミナルステータスに移行する**  
デバイスが処理`TIMED_OUT`する前にコマンド実行が に移行する場合:  
+ コマンド実行用に設定されたタイムアウト値を確認します。デフォルトのタイムアウトは、ユースケースでは短すぎる可能性があります。
+ コマンドの送信時にデバイスがオフラインだった場合は、タイムアウトの有効期限が切れる前にデバイスが再接続され、実行リクエストを受け取ったことを確認します。
+ クラウド開始型`TIMED_OUT`は非ターミナルです。デバイスは引き続き実行を終了ステータス (`SUCCEEDED`、`FAILED`、`REJECTED`、または ) に更新できます`TIMED_OUT`。
デバイス開始`TIMED_OUT`はターミナルステータスであり、このコマンド実行をさらに更新することはできません。

**CloudWatch Logs でエラーを表示するにはどうすればよいですか?**  
`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"
}
```