

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

# ルール関連の問題の診断
<a name="diagnosing-rules"></a>

**このトピックの改善にご協力ください**  
 [より良いものにするために必要なことを教えてください](https://docs.aws.amazon.com//forms/aws-doc-feedback?hidden_service_name=IoT%20Docs&topic_url=http://docs.aws.amazon.com/en_us/iot/latest/developerguide/diagnosing-rules.html) 

このセクションでは、ルールに関する問題が発生した場合に確認する必要のあるいくつかの事項について説明します。

## トラブルシューティングのための CloudWatch Logs の設定
<a name="diagnosing-rules-logs"></a>

ルール関連の問題をデバッグするのに最適な方法は、CloudWatch Logs を使用することです。CloudWatch Logs を有効にすると AWS IoT、トリガーされるルールとその成功または失敗を確認できます。また、WHERE 句の条件の一致について情報も得られます。詳細については、「[CloudWatch Logs AWS IoT を使用したモニタリング](cloud-watch-logs.md)」を参照してください。

最も一般的なルールの問題は権限付与です。ログを確認することで、ロールがリソースに対して AssumeRole を実行するための権限が付与されていないことがわかります。[きめ細かなログ記録](configure-logging.md#fine-logging-cli)で生成されるログの例を次に示します。

```
{
    "timestamp": "2017-12-09 22:49:17.954",
    "logLevel": "ERROR",
    "traceId": "ff563525-6469-506a-e141-78d40375fc4e",
    "accountId": "123456789012",
    "status": "Failure",
    "eventType": "RuleExecution",
    "clientId": "iotconsole-123456789012-3",
    "topicName": "test-topic",
    "ruleName": "rule1",
    "ruleAction": "DynamoAction",
    "resources": {
        "ItemHashKeyField": "id",
        "Table": "trashbin",
        "Operation": "Insert",
        "ItemHashKeyValue": "id",
        "IsPayloadJSON": "true"
    },
    "principalId": "ABCDEFG1234567ABCD890:outis",
    "details": "User: arn:aws:sts::123456789012:assumed-role/dynamo-testbin/5aUMInJH is not authorized to perform: dynamodb:PutItem on resource: arn:aws:dynamodb:us-east-1:123456789012:table/testbin (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: AccessDeniedException; Request ID: AKQJ987654321AKQJ123456789AKQJ987654321AKQJ987654321)"
}
```

[グローバルログ記録](configure-logging.md#global-logging-cli)で生成される同様のログの例を次に示します。

```
2017-12-09 22:49:17.954 TRACEID:ff562535-6964-506a-e141-78d40375fc4e 
PRINCIPALID:ABCDEFG1234567ABCD890:outis [ERROR] EVENT:DynamoActionFailure 
TOPICNAME:test-topic CLIENTID:iotconsole-123456789012-3 
MESSAGE:Dynamo Insert record failed. The error received was User: arn:aws:sts::123456789012:assumed-role/dynamo-testbin/5aUMInJI is not authorized to perform: dynamodb:PutItem on resource: arn:aws:dynamodb:us-east-1:123456789012:table/testbin 
(Service: AmazonDynamoDBv2; Status Code: 400; Error Code: AccessDeniedException; Request ID: AKQJ987654321AKQJ987654321AKQJ987654321AKQJ987654321). 
Message arrived on: test-topic, Action: dynamo, Table: trashbin, HashKeyField: id, HashKeyValue: id, RangeKeyField: None, RangeKeyValue: 123456789012
No newer events found at the moment. Retry.
```

詳細については、「[CloudWatch コンソールでの AWS IoT ログの表示](cloud-watch-logs.md#viewing-logs)」を参照してください。

## 外部サービスの診断
<a name="diagnosing-rules-ext"></a>

外部サービスはエンドユーザーによって制御されます。ルールを実行する前に、ルールにリンクした外部サービスが設定されており、アプリケーションのために十分なスループットとキャパシティーユニットがあることを確認してください。

## SQL 問題の診断
<a name="diagnosing-rules-sql"></a>

**SQL クエリが想定するデータを返さない場合:**
+ **ログでエラーメッセージを確認します。**
+ 

**SQL 構文がメッセージ内の JSON ドキュメントと一致することを確認します。**  
クエリで使用されているオブジェクト名とプロパティ名を、トピックのメッセージペイロードの JSON ドキュメントで使用されている名前とともに確認してください。SQL クエリでの JSON フォーマットの詳細については、「[JSON 拡張](iot-sql-json.md)」を参照してください。
+ 

**JSON オブジェクトまたはプロパティ名に予約文字または数字が含まれているかどうかを確認します。**  
SQL クエリでの JSON オブジェクト参照の予約文字の詳細については、「[JSON 拡張](iot-sql-json.md)」を参照してください。