本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
當 從裝置 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()
。如果錯誤動作需要呼叫外部 函數,則叫用錯誤動作可能會導致外部函數產生額外的帳單。
下列外部函數的計費方式等同於規則動作的計費方式:get_dynamodb()
、 aws_lambda
和 get_thing_shadow()
。只有當您將 Protobuf 訊息解碼至 時,JSON您才會收到decode()
函數的帳單。如需詳細資訊,請參閱 AWS IoT Core 定價頁面
如需規則以及如何指定錯誤動作的詳細資訊,請參閱建立 AWS IoT 規則。
如需使用 CloudWatch 監控規則成功或失敗的詳細資訊,請參閱 AWS IoT 指標和維度。