

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
<a name="iot-ddb-rule"></a>

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 

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

**Topics**
+ [Etapa 1: Criar a tabela no DynamoDB para este tutorial](#iot-ddb-rule-ddb-table)
+ [Etapa 2: criar uma AWS IoT regra para enviar dados para a tabela do DynamoDB](#iot-ddb-rule-topic-rule)
+ [Etapa 3: testar a AWS IoT regra e a tabela do DynamoDB](#iot-ddb-rule-test)
+ [Etapa 4: revisar os resultados e as próximas etapas](#iot-ddb-rule-review)

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

**[Configurar Conta da AWS](setting-up.md)**  
Você precisará do seu AWS IoT console Conta da AWS e do console para concluir este tutorial.
+ 

**Revisado [Exibir mensagens MQTT com o cliente AWS IoT MQTT](view-mqtt-messages.md)**  
Certifique-se de que você pode usar o cliente MQTT para fazer a assinatura e publicar em um tópico. Você usará o cliente MQTT para testar a nova regra neste procedimento.
+ 

**Analisada a visão geral do [Amazon DynamoDB](https://docs.aws.amazon.com//amazondynamodb/latest/developerguide/Introduction.html)**  
Se você nunca usou o DynamoDB, consulte [Getting Started with DynamoDB](https://docs.aws.amazon.com//amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html) para se familiarizar com os conceitos e operações básicos do DynamoDB.

## Etapa 1: Criar a tabela no DynamoDB para este tutorial
<a name="iot-ddb-rule-ddb-table"></a>

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](https://console.aws.amazon.com//dynamodb/home), e selecione **Criar tabela**.

1. Em **Criar tabela**:

   1.  Em **Nome da tabela**, insira o nome da tabela: **wx\$1data**.

   1. Em **Chave de partição** insira **sample\$1time**, e na lista de opções ao lado do campo, escolha**Number**.

   1. Em **Chave de classificação**, insira **device\$1id**, e, na lista de opções ao lado do campo, escolha**Number**.

   1. 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
<a name="iot-ddb-rule-topic-rule"></a>

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](iot-substitution-templates.md). 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](https://console.aws.amazon.com//iot/home#/rulehub). Ou você pode abrir a AWS IoT página inicial em Console de gerenciamento da AWS e navegar até **Roteamento de mensagens>** Regras.

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

1. Em **Propriedades da regra**:

   1. Em **Nome do perfil**, insira **wx\$1data\$1ddb**.

      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.

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

1. Escolha **Próximo** para continuar.

1. Em **instrução SQL**:

   1. Na **versão SQL**, selecione**2016-03-23**.

   1. 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`.

1. Escolha **Próximo** para continuar.

1. 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 DBv2 Dynamo como ação de regra.

   1. Em **Nome da tabela**, escolha o nome da tabela do DynamoDB que você criou na etapa anterior: **wx\$1data**.

      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.

   1. Em **Chave de partição**, insira **sample\$1time**.

   1. Em **Valor da chave de partição**, insira **\$1\$1timestamp()\$1**.

      Esse é o primeiro dos [Modelos de substituição](iot-substitution-templates.md) 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](iot-sql-functions.md#iot-function-timestamp) na *AWS IoT Core Guia do desenvolvedor*.

   1. Em **Chave de classificação**, insira **device\$1id**.

   1. Em **Valor da chave de classificação**, insira **\$1\$1cast(topic(2) AS DECIMAL)\$1**.

      Esse é o segundo dos [Modelos de substituição](iot-substitution-templates.md) 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](iot-sql-functions.md#iot-function-topic) no *Guia do desenvolvedor da AWS IoT Core *. Ou, para saber mais sobre a transmissão, consulte [Orientação](iot-sql-functions.md#iot-sql-function-cast) no *AWS IoT Core Guia do desenvolvedor*.

   1. Na coluna **Gravar os dados da mensagem nesta coluna**, insira **device\$1data**.

      Isso criará a coluna `device_data` na tabela do DynamoDB.

   1. Deixe o campo **Operação** em branco.

   1. Em **Perfil do IAM**, selecione **Criar novo perfil**.

   1. Na caixa de diálogo **Criar perfil**, em **Nome do perfil**, insira **wx\$1ddb\$1role**. Essa nova função conterá automaticamente uma política com o prefixo "aws-iot-rule" que permitirá que a **wx\$1data\$1ddb** regra envie dados para a tabela do **wx\$1data** DynamoDB que você criou.

   1. Em **Perfil do IAM**, escolha **wx\$1ddb\$1role**.

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

1. 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
<a name="iot-ddb-rule-test"></a>

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](https://console.aws.amazon.com//iot/home#/test) 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](https://console.aws.amazon.com//dynamodb/home#tables:) novas entradas que sua regra envia.

**Você pode usar o cliente MQTT para testar a regra**

1. No [cliente MQTT no AWS IoT console](https://console.aws.amazon.com//iot/home#/test), assine o tópico de entrada,`device/+/data`.

   1. No cliente MQTT, escolha **Assinar um tópico**.

   1. Em **Filtro de tópicos**, insira o tópico do filtro de tópico de entrada, **device/\$1/data**.

   1. Escolha **Assinar**.

1. 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**.

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

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

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

   1. Para publicar a mensagem MQTT, escolha **Publicar**.

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

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

   1. **No [hub do DynamoDB Tables no console, escolha wx\$1data e, em AWS IoT](https://console.aws.amazon.com//dynamodb/home#tables:) **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.

   1. Observe que os valores de **sample\$1time** 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.

   1. Expanda a entrada **device\$1data** para ver os dados que resultaram da consulta da regra.

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

   1. 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
<a name="iot-ddb-rule-trouble"></a>

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 tiver assinado o 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/\$1/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
<a name="iot-ddb-rule-review"></a>

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 tópico da mensagem de entrada e observe o efeito nos dados. *device\$1id* 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: Formatando uma notificação usando uma função AWS Lambda](iot-lambda-rule.md).