翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
エラー処理 (エラーアクション)
がデバイスからメッセージ AWS IoT を受信すると、ルールエンジンはメッセージがルールと一致するかどうかを確認します。一致する場合は、そのルールのクエリステートメントが評価され、ルールのアクションがアクティブ化され、クエリステートメントの結果が渡されます。
アクションをアクティブ化するときに問題が発生した場合、ルールエンジンはエラーアクションを呼び出します (ルールに指定されている場合)。次の場合に、この問題が発生することがあります。
-
ルールに Amazon S3 バケットにアクセスする権限がない。
-
ユーザーエラーにより、DynamoDB のプロビジョニングされたスループットを超える。
注記
このトピックで説明するエラー処理は、ルールアクションに関するものです。外部関数を含む SQL の問題をデバッグするには、 AWS IoT ログ記録を設定できます。詳細については、「AWS IoT ログ記録の設定」を参照してください。
エラーアクションメッセージ形式
ルールとメッセージごとに 1 つのメッセージが生成されます。たとえば、同じルール内の 2 つのルールアクションが失敗した場合、エラーアクションは両方のエラーを含む 1 つのメッセージを受け取ります。
エラーアクションメッセージは次の例のようになります。
{ "ruleName": "TestAction", "topic": "testme/action", "cloudwatchTraceId": "7e146a2c-95b5-6caf-98b9-50e3969734c7", "clientId": "iotconsole-1511213971966-0", "base64OriginalPayload": "ewogICJtZXNzYWdlIjogIkhlbGxvIHZyb20gQVdTIElvVCBjb25zb2xlIgp9", "failures": [ { "failedAction": "S3Action", "failedResource": "us-east-1-s3-verify-user", "errorMessage": "Failed to put S3 object. The error received was The specified bucket does not exist (Service: Amazon S3; Status Code: 404; Error Code: NoSuchBucket; Request ID: 9DF5416B9B47B9AF; S3 Extended Request ID: yMah1cwPhqTH267QLPhTKeVPKJB8BO5ndBHzOmWtxLTM6uAvwYYuqieAKyb6qRPTxP1tHXCoR4Y=). Message arrived on: error/action, Action: s3, Bucket: us-east-1-s3-verify-user, Key: \"aaa\". Value of x-amz-id-2: yMah1cwPhqTH267QLPhTKeVPKJB8BO5ndBHzOmWtxLTM6uAvwYYuqieAKyb6qRPTxP1tHXCoR4Y=" } ] }
- ruleName
-
エラーアクションをトリガーしたルールの名前。
- トピック
-
元のメッセージが受信されたトピック。
- cloudwatchTraceId
-
のエラーログを参照する一意の ID CloudWatch。
- clientId
-
メッセージの発行元のクライアント ID。
- base64OriginalPayload
-
Base64 でエンコードされた元のメッセージペイロード。
- エラー
-
- failedAction
-
完了に失敗したアクションの名前 (たとえば「S3Action」)。
- failedResource
-
リソースの名前 (たとえば S3 バケットの名前)。
- errorMessage
-
エラーの記述と説明。
エラーアクションの例
次に、エラーアクションが追加されたルールの例を示します。次のルールには、メッセージデータを DynamoDB テーブルに書き込むアクションと、Amazon S3 バケットにデータを書き込むエラーアクションがあります。
{ "sql" : "SELECT * FROM ..." "actions" : [{ "dynamoDB" : { "table" : "PoorlyConfiguredTable", "hashKeyField" : "AConstantString", "hashKeyValue" : "AHashKey"}} ], "errorAction" : { "s3" : { "roleArn": "arn:aws:iam::123456789012:role/aws_iot_s3", "bucketName" : "message-processing-errors", "key" : "${replace(topic(), '/', '-') + '-' + timestamp() + '-' + newuuid()}" } } }
、、、aws_lambda()
、、 などの外部関数を含むエラーアクションの SQL ステートメントではget_dynamodb()
get_thing_shadow()
get_secret()
、任意の関数または置換テンプレートを使用できますmachinelearning_predict()
decode()
。エラーアクションが外部関数を呼び出す必要がある場合、エラーアクションを呼び出すと、外部関数に追加の請求が発生する可能性があります。
次の外部関数は、ルールアクションのものに相当する料金が請求されます: aws_lambda
、get_dynamodb()
、および get_thing_shadow()
。また、Protobuf メッセージを JSON にデコードしている場合にのみ、decode()
関数に対して課金されます。 https://docs.aws.amazon.com/iot/latest/developerguide/binary-payloads.html#binary-payloads-protobuf詳細については、「 のAWS IoT Core 料金」ページ
ルールの詳細とエラーアクションを指定する方法については、AWS IoT 「ルールの作成」を参照してください。
を使用してルールの成功または失敗をモニタリング CloudWatch する方法の詳細については、「」を参照してくださいAWS IoT メトリクスとディメンション。