Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Gestion des erreurs (action d'erreur)
Lorsqu'il AWS IoT reçoit un message d'un appareil, le moteur de règles vérifie si le message correspond à une règle. Si c'est le cas, l'instruction de requête de la règle est évaluée et les actions de la règle sont activées, en transmettant le résultat de l'instruction de requête.
Si un problème survient lors de l'activation d'une action, le moteur de règles active une action d'erreur, si une telle action est spécifiée pour la règle. Cela peut se produire dans les cas suivants :
-
Une règle n'a pas l'autorisation d'accéder à un compartiment Amazon S3.
-
Une erreur de l'utilisateur entraîne un dépassement du DynamoDB provisioned throughput
Note
La gestion des erreurs abordée dans cette rubrique concerne les actions relatives aux règles. Pour résoudre les problèmes SQL, y compris les fonctions externes, vous pouvez configurer la AWS IoT journalisation. Pour plus d’informations, consultez Configuration de la AWS IoT journalisation.
Format du message d'action d'erreur
Un seul message est généré par la règle et par message. Par exemple, si deux actions de règle échouent dans une même règle, l'action d'erreur reçoit un message contenant les deux erreurs.
Par exemple, le message d'erreur ressemble à ce qui suit :
{ "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
-
Nom de la règle qui a déclenché l'action d'erreur.
- topic
-
Rubrique dans laquelle le message d'origine a été reçu.
- cloudwatchTraceId
-
Une identité unique faisant référence à l'erreur se connecte CloudWatch.
- clientId
-
ID client de l'éditeur du message.
- base 64 OriginalPayload
-
Charge utile du message d'origine codée en base64.
- échecs
-
- failedAction
-
Nom de l'action qui a échoué, par exemple « S3Action ».
- failedResource
-
Nom de la ressource. Par exemple, le nom d'un compartiment S3.
- errorMessage
-
Description et explication de l'erreur.
Exemple d'action d'erreur
Voici un exemple de règle à laquelle a été ajoutée une action d'erreur. La règle suivante comporte une action qui écrit les données du message dans une table DynamoDB et une action d'erreur qui écrit les données dans un panier 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()}" } } }
Vous pouvez utiliser n'importe quelle fonction ou modèle de substitution dans l'instruction SQL d'une action d'erreur, y compris les fonctions externes : aws_lambda()
, get_dynamodb()
, get_thing_shadow()
, get_secret()
, machinelearning_predict()
, et decode()
. Si une action d'erreur nécessite l'appel d'une fonction externe, l'invocation de l'action d'erreur peut entraîner une facture supplémentaire pour la fonction externe.
Les fonctions externes suivantes sont facturées de manière équivalente à celle d'une action de règle : aws_lambda
, get_dynamodb()
, et get_thing_shadow()
. La decode()
fonction ne vous est également facturée que lorsque vous décodez un message Protobuf en JSON. Pour plus de détails, consultez la page de AWS IoT Core tarification
Pour plus d'informations sur les règles et sur la manière de spécifier une action d'erreur, consultez la section Création d'une AWS IoT règle.
Pour plus d'informations sur l'utilisation CloudWatch pour surveiller le succès ou l'échec des règles, consultezAWS IoT métriques et dimensions.