錯誤處理 (錯誤動作) - 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

觸發錯誤動作的規則名稱。

主題

收到原始訊息的主題。

雲觀察 TraceId

參照錯誤記錄的唯一身份 CloudWatch。

clientId

訊息發佈者的用戶端 ID。

Base64 OriginalPayload

原始訊息承載 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 量度和維度