Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Gestione degli errori (operazione in caso di errore)
Quando AWS IoT riceve un messaggio da un dispositivo, il motore delle regole verifica se il messaggio corrisponde a una regola. In tal caso, l'istruzione query della regola viene valutata e vengono attivate le operazioni della regola, passando il risultato dell'istruzione query.
Se si verifica un problema quando si richiama un'operazione, il motore di regole richiama un'operazione da eseguire in caso di errore, se ne è stata specificata una per la regola. Questo può accadere quando:
-
Una regola non dispone dell'autorizzazione per l'accesso a un bucket Amazon S3.
-
Un errore dell'utente causa il superamento della velocità effettiva di Dynamo DB di cui è stato effettuato il provisioning.
Nota
La gestione degli errori trattata in questo argomento riguarda le operazioni delle regole. Per eseguire il debug SQL dei problemi, incluse le funzioni esterne, puoi configurare la AWS IoT registrazione. Per ulteriori informazioni, consulta Configurare la registrazione AWS IoT.
Formato del messaggio dell'operazione da eseguire in caso di errore
Viene generato un singolo messaggio per ogni regola e messaggio. Se, ad esempio, si verifica un errore per due operazioni nella stessa regola, l'operazione da eseguire in caso di errore riceve un messaggio contenente entrambi gli errori.
Il messaggio dell'operazione di errore è simile a quello nell'esempio seguente.
{ "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
-
Nome della regola che ha attivato l'operazione da eseguire in caso di errore.
- topic
-
Argomento dove è stato ricevuto il messaggio originale.
- cloudwatchTraceId
-
Un'identità univoca che si riferisce all'errore di accesso. CloudWatch
- clientId
-
ID client di chi ha pubblicato il messaggio.
- base64 OriginalPayload
-
Payload del messaggio originale con codifica Base64.
- failures
-
- failedAction
-
Nome dell'operazione che non è stato possibile completare, ad esempio "S3Action".
- failedResource
-
Nome della risorsa, ad esempio il nome di un bucket S3.
- errorMessage
-
Descrizione e spiegazione dell'errore.
Esempio di operazione in caso di errore
Di seguito è illustrato un esempio di una regola a cui è stata aggiunta un'operazione da eseguire in caso di errore. La regola seguente include un'operazione di scrittura dei dati dei messaggi in una tabella Dynamo DB e un'operazione da eseguire in caso di errore di scrittura dei dati in un bucket 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()}" } } }
È possibile utilizzare qualsiasi funzione o modello di sostituzione nell'SQListruzione di un'azione di errore, incluse le funzioni esterne: aws_lambda()
,,, get_dynamodb()
get_thing_shadow()
, get_secret()
e. machinelearning_predict()
decode()
Se un'azione di errore richiede la chiamata di una funzione esterna, l'invocazione dell'azione di errore può comportare una fattura aggiuntiva per la funzione esterna.
Le seguenti funzioni esterne vengono fatturate in modo equivalente a quella di un'azione di regola: aws_lambda
get_dynamodb()
, e. get_thing_shadow()
Inoltre, la decode()
funzione viene fatturata solo quando decodifichi un messaggio Protobuf in. JSON Per maggiori dettagli, consulta la pagina dei prezzi.AWS IoT Core
Per ulteriori informazioni sulle regole e su come specificare un'azione di errore, vedi Creazione di una AWS IoT regola.
Per ulteriori informazioni sull'utilizzo CloudWatch per monitorare l'esito positivo o negativo delle regole, vedereAWS IoT metriche e dimensioni.