Tutorial: Armazenamento de dados do dispositivo em uma tabela do DynamoDB - AWS IoT Core

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Tutorial: Armazenamento de dados do dispositivo em uma tabela do DynamoDB

Este tutorial demonstra como criar uma AWS IoT regra que envia dados de mensagens para uma tabela do DynamoDB.

Neste tutorial, você cria uma regra que envia dados das mensagens de um dispositivo de sensor climático imaginário para uma tabela do DynamoDB. A regra formata os dados de vários sensores meteorológicos para que possam ser adicionados a uma única tabela de banco de dados.

O que você aprenderá neste tutorial
  • Como criar uma tabela do DynamoDB

  • Como enviar dados de mensagens para uma tabela do DynamoDB a partir de uma regra AWS IoT

  • Como usar modelos de substituição em uma regra AWS IoT

  • Como usar consultas e funções SQL simples em uma instrução de consulta de regra

  • Como usar o cliente MQTT para testar uma regra AWS IoT

A conclusão deste tutorial requer cerca de 30 minutos.

Antes de começar este tutorial, verifique se você tem o seguinte:

Etapa 1: Criar a tabela no DynamoDB para este tutorial

Neste tutorial, você criará uma tabela do DynamoDB com esses atributos para registrar os dados dos dispositivos imaginários de sensores climáticos:

  • sample_time é uma chave primária e descreve a hora em que a amostra foi registrada.

  • device_id é uma chave de classificação e descreve o dispositivo que forneceu a amostra

  • device_data são os dados recebidos do dispositivo e formatados pela instrução de consulta de regra

Para criar uma tabela do DynamoDB para este tutorial
  1. Abra o console DynamoDB, e selecione Criar tabela.

  2. Em Criar tabela:

    1. Em Nome da tabela, insira o nome da tabela: wx_data.

    2. Em Chave de partição insira sample_time, e na lista de opções ao lado do campo, escolhaNumber.

    3. Em Chave de classificação, insira device_id, e, na lista de opções ao lado do campo, escolhaNumber.

    4. Na parte inferior da página, selecione Criar.

Você definirá device_data posteriormente, quando configurar a ação da regra do DynamoDB.

Etapa 2: criar uma AWS IoT regra para enviar dados para a tabela do DynamoDB

Nesta etapa, você usará a consulta de regras para formatar os dados dos dispositivos imaginários de sensores climáticos para gravar na tabela do banco de dados.

Um exemplo de carga útil de mensagem recebida de um dispositivo de sensor climático tem o seguinte aspecto:

{ "temperature": 28, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }

Para a entrada do banco de dados, você usará a instrução de consulta de regra para nivelar a estrutura da carga útil da mensagem para ficar dessa forma:

{ "temperature": 28, "humidity": 80, "barometer": 1013, "wind_velocity": 22, "wind_bearing": 255 }

Nessa regra, você também usará alguns Modelos de substituição. Os modelos de substituição são expressões que permitem inserir valores dinâmicos de funções e dados de mensagens.

Para criar a AWS IoT regra para enviar dados para a tabela do DynamoDB
  1. Abra o hub Regras do AWS IoT console. Ou você pode abrir a AWS IoT página inicial em AWS Management Console e navegar até Roteamento de mensagens> Regras.

  2. Para começar a criar sua nova regra em Regras, escolha Criar regra.

  3. Em Propriedades da regra:

    1. Em Nome do perfil, insira wx_data_ddb.

      Lembre-se de que o nome de uma regra deve ser exclusivo em sua região Conta da AWS e não pode ter espaços. Usamos um caractere sublinhado nesse nome para separar as duas palavras no nome da regra.

    2. Em Descrição da regra, descreva a regra.

      Uma descrição significativa facilita lembrar o que essa regra faz e por que você a criou. A descrição pode ser tão longa quanto necessário, portanto, seja o mais detalhista possível.

  4. Escolha Próximo para continuar.

  5. Em instrução SQL:

    1. Na versão SQL, selecione2016-03-23.

    2. Na caixa de edição da instrução SQL, insira a instrução:

      SELECT temperature, humidity, barometer, wind.velocity as wind_velocity, wind.bearing as wind_bearing, FROM 'device/+/data'

      Esta declaração:

      • Recebe mensagens MQTT com um tópico que corresponda ao filtro de tópicos device/+/data.

      • Formata os elementos do atributo wind como atributos individuais.

      • Transmite o temperature, humidity e atributos inalterados barometer.

  6. Escolha Próximo para continuar.

  7. Em Ações de regra:

    1. Para abrir a lista de ações de regra para essa regra, na Ação 1, escolha DynamoDB.

      nota

      Verifique se você escolheu o DynamoDB e não o DynamoDBV2 como ação da regra.

    2. Em Nome da tabela, escolha o nome da tabela do DynamoDB que você criou na etapa anterior: wx_data.

      Os campos Tipo de chave de partição e Tipo de chave de classificação são preenchidos com os valores da tabela do DynamoDB.

    3. Em Chave de partição, insira sample_time.

    4. Em Valor da chave de partição, insira ${timestamp()}.

      Esse é o primeiro dos Modelos de substituição que você usará nesta regra. Em vez de usar um valor da carga da mensagem, ele usará o valor retornado da função de datação. Para saber mais, consulte Datação na AWS IoT Core Guia do desenvolvedor.

    5. Em Chave de classificação, insira device_id.

    6. Em Valor da chave de classificação, insira ${cast(topic(2) AS DECIMAL)}.

      Esse é o segundo dos Modelos de substituição que você vai usar nesta regra. Ele insere o valor do segundo elemento no nome do tópico, que é o ID do dispositivo, depois de convertê-lo em um valor DECIMAL para corresponder ao formato numérico da chave. Para saber mais sobre tópicos, consulte Tópicos no Guia do desenvolvedor da AWS IoT Core . Ou, para saber mais sobre a transmissão, consulte Orientação no AWS IoT Core Guia do desenvolvedor.

    7. Na coluna Gravar os dados da mensagem nesta coluna, insira device_data.

      Isso criará a coluna device_data na tabela do DynamoDB.

    8. Deixe o campo Operação em branco.

    9. Em Perfil do IAM, selecione Criar novo perfil.

    10. Na caixa de diálogo Criar perfil, em Nome do perfil, insira wx_ddb_role. Essa nova função conterá automaticamente uma política com o prefixo "aws-iot-rule" que permitirá que a wx_data_ddb regra envie dados para a tabela do wx_data DynamoDB que você criou.

    11. Em Perfil do IAM, escolha wx_ddb_role.

    12. Na parte inferior da página, selecione a opção Próximo.

  8. Na parte inferior da página Revisar e criar, escolha a opção Criar para criar a regra.

Etapa 3: testar a AWS IoT regra e a tabela do DynamoDB

Para testar a nova regra, você usará o cliente MQTT para publicar e assinar as mensagens MQTT usadas neste teste.

Abra o cliente MQTT no AWS IoT console em uma nova janela. Isso permitirá que você edite a regra sem perder a configuração do seu cliente MQTT. O cliente MQTT não retém nenhuma assinatura ou logs de mensagens se você deixar que ele vá para outra página no console. Você também desejará que uma janela de console separada seja aberta para o hub do DynamoDB Tables no console para visualizar AWS IoT as novas entradas que sua regra envia.

Você pode usar o cliente MQTT para testar a regra
  1. No cliente MQTT no AWS IoT console, assine o tópico de entrada,device/+/data.

    1. No Cliente MQTT, escolha Assinar um tópico.

    2. Em Filtro de tópicos, insira o tópico do filtro de tópico de entrada, device/+/data.

    3. Escolha Assinar.

  2. Agora, publique uma mensagem no tópico de entrada com um ID de dispositivo específico, device/22/data. Você não pode publicar nos tópicos MQTT que contenham caracteres curinga.

    1. No cliente MQTT, escolha Publicar em um tópico.

    2. Em Nome do tópico, insira um nome para o tópico, device/22/data.

    3. Em Carga útil da mensagem, insira os seguintes dados de exemplo.

      { "temperature": 28, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
    4. Para publicar a mensagem MQTT, escolha Publicar.

    5. Agora, no cliente MQTT, escolha Assinar um tópico. Na coluna Assinar, escolha a assinatura device/+/data. Confirme se os dados de amostra da etapa anterior aparecem.

  3. Verifique se consegue visualizar a linha na tabela do DynamoDB que sua regra criou.

    1. No hub do DynamoDB Tables no console, escolha wx_data e, em AWS IoT seguida, escolha a guia Itens.

      Se você já estiver na guia Itens, talvez precise atualizar a exibição selecionando o ícone de atualização no canto superior direito do cabeçalho da tabela.

    2. Observe que os valores de sample_time na tabela são links. Abra um. Se acabou de enviar a primeira mensagem, ela será a única na lista.

      Esse link exibe todos os dados nessa linha da tabela.

    3. Expanda a entrada device_data para ver os dados que resultaram da consulta da regra.

    4. Explore as diferentes representações dos dados disponíveis nessa exibição. Você também pode editar os dados nessa exibição.

    5. Depois de concluir a revisão dessa linha de dados, para salvar as alterações feitas, escolha a opção Salvar ou, para sair sem salvar nenhuma alteração, escolha Cancelar.

Se não encontrar o comportamento correto, confira as dicas de solução de problemas.

Solução de problemas da regra do DynamoDB

Aqui estão algumas objetos para verificar caso você não esteja vendo os resultados esperados.

  • Você recebeu um banner de erro

    Se um erro apareceu quando você publicou a mensagem de entrada, corrija esse erro primeiro. As etapas a seguir podem ajudá-lo a corrigir esse erro.

  • Você não vê a mensagem de entrada no cliente MQTT

    Toda vez que você publica sua mensagem de entrada no tópico device/22/data, essa mensagem deve aparecer no cliente MQTT se você se inscreveu no filtro de tópicos device/+/data conforme descrito no procedimento.

    Pontos importantes
    • Verifique o filtro de tópicos em que você fez a assinatura

      Se você fez a assinatura no tópico da mensagem de entrada conforme descrito no procedimento, deverá ver uma cópia da mensagem de entrada toda vez que publicá-la.

      Se você não visualizar a mensagem, verifique o nome do tópico em que você fez a assinatura e compare-o com o tópico no qual você publicou. Os nomes dos tópicos diferenciam maiúsculas de minúsculas e o tópico no qual você fez a assinatura deve ser idêntico ao tópico no qual você publicou a carga útil da mensagem.

    • Verifique a função de publicação de mensagens

      No cliente MQTT, em Assinaturas, escolha dispositivo/+/dados, verifique o tópico da mensagem de publicação e escolha Publicar no tópico. Você deve ver a carga útil da mensagem na caixa de edição abaixo do tópico aparecer na lista de mensagens.

  • Você não vê os dados na tabela do DynamoDB

    A primeiro objeto a fazer é atualizar a exibição selecionando o ícone de atualização no canto superior direito do cabeçalho da tabela. Se os dados que você está procurando não forem exibidos, verifique o seguinte.

    Pontos importantes
    • Verifique o Região da AWS do seu cliente MQTT e a regra que você criou

      O console no qual você está executando o cliente MQTT deve estar na mesma região AWS da regra que você criou.

    • Verifique o tópico da mensagem de entrada na instrução de consulta da regra

      Para que a regra funcione, ela deve receber uma mensagem com o nome do tópico que corresponda ao filtro do tópico na cláusula FROM da instrução de consulta da regra.

      Verifique a ortografia do filtro de tópico na declaração de consulta de regra com a do tópico no cliente MQTT. Os nomes dos tópicos diferenciam maiúsculas de minúsculas e o tópico da mensagem deve corresponder ao filtro de tópico na instrução de consulta da regra.

    • Verifique o conteúdo da carga útil da mensagem de entrada

      Para que a regra funcione, ela deve encontrar o campo de dados na carga da mensagem declarada na instrução SELECT.

      Verifique a ortografia do campo temperature na instrução de consulta da regra com a da carga útil da mensagem no cliente MQTT. Os nomes dos campos diferenciam maiúsculas de minúsculas e o campo temperature na instrução de consulta da regra deve ser idêntico ao campo temperature na carga útil da mensagem.

      Verifique se o documento JSON na carga útil da mensagem está formatado corretamente. Se o JSON tiver algum erro, como uma vírgula ausente, a regra não poderá lê-lo.

    • Verifique os nomes da chave e do campo usados na ação da regra

      Os nomes de campo usados na regra de tópico devem corresponder aos encontrados na carga útil da mensagem JSON da mensagem publicada.

      Abra a regra criada no console e verifique os nomes dos campos na configuração da ação da regra com aqueles usados no cliente MQTT.

    • Verifique a função que está sendo usada pela regra

      A ação da regra deve ter permissão para receber o tópico original e publicar o novo tópico.

      As políticas que autorizam a regra a receber dados de mensagens e atualizar a tabela do DynamoDB são específicas para os tópicos utilizados. Se você alterar o tópico ou o nome da tabela do DynamoDB usado pela regra, deverá atualizar a função da ação da regra para que a política esteja de acordo.

      Se você suspeitar que esse é o problema, edite a ação da regra e crie um novo perfil. As novas funções criadas pela ação da regra recebem as autorizações necessárias para realizar essas ações.

Etapa 4: Revisar os resultados e as próximas etapas

Depois de enviar algumas mensagens para a tabela do DynamoDB com essa regra, experimente usá-la para ver como a alteração de alguns aspectos do tutorial afeta os dados gravados na tabela. Aqui estão algumas ideias para você começar.

  • Altere o device_id no tópico da mensagem de entrada e observe o efeito nos dados. Você pode usar isso para simular o recebimento de dados de vários sensores meteorológicos.

  • Altere os campos selecionados na instrução de consulta da regra e observe o efeito nos dados. Você pode usar isso para filtrar os dados armazenados na tabela.

  • Adicione uma ação de regra de republicação para enviar uma mensagem MQTT para cada linha adicionada à tabela. Você pode usar isso para depuração.

Depois de concluir este tutorial, confira Tutorial: Como formatar uma notificação usando uma função AWS Lambda.