錯誤處理 (錯誤動作) - AWS IoT Core

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

錯誤處理 (錯誤動作)

當 從裝置 AWS IoT 收到訊息時, 規則引擎會檢查訊息是否符合規則。若是如此,則會對規則的查詢陳述式進行評估,並啟動規則的動作,傳送查詢陳述式的結果。

如果在啟動動作時發生問題,則若針對規則指定了錯誤動作,規則引擎便會啟動該動作。這可能在以下情況時發生:

  • 規則並未擁有存取 Amazon S3 儲存貯體的許可。

  • 使用者錯誤會造成 DynamoDB 佈建的傳輸量超量。

注意

本主題所述的錯誤處理適用於規則動作。若要偵錯SQL問題,包括外部函數,您可以設定 AWS IoT 記錄。如需詳細資訊,請參閱設定 AWS IoT 記錄

錯誤動作訊息格式

每一項規則和訊息會產生單條訊息。例如,如果相同規則中的兩個規則動作失敗,則錯誤動作會收到包含那兩個錯誤的訊息。

錯誤動作訊息看似下列範例。

{ "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。

clientId

訊息發佈者的用戶端 ID。

base64OriginalPayload

原始訊息承載 Base64 編碼。

failures
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 指標和維度