エラー処理 (エラーアクション) - AWS IoT Core

エラー処理 (エラーアクション)

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_lambdaget_dynamodb()、および get_thing_shadow() と同等の料金が請求されます。また、Protobuf メッセージを JSON にデコードしている場合にのみ、decode() 関数に対して課金されます。詳細については、AWS IoT Core 料金表のページを参照してください。

ルールとエラーアクションを指定する方法の詳細については、「AWS IoT ルールの作成」を参照してください。

CloudWatch を使用してルールの成功または失敗を監視する方法の詳細については、AWS IoT のメトリクスとディメンション を参照してください。