Tratamento de erros (ação de erro)
Quando a AWS IoT recebe uma mensagem de um dispositivo, o mecanismo de regras verifica se a mensagem corresponde a uma regra. Nesse caso, a instrução de consulta da regra é avaliada e as ações da regra são ativadas, transmitindo o resultado da instrução de consulta.
Se ocorrer um problema ao chamar uma ação, o mecanismo de regras ativará uma ação de erro, se uma ação estiver especificada para a regra. Isso pode acontecer quando:
-
Uma regra não tem permissão para acessar um bucket do Amazon S3.
-
Um erro do usuário faz com que o throughput provisionado do DynamoDB seja excedido.
nota
O tratamento de erros abordado neste tópico é para ações de regras. Para depurar problemas de SQL, incluindo funções externas, você pode configurar o AWS IoT log. Para obter mais informações, consulte Configurar registro em log da AWS IoT.
Formato da mensagem de ação de erro
Uma única mensagem é gerada por regra e mensagem. Por exemplo, se houver uma falha em duas ações de regra na mesma regra, a ação de erro receberá uma mensagem contendo os dois erros.
O resultado é uma mensagem que parece com o exemplo a seguir.
{ "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
-
O nome da regra que acionou a ação de erro.
- tópico
-
O tópico no qual a mensagem original foi recebida.
- cloudwatchTraceId
-
Uma identidade exclusiva que faz referência aos logs de erro no CloudWatch.
- clientId
-
O ID do cliente do publicador da mensagem.
- base64OriginalPayload
-
A carga da mensagem original codificada em Base64.
- falhas
-
- failedAction
-
O nome da ação que não foi concluída (por exemplo "S3Action").
- failedResource
-
O nome do recurso (por exemplo, o nome de um bucket do S3).
- errorMessage
-
A descrição e a explicação do erro.
Exemplo de ação de erro
Este é um exemplo de uma regra com uma ação de erro adicional. A seguinte regra tem uma ação que grava dados de mensagens em uma tabela do DynamoDB e uma ação de erro que grava dados em um bucket do 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()}" } } }
Você pode usar qualquer função ou modelo de substituição na instrução SQL de uma ação de erro, incluindo as funções externas: aws_lambda()
get_dynamodb()
, get_thing_shadow()
, get_secret()
, machinelearning_predict()
e. decode()
Se uma ação de erro exigir a chamada de uma função externa, a invocação da ação de erro poderá resultar em cobrança adicional para a função externa.
As seguintes funções externas são cobradas de modo equivalente ao de uma ação de regra: aws_lambda
, get_dynamodb()
e get_thing_shadow()
. Você também é cobrado pela função decode()
apenas quando está decodificando uma mensagem Protobuf para JSON. Para obter mais detalhes, consulte a página de precificação do AWS IoT Core
Para obter mais informações sobre regras e como especificar uma ação de erro, consulte Como criar uma AWS IoTRegra.
Para obter mais informações sobre como usar o CloudWatch para monitorar o sucesso ou a falha de regras, consulte Métricas e dimensões do AWS IoT.