エラー処理 (エラーアクション)
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
-
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 ステートメントでは、外部関数の aws_lambda()
、get_dynamodb()
、get_thing_shadow()
、get_secret()
、machinelearning_predict()
および decode()
を含む任意の関数または置換テンプレートを使用できます。エラーアクションで外部関数を呼び出す必要がある場合、エラーアクションを呼び出すと、外部関数に追加の請求が発生する可能性があります。
次の外部関数には、ルールアクションの aws_lambda
、get_dynamodb()
、および get_thing_shadow()
と同等の料金が請求されます。また、Protobuf メッセージを JSON にデコードしている場合にのみ、decode()
関数に対して課金されます。詳細については、AWS IoT Core 料金表のページ
ルールとエラーアクションを指定する方法の詳細については、「AWS IoT ルールの作成」を参照してください。
CloudWatch を使用してルールの成功または失敗を監視する方法の詳細については、AWS IoT のメトリクスとディメンション を参照してください。