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 SQL consultas e funções simples em uma declaração de consulta de regra

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

Este tutorial leva cerca de 30 minutos para ser concluído.

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 SQLdeclaração:

    1. Na SQLversão, selecione2016-03-23.

    2. Na caixa de edição da SQLdeclaração, insira a declaração:

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

      Esta declaração:

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

      • 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

      Certifique-se de escolher o DynamoDB e não o ynamoDBv D 2 como a 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 DECIMAL valor que corresponda 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 IAMFunção, escolha Criar nova função.

    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. Na IAMfunção, escolhawx_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 MQTT cliente para publicar e assinar as MQTT mensagens usadas nesse teste.

Abra o MQTTcliente no AWS IoT console em uma nova janela. Isso permitirá que você edite a regra sem perder a configuração do seu MQTT cliente. O MQTT cliente não retém nenhuma assinatura ou registro 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.

Para usar o MQTT cliente para testar sua regra
  1. No MQTTcliente no AWS IoT console, assine o tópico de entrada,device/+/data.

    1. No MQTT cliente, escolha Inscrever-se em 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 em MQTT tópicos que contenham caracteres curinga.

    1. No MQTT cliente, 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 MQTT mensagem, escolha Publicar.

    5. Agora, no MQTT cliente, escolha Inscrever-se em 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 MQTT cliente

    Toda vez que você publica sua mensagem de entrada no device/22/data tópico, essa mensagem deve aparecer no MQTT cliente se você se inscreveu no filtro de device/+/data tópicos 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 MQTT cliente, em Assinaturas, escolha dispositivo/+/data, 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 MQTT cliente e a regra que você criou

      O console no qual você está executando o MQTT cliente deve estar na mesma AWS região 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 de tópico na FROM cláusula 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 MQTT cliente. 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 SELECT instrução.

      Verifique a ortografia do temperature campo na instrução de consulta da regra com a da carga útil da mensagem no MQTT cliente. 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 JSON documento na carga da mensagem está formatado corretamente. Se houver JSON 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 da mensagem publicada. JSON

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

    • 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.

  • Mude 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 MQTT mensagem 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.