本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
錯誤處理 (錯誤動作)
當 從裝置 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_lambda
、 get_dynamodb()
和 get_thing_shadow()
。只有當您將 Protobuf 訊息解碼至 時,JSON您才會收到decode()
函數的帳單。如需更多詳細資訊,請參閱AWS IoT Core 定價頁面
如需規則以及如何指定錯誤動作的詳細資訊,請參閱建立 AWS IoT 規則 。
如需使用 CloudWatch 監控規則成功或失敗的詳細資訊,請參閱 AWS IoT 指標和維度。