エラー処理 (エラーアクション)
AWS IoT がデバイスからメッセージを受信すると、ルールエンジンはそのメッセージがルールと一致するかどうかを確認します。一致する場合は、そのルールのクエリステートメントが評価され、ルールのアクションがトリガーされ、クエリステートメントの結果が渡されます。
アクションをトリガーするときに問題が発生した場合、ルールエンジンはエラーアクションをトリガーします (そのルールにエラーアクションが指定されている場合)。次の場合に、この問題が発生することがあります。
-
ルールに Amazon S3 バケットにアクセスする権限がない。
-
ユーザーエラーにより、DynamoDB のプロビジョニングされたスループットを超える。
エラーアクションメッセージ形式
ルールとメッセージごとに 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
-
CloudWatch でエラーログを参照する一意の ID。
- 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()}" } } }
外部関数を除き、エラーアクションの SQL ステートメントで任意の関数または置換を使用できます (例: get_thing_shadow
、aws_lambda
、machinelearning_predict
など)。
ルールとエラーアクションを指定する方法の詳細については、「AWS IoT ルールの作成」を参照してください。
CloudWatch を使用してルールの成功または失敗を監視する方法の詳細については、AWS IoT のメトリクスとディメンション を参照してください。