

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

# Criação de AWS IoT regras para rotear dados do dispositivo para outros serviços
<a name="iot-rules-tutorial"></a>

Esses tutoriais mostram como criar e testar AWS IoT regras usando algumas das ações de regras mais comuns.

AWS IoT as regras enviam dados de seus dispositivos para outros AWS serviços. Eles recebem mensagens MQTT específicas, formatam os dados nas cargas de mensagens e enviam o resultado para outros AWS serviços.

Recomendamos que você os experimente na ordem em que são mostrados aqui, mesmo que seu objetivo seja criar uma regra que use uma função do Lambda ou algo mais complexo. Os tutoriais são apresentados do básico ao complexo. Eles apresentam novos conceitos de forma incremental para ajudá-lo a aprender os conceitos que você pode usar para criar ações de regras que não têm um tutorial específico.

**nota**  
AWS IoT as regras ajudam você a enviar os dados dos seus dispositivos de IoT para outros AWS serviços. Para fazer isso com sucesso, no entanto, você precisa de um conhecimento prático dos outros serviços para os quais deseja enviar dados. Embora esses tutoriais forneçam as informações necessárias para concluir as tarefas, talvez seja útil descobrir mais sobre os serviços para os quais você deseja enviar dados antes de usá-los em sua solução. Uma explicação detalhada dos outros AWS serviços está fora do escopo desses tutoriais.

**Visão geral do cenário do tutorial**  
O cenário desses tutoriais é o de um dispositivo sensor climático que publica periodicamente os dados. Existem muitos desses dispositivos sensores nesse sistema imaginário. No entanto, os tutoriais desta seção se concentram em um único dispositivo e mostram como você pode acomodar vários sensores.

Os tutoriais desta seção mostram como usar AWS IoT regras para realizar as seguintes tarefas com esse sistema imaginário de dispositivos de sensores climáticos.
+ 

**[Tutorial: como republicar uma mensagem MQTT](iot-repub-rule.md)**  
Este tutorial mostra como republicar uma mensagem MQTT recebida dos sensores meteorológicos como uma mensagem que contém somente a ID do sensor e o valor da temperatura. Ele usa somente serviços AWS IoT Core e demonstra uma consulta SQL simples e como usar o cliente MQTT para testar sua regra.
+ 

**[Tutorial:r Como enviar uma notificação do Amazon SNS](iot-sns-rule.md)**  
Este tutorial mostra como enviar uma mensagem SNS quando um valor de um dispositivo sensor meteorológico excede um valor específico. Ele se baseia nos conceitos apresentados no tutorial anterior e acrescenta como trabalhar com outro AWS serviço, o [Amazon Simple Notification Service](https://docs.aws.amazon.com//sns/latest/dg/welcome.html) (Amazon SNS).

  Se você for novo no Amazon SNS, revise os exercícios de [Conceitos básicos](https://docs.aws.amazon.com//sns/latest/dg/sns-getting-started.html) antes de começar este tutorial. 
+ 

**[Tutorial: Armazenamento de dados do dispositivo em uma tabela do DynamoDB](iot-ddb-rule.md)**  
Este tutorial mostra como armazenar os dados dos dispositivos de sensores climáticos em uma tabela de banco de dados. Ele usa a declaração de consulta de regras e os modelos de substituição para formatar os dados da mensagem para o serviço de destino, o [Amazon DynamoDB](https://docs.aws.amazon.com//amazondynamodb/latest/developerguide/Introduction.html).

  Se você é iniciante no DynamoDB, [revise seus exercícios de introdução](https://docs.aws.amazon.com//amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html) antes de começar este tutorial.
+ 

**[Tutorial: Formatando uma notificação usando uma função AWS Lambda](iot-lambda-rule.md)**  
Este tutorial mostra como chamar uma função do Lambda para reformatar os dados do dispositivo e enviá-los como uma mensagem de texto. Ele adiciona um script Python e funções do AWS SDK em uma [AWS Lambda](https://docs.aws.amazon.com//lambda/latest/dg/welcome.html)função para formatar com os dados da carga útil da mensagem dos dispositivos de sensores meteorológicos e enviar uma mensagem de texto.

  Se você é novato no Lambda, [revise seus exercícios de introdução](https://docs.aws.amazon.com//lambda/latest/dg/getting-started.html) antes de começar este tutorial.

**AWS IoT visão geral das regras**  
Todos esses tutoriais criam AWS IoT regras. 

Para que uma AWS IoT regra envie os dados de um dispositivo para outro AWS serviço, ela usa: 


+ Uma declaração de consulta de regra que consiste em:
  + Uma cláusula SQL SELECT que seleciona e formata os dados da carga útil da mensagem
  + Um filtro de tópico (o objeto FROM na instrução de consulta de regra) que identifica as mensagens a serem usadas
  + Uma declaração condicional opcional (uma cláusula SQL WHERE) que especifica condições específicas sobre as quais agir
+ Pelo menos uma ação de regra

Os dispositivos publicam mensagens em tópicos MQTT. O filtro de tópicos na instrução SQL SELECT identifica os tópicos do MQTT aos quais aplicar a regra. Os campos especificados na instrução SQL SELECT formatam os dados da carga útil da mensagem MQTT recebida para uso pelas ações da regra. Para obter uma lista completa de ações de regra, consulte [Ações de regra da AWS IoT](iot-rule-actions.md)​.

**Topics**
+ [

# Tutorial: como republicar uma mensagem MQTT
](iot-repub-rule.md)
+ [

# Tutorial:r Como enviar uma notificação do Amazon SNS
](iot-sns-rule.md)
+ [

# Tutorial: Armazenamento de dados do dispositivo em uma tabela do DynamoDB
](iot-ddb-rule.md)
+ [

# Tutorial: Formatando uma notificação usando uma função AWS Lambda
](iot-lambda-rule.md)

# Tutorial: como republicar uma mensagem MQTT
<a name="iot-repub-rule"></a>

Este tutorial demonstra como criar uma AWS IoT regra que publica uma mensagem MQTT quando uma mensagem MQTT especificada é recebida. A carga útil da mensagem recebida pode ser modificada pela regra antes de ser publicada. Isso possibilita a criação de mensagens personalizadas para aplicativos específicos sem a necessidade de alterar o dispositivo ou o firmware. Você também pode usar o aspecto de filtragem de uma regra para publicar mensagens somente quando uma condição específica for atendida.

As mensagens republicadas por uma regra agem como mensagens enviadas por qualquer outro AWS IoT dispositivo ou cliente. Os dispositivos podem assinar as mensagens republicadas da mesma forma que assinam qualquer outro tópico de mensagem do MQTT.

**O que você aprenderá neste tutorial:**
+ 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**
+ [

## Analise os tópicos e AWS IoT regras do MQTT
](#iot-repub-rule-mqtt)
+ [

## Etapa 1: criar uma AWS IoT regra para republicar uma mensagem MQTT
](#iot-repub-rule-define)
+ [

## Etapa 2: Testar a nova regra
](#iot-repub-rule-test)
+ [

## Etapa 3: revisar os resultados e as próximas etapas
](#iot-repub-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.

## Analise os tópicos e AWS IoT regras do MQTT
<a name="iot-repub-rule-mqtt"></a>

Antes de falar sobre AWS IoT regras, é útil entender o protocolo MQTT. Em soluções de IoT, o protocolo MQTT oferece algumas vantagens em relação a outros protocolos de comunicação de rede, como HTTP, o que o torna uma escolha popular para uso por dispositivos de IoT. Esta seção analisa os principais aspectos do MQTT conforme eles se aplicam a este tutorial. Para obter informações sobre como o MQTT se compara ao HTTP, consulte [Escolher um protocolo de aplicativo para a comunicação do dispositivo](protocols.md#protocol-selection).

**Protocolo MQTT**  
O protocolo MQTT usa um modelo publish/subscribe de comunicação com seu host. Para enviar dados, os dispositivos publicam mensagens identificadas por tópicos para o agente de AWS IoT mensagens. Para receber mensagens do agente de mensagens, os dispositivos assinam os tópicos que receberão enviando filtros de tópicos nas solicitações de assinatura para o agente de mensagens. O mecanismo de regras AWS IoT recebe mensagens MQTT do agente de mensagens.

**AWS IoT regras**  
AWS IoT as regras consistem em uma instrução de consulta de regras e em uma ou mais ações de regra. Quando o mecanismo de regras AWS IoT recebe uma mensagem MQTT, esses elementos agem na mensagem da seguinte maneira.
+ 

**Declaração de consulta de regra**  
A instrução de consulta da regra descreve os tópicos do MQTT a serem usados, interpreta os dados da carga útil da mensagem e formata os dados conforme descrito por uma instrução SQL semelhante às instruções usadas por bancos de dados SQL populares. O resultado da instrução de consulta são os dados enviados para as ações da regra.
+ 

**Ação da regra**  
Cada ação de regra em uma regra atua nos dados resultantes da declaração de consulta da regra. AWS IoT suporta [muitas ações de regras](iot-rule-actions.md). Neste tutorial, no entanto, você se concentrará na ação da regra [Nova publicação](republish-rule-action.md), que publica o resultado da instrução de consulta como uma mensagem MQTT com um tópico específico.

## Etapa 1: criar uma AWS IoT regra para republicar uma mensagem MQTT
<a name="iot-repub-rule-define"></a>

A AWS IoT regra que você criará neste tutorial se inscreve nos tópicos do `device/device_id/data` MQTT, onde *device\$1id* está o ID do dispositivo que enviou a mensagem. Esses tópicos são descritos por um [filtro de tópicos](topics.md#topicfilters) como`device/+/data`, em que `+` é um caractere curinga que corresponde a qualquer sequência de caracteres entre os dois caracteres de barra.

Quando a regra recebe uma mensagem de um tópico correspondente, ela republica os valores `device_id` e `temperature` e como uma nova mensagem MQTT com o tópico `device/data/temp`. 

Por exemplo, a carga útil de uma mensagem MQTT com o tópico `device/22/data` tem a seguinte aparência:

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

A regra pega o valor `temperature` da carga útil da mensagem e o `device_id` do tópico e os republica como uma mensagem MQTT com o tópico `device/data/temp` tópico e uma carga útil de mensagem com a seguinte aparência:

```
{
  "device_id": "22",
  "temperature": 28
}
```

Com essa regra, dispositivos que precisam apenas do ID do dispositivo e dos dados de temperatura se inscrevem no tópico `device/data/temp` para receber somente essas informações.

**Para criar uma regra que republica uma mensagem MQTT**

1. Abra [o hub de **regras** do AWS IoT console](https://console.aws.amazon.com//iot/home#/rulehub).

1. Em **Regras**, escolha **Criar** e comece a criar sua nova regra.

1. Na parte superior da opção **Criar uma regra**:

   1. Em **Nome**, insira o nome da regra. Para este tutorial, dê o nome **republish\$1temp**.

      Lembre-se de que o nome de uma regra deve ser exclusivo em sua conta e região 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**, descreva a regra. 

      Uma descrição significativa ajuda você a lembrar ao que essa regra se refere 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. Na **declaração de consulta de regra** de **Criar uma regra**:

   1.  Em **Uso da versão SQL**, selecione**2016-03-23**. 

   1. Na caixa de edição **Instrução de consulta de regra**, insira a instrução: 

      ```
      SELECT topic(2) as device_id, temperature FROM 'device/+/data'
      ```

      Esta declaração:
      + Recebe mensagens MQTT com um tópico que corresponda ao filtro de tópicos `device/+/data`.
      + Seleciona o segundo elemento da cadeia de caracteres do tópico e o atribui ao campo `device_id`.
      + Seleciona o campo de valor `temperature` da carga útil da mensagem e o atribui ao campo `temperature`.

1. Em **Definir uma ou mais ações**:

   1. Para abrir a lista de ações de regra para essa regra, escolha **Adicionar ação**.

   1. Em **Selecionar uma ação**, escolha **Republicar uma mensagem em um AWS IoT tópico**.

   1. Na parte inferior da lista de ações, escolha **Configurar ação** para abrir a página de configuração da ação selecionada.

1. Em **Configurar ação**:

   1.  Em **Tópico**, insira **device/data/temp**. Esse é o tópico MQTT da mensagem que essa regra publicará. 

   1.  Em **Qualidade de Serviço**, escolha **0 - A mensagem é entregue zero ou mais vezes**. 

   1.  Em **Escolha ou crie uma função para conceder AWS IoT acesso para realizar essa ação**:

      1.  Selecione **Criar perfil**. A caixa de diálogo **Criar um novo perfil** é aberta. 

      1. Insira um nome que descreva o novo perfil. Neste tutorial, use **republish\$1role**. 

         Quando você cria um novo perfil, as políticas corretas para executar a ação da regra são criadas e anexadas ao novo perfil. Se você alterar o tópico dessa ação de regra ou usar esse perfil em outra ação de regra, deverá atualizar a política desse perfil para autorizar o novo tópico ou ação. Para atualizar uma função existente, escolha **Atualizar função** nesta seção.

      1. Escolha **Criar função** para criar a função e fechar a caixa de diálogo. 

   1. Escolha **Adicionar ação** para adicionar a ação à regra e retornar à página **Criar uma regra**. 

1. A ação **Republicar uma mensagem em um AWS IoT tópico** agora está listada em **Definir uma ou mais ações**.

   No bloco da nova ação, abaixo de **Republicar uma mensagem em um AWS IoT tópico**, você pode ver o tópico no qual sua ação de republicação será publicada.

   Essa é a única ação de regra que você adicionará a essa regra.

1. Em **Criar uma regra**, desça até a parte inferior e escolha **Criar regra** para criar a regra e concluir esta etapa.

## Etapa 2: Testar a nova regra
<a name="iot-repub-rule-test"></a>

Para testar sua nova regra, você usará o cliente MQTT para publicar e assinar as mensagens MQTT usadas por essa regra.

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ê 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 os tópicos de entrada, neste caso, `device/+/data`.

   1. No Cliente MQTT, em **Assinaturas**, selecione **Assine um tópico**.

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

   1. Deixe os demais campos com as configurações padrão.

   1. Escolha **Assinar um tópico**.

      Na coluna **Assinaturas**, em **Publicar em um tópico **, **device/\$1/data** é exibido. 

1. Assine o tópico que sua regra publicará: `device/data/temp`.

   1. Em **Assinaturas**, escolha **Assinar um tópico** novamente e, em **Tópico de assinatura**, insira o tópico da mensagem republicada, **device/data/temp**.

   1. Deixe os demais campos com as configurações padrão.

   1. Escolha **Assinar um tópico**.

      Na coluna **Assinaturas**, em **dispositivo/\$1/dado**, **device/data/temp** é exibido. 

1. 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, em **Assinaturas**, selecione **Publicar em um tópico**.

   1. No campo **Publicar**, insira o nome do tópico de entrada, **device/22/data**.

   1. Copie os dados de amostra mostrados aqui e, na caixa de edição abaixo do nome do tópico, cole os dados de amostra.

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

   1. Para enviar sua mensagem MQTT, escolha **Publicar no tópico**.

1. Revise as mensagens enviadas.

   1. No cliente MQTT, em **Assinaturas**, há um ponto verde ao lado dos dois tópicos nos quais você se inscreveu anteriormente.

      Os pontos verdes indicam que uma ou mais mensagens novas foram recebidas desde a última vez que você as viu.

   1. Em **Assinaturas**, escolha **dispositivo/\$1/dado** para verificar se a carga útil da mensagem corresponde ao que você acabou de publicar e tem a seguinte aparência:

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

   1. Em **Assinaturas**, escolha verificar se **device/data/temp**a carga útil da mensagem republicada tem a seguinte aparência:

      ```
      {
        "device_id": "22",  
        "temperature": 28
      }
      ```

      Observe que o valor `device_id` valor é uma string citada e o valor `temperature` é numérico. Isso ocorre porque a [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-function-topic](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-function-topic)função extraiu a string do nome do tópico da mensagem de entrada, enquanto o valor `temperature` usa o valor numérico da carga útil da mensagem de entrada.

      Se você quiser transformar o valor `device_id` em um valor numérico, substitua `topic(2)` na instrução de consulta de regra por:

      ```
      cast(topic(2) AS DECIMAL)
      ```

      Observe que converter o valor `topic(2)` em um valor numérico só funcionará se essa parte do tópico contiver somente caracteres numéricos.

1. Se você perceber que a mensagem correta foi publicada no **device/data/temp**tópico, sua regra funcionou. Veja o que mais você pode aprender sobre a ação da regra de republicação na próxima seção.

   Se você não ver que a mensagem correta foi publicada no **dispositivo/\$1/data** ou nos **device/data/temp**tópicos, consulte as dicas de solução de problemas.

### Solução de problemas da regra de republicação de mensagens
<a name="iot-repub-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ê sua mensagem republicada no cliente MQTT**  
Para que sua regra funcione, ela deve ter a política correta que a autorize a receber e republicar uma mensagem e deve receber a mensagem.

**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 o tópico da mensagem republicada na ação da regra**  
O tópico no qual a ação da regra de republicação publica a nova mensagem deve corresponder ao tópico no qual você fez a assinatura no cliente MQTT.

    Abra a regra que você criou no console e verifique o tópico no qual a ação da regra republicará a mensagem.
  + 

**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 republicá-los são específicas para os tópicos usados. Se você alterar o tópico usado para republicar os dados da mensagem, deverá atualizar a função da ação de regra para atualizar sua política conforme o tópico atual.

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

## Etapa 3: revisar os resultados e as próximas etapas
<a name="iot-repub-rule-review"></a>

**Neste tutorial**
+ Você usou uma consulta SQL simples e algumas funções em uma instrução de consulta de regra para produzir uma nova mensagem MQTT.
+ Você criou uma regra que republicou essa nova mensagem.
+ Você usou o cliente MQTT para testar sua AWS IoT regra.

**Próximas etapas**  
Depois de republicar algumas mensagens com essa regra, experimente usá-la para ver como a alteração de alguns aspectos do tutorial afeta a mensagem republicada. Aqui estão algumas ideias para você começar.
+ Altere o *device\$1id* tópico da mensagem de entrada e observe o efeito na carga útil da mensagem republicada.
+ Altere os campos selecionados na instrução de consulta de regras e observe o efeito na carga útil da mensagem republicada.
+ Experimente o próximo tutorial desta série e aprenda como [Tutorial:r Como enviar uma notificação do Amazon SNS](iot-sns-rule.md).

A ação de regra Republicar usada neste tutorial também pode ajudá-lo a depurar instruções de consulta de regras. Por exemplo, você pode adicionar essa ação a uma regra para ver como sua instrução de consulta de regra está formatando os dados usados por suas ações de regra.

# Tutorial:r Como enviar uma notificação do Amazon SNS
<a name="iot-sns-rule"></a>

Este tutorial demonstra como criar uma AWS IoT regra que envia dados de mensagens MQTT para um tópico do Amazon SNS para que possam ser enviados como uma mensagem de texto SMS. 

Neste tutorial, você cria uma regra que envia dados de mensagens de um sensor meteorológico para todos os assinantes de um tópico do Amazon SNS, sempre que a temperatura exceder o valor definido na regra. A regra detecta quando a temperatura relatada excede o valor definido pela regra e, em seguida, cria uma nova carga útil de mensagem que inclui somente a ID do dispositivo, a temperatura relatada e o limite de temperatura que foi excedido. A regra envia a nova carga útil da mensagem como um documento JSON para um tópico do SNS, que notifica todos os assinantes do tópico do SNS.

**O que você aprenderá neste tutorial:**
+ Como criar e testar uma notificação do Amazon SNS
+ Como chamar uma notificação do Amazon SNS a partir de 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 um tópico do Amazon SNS que envia uma mensagem de texto SMS
](#iot-sns-rule-create-sns-topic)
+ [

## Etapa 2: criar uma AWS IoT regra para enviar a mensagem de texto
](#iot-sns-rule-create-rule)
+ [

## Etapa 3: testar a AWS IoT regra e a notificação do Amazon SNS
](#iot-sns-rule-test-rule)
+ [

## Etapa 4: revisar os resultados e as próximas etapas
](#iot-sns-rule-review-results)

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

**Revisado o [Amazon Simple Notification Service](https://docs.aws.amazon.com//sns/latest/dg/welcome.html)**  
Se você nunca usou o Amazon SNS, consulte a opção [Configuração do acesso para o Amazon SNS](https://docs.aws.amazon.com//sns/latest/dg/sns-setting-up.html). Se você já concluiu outros AWS IoT tutoriais, você já Conta da AWS deve estar configurado corretamente.

## Etapa 1: criar um tópico do Amazon SNS que envia uma mensagem de texto SMS
<a name="iot-sns-rule-create-sns-topic"></a>

Esse procedimento explica como criar o tópico do Amazon SNS para o qual seu sensor meteorológico pode enviar dados de mensagens. O tópico do Amazon SNS então notificará todos os assinantes por meio de uma mensagem de texto SMS sobre o limite de temperatura que foi excedido.

**Para criar um tópico do Amazon SNS que envia uma mensagem de texto SMS**

1. **Crie um tópico do Amazon SNS**.

   1. Faça login no console [do Amazon SNS](https://console.aws.amazon.com//sns/home).

   1. No painel de navegação à esquerda, selecione **Tópicos**.

   1. Na página **Tópicos**, escolha **Criar tópico**.

   1. Em **Detalhes**, escolha o tipo **Padrão**. Por padrão, o console cria um tópico FIFO.

   1. Em **Nome**, insira o nome do tópico do SNS. Para este tutorial, insira **high\$1temp\$1notice**.

   1. Role até o final do formulário e escolha **Criar tópico**.

      O console abrirá a página **Detalhes** do tópico.

1. **Crie uma assinatura do Amazon SNS.**
**nota**  
O número de telefone que você usa nesta assinatura pode incorrer em cobranças de mensagens de texto a partir das mensagens que você enviará neste tutorial.

   1. Na página de detalhes do tópico **high\$1temp\$1notice**, selecione **Criar assinatura**.

   1. Em **Criar assinatura**, na seção **Detalhes**, na lista **Protocolo**, escolha **SMS**.

   1. No **Endpoint**, insira o número de um telefone que pode receber mensagens de texto. Certifique-se de inseri-lo de forma que comece com um `+`, inclua o código do país e da área e não inclua nenhum outro caractere de pontuação.

   1. Selecione **Criar assinatura**.

1. **Teste a notificação do Amazon SNS.**

   1. No [console Amazon SNS ](https://console.aws.amazon.com//sns/home), no painel de navegação esquerdo, selecione **Tópicos**.

   1. Para abrir a página de detalhes do tópico, em **Tópicos**, na lista de tópicos, escolha **high\$1temp\$1notice**.

   1. Para abrir a página **Publicar mensagem no tópico**, na página de detalhes **high\$1temp\$1notice**, selecione **Publicar mensagem**.

   1. Em **Publicar mensagem no tópico**, na seção **Corpo da mensagem**, em **Corpo da mensagem a ser enviada ao endpoint**, insira uma mensagem curta.

   1. Navegue para baixo até o final da página e selecione **Publicar mensagem**.

   1. No telefone com o número usado anteriormente ao criar a assinatura, confirme se a mensagem foi recebida.

   Se você não recebeu a mensagem de teste, verifique novamente o número de telefone e as configurações do seu telefone.

   Certifique-se de poder publicar mensagens de teste no [console do Amazon SNS](https://console.aws.amazon.com//sns/home) antes de continuar o tutorial.

## Etapa 2: criar uma AWS IoT regra para enviar a mensagem de texto
<a name="iot-sns-rule-create-rule"></a>

A AWS IoT regra que você criará neste tutorial se inscreve nos tópicos do `device/device_id/data` MQTT, onde `device_id` está o ID do dispositivo que enviou a mensagem. Esses tópicos são descritos em um filtro de tópicos como `device/+/data`, em que `+` é um caractere curinga que corresponde a qualquer sequência de caracteres entre os dois caracteres de barra. Essa regra também testa o valor do campo `temperature` na carga útil da mensagem.

Quando a regra recebe uma mensagem de um tópico correspondente, ela pega o valor `device_id` do nome do tópico, o valor `temperature` da carga útil da mensagem, adiciona um valor constante ao limite que está testando e envia esses valores como um documento JSON para um tópico de notificação do Amazon SNS. 

 Por exemplo, uma mensagem MQTT do dispositivo de sensor meteorológico número 32 usa o tópico `device/32/data` e tem uma carga de mensagem semelhante a esta: 

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

A declaração de consulta de regra da regra pega o valor `temperature` da carga útil da mensagem, `device_id` do nome do tópico e adiciona o valor `max_temperature` constante para enviar uma carga útil de mensagem semelhante a esta para o tópico do Amazon SNS: 

```
{
  "device_id": "32",
  "reported_temperature": 38,
  "max_temperature": 30
}
```

**Para criar uma AWS IoT regra para detectar um valor de temperatura acima do limite e criar os dados a serem enviados ao tópico do Amazon SNS**

1. Abra [o hub de **regras** do AWS IoT console](https://console.aws.amazon.com//iot/home#/rulehub).

1. Se essa for sua primeira regra, escolha **Criar** ou **Criar uma regra**.

1. Em **Criar uma regra**:

   1. Em **Nome**, insira **temp\$1limit\$1notify**.

      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 de sublinhado nesse nome para separar as palavras no nome da regra. 

   1. Em **Descrição**, 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. Na **declaração de consulta de regra** de **Criar uma regra**:

   1.  Em **Uso da versão SQL**, selecione **23-03-2016**. 

   1. Na caixa de edição **Instrução de consulta de regra**, insira a instrução: 

      ```
      SELECT topic(2) as device_id, 
          temperature as reported_temperature, 
          30 as max_temperature 
        FROM 'device/+/data' 
        WHERE temperature > 30
      ```

      Esta declaração:
      + Recebe mensagens MQTT com um tópico que corresponda ao filtro de tópicos `device/+/data` e que tenha um valor `temperature` maior que 30. 
      + Seleciona o segundo elemento da cadeia de caracteres do tópico e o atribui ao campo `device_id`.
      + Seleciona o campo `temperature` de valor da carga útil da mensagem e o atribui ao campo `reported_temperature`. 
      + Cria um valor constante `30` para representar o valor limite e o atribui ao campo `max_temperature`. 

1. Para abrir a lista de ações de regra para essa regra, em **Definir uma ou mais ações**, escolha **Adicionar ação**.

1. Em **Selecionar uma ação**, selecione **Enviar uma mensagem como uma notificação por push do SNS**.

1. Para abrir a página de configuração da ação selecionada, na parte inferior da lista de ações, escolha **Configurar ação**. 

1. Em **Configurar ação**:

   1. Em **Destino do SNS**, escolha **Selecionar**, encontre seu tópico do SNS chamado **high\$1temp\$1notice** e escolha **Selecionar**.

   1. Em **Formato de mensagem**, selecione **RAW**.

   1. Em **Escolher ou criar uma função para conceder AWS IoT acesso para realizar essa ação**, escolha **Criar função**.

   1. Em **Criar uma nova função**, em **Nome**, insira um nome exclusivo para a nova função. Para este tutorial, use **sns\$1rule\$1role**.

   1. Selecione **Criar perfil**.

   Se estiver repetindo este tutorial ou reutilizando uma função existente, escolha **Atualizar função** antes de continuar. Isso atualiza o documento de política da função para funcionar com o destino do SNS.

1. Escolha **Adicionar ação** e retorne à página **Criar uma regra**.

   No quadro da nova ação, abaixo de **Enviar uma mensagem como notificação push do SNS**, você pode ver o tópico do SNS que sua regra vai chamar. 

   Essa é a única ação de regra que você adicionará a essa regra.

1. Para criar a regra e concluir essa etapa, em **Criar uma regra**, desloque o cursor para baixo até a parte inferior e escolha **Criar regra**.

## Etapa 3: testar a AWS IoT regra e a notificação do Amazon SNS
<a name="iot-sns-rule-test-rule"></a>

Para testar sua nova regra, você usará o cliente MQTT para publicar e assinar as mensagens MQTT usadas por essa regra.

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. Se você deixar o cliente MQTT para ir para outra página no console, ele não reterá nenhuma assinatura ou logs de mensagens.

**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 os tópicos de entrada, neste caso, `device/+/data`.

   1. No Cliente MQTT, em **Assinaturas**, selecione **Assine um tópico**.

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

   1. Deixe os demais campos com as configurações padrão.

   1. Escolha **Assinar um tópico**.

      Na coluna **Assinaturas**, em **Publicar em um tópico**, **device/\$1/data** é exibido. 

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

   1. No cliente MQTT, em **Assinaturas**, selecione **Publicar em um tópico**.

   1. No campo **Publicar**, insira o nome do tópico de entrada, **device/32/data**.

   1. Copie os dados de amostra mostrados aqui e, na caixa de edição abaixo do nome do tópico, cole os dados de amostra.

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

   1. Escolha **Publicar em um tópico** para publicar a mensagem MQTT.

1. Confirme se a mensagem de texto foi enviada.

   1. No cliente MQTT, em **Assinaturas**, há um ponto verde ao lado do tópico assinado anteriormente.

      O ponto verde indica que uma ou mais mensagens novas foram recebidas desde a última vez que você as visualizou.

   1. Em **Assinaturas**, escolha **dispositivo/\$1/dado** para verificar se a carga útil da mensagem corresponde ao que você acabou de publicar e tem a seguinte aparência:

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

   1. Verifique o telefone utilizado para assinar o tópico do SNS e confirme se o conteúdo da carga útil da mensagem tem a seguinte aparência:

      ```
      {"device_id":"32","reported_temperature":38,"max_temperature":30}
      ```

      Observe que o valor `device_id` valor é uma string citada e o valor `temperature` é numérico. Isso ocorre porque a [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-function-topic](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-function-topic)função extraiu a string do nome do tópico da mensagem de entrada, enquanto o valor `temperature` usa o valor numérico da carga útil da mensagem de entrada.

      Se você quiser transformar o valor `device_id` em um valor numérico, substitua `topic(2)` na instrução de consulta de regra por:

      ```
      cast(topic(2) AS DECIMAL)
      ```

      Observe que converter o valor `topic(2)` em um valor numérico `DECIMAL` só funcionará se essa parte do tópico contiver somente caracteres numéricos.

1. Tente enviar uma mensagem MQTT na qual a temperatura não exceda o limite.

   1. No cliente MQTT, em **Assinaturas**, selecione **Publicar em um tópico**.

   1. No campo **Publicar**, insira o nome do tópico de entrada, **device/33/data**.

   1. Copie os dados de amostra mostrados aqui e, na caixa de edição abaixo do nome do tópico, cole os dados de amostra.

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

   1. Para enviar sua mensagem MQTT, escolha **Publicar no tópico**.

   Você deve visualizar a mensagem que enviou na assinatura **device/\$1/data**. No entanto, como o valor da temperatura está abaixo da temperatura máxima na consulta da regra, você não deve receber uma mensagem de texto.

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

### Solução de problemas da regra de mensagens do SNS
<a name="iot-sns-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. 
+ 

**Se você não receber uma mensagem SMS**  
Para que sua regra funcione, ela deve ter a política correta que a autorize a receber uma mensagem e enviar uma notificação do SNS, e ela deve receber a mensagem.

**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 se o valor da temperatura na carga útil da mensagem excede o limite de teste**  
Se o valor da temperatura for menor ou igual a 30, conforme definido na instrução de consulta da regra, a regra não executará nenhuma das ações.
  + 

**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 o tópico da mensagem republicada na ação da regra**  
O tópico no qual a ação da regra de republicação publica a nova mensagem deve corresponder ao tópico no qual você fez a assinatura no cliente MQTT.

    Abra a regra que você criou no console e verifique o tópico no qual a ação da regra republicará a mensagem.
  + 

**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 republicá-los são específicas para os tópicos usados. Se você alterar o tópico usado para republicar os dados da mensagem, deverá atualizar a função da ação de regra para atualizar sua política conforme o tópico atual.

    Se você suspeitar que esse é o problema, edite a ação da regra de republicação e crie uma nova função. 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-sns-rule-review-results"></a>

**Neste tutorial:**
+ Você criou e testou um tópico e uma assinatura de notificação do Amazon SNS.
+ Você usou uma consulta SQL simples e funções em uma consulta de regra para criar uma nova mensagem para sua notificação.
+ Você criou uma AWS IoT regra para enviar uma notificação do Amazon SNS usando sua carga de mensagem personalizada.
+ Você usou o cliente MQTT para testar sua AWS IoT regra.

**Próximas etapas**  
Depois de enviar algumas mensagens de texto com essa regra, experimente usá-la para ver como a alteração de alguns aspectos do tutorial afeta a mensagem e quando ela é enviada. Aqui estão algumas ideias para você começar.
+ Altere o *device\$1id* tópico da mensagem de entrada e observe o efeito no conteúdo da mensagem de texto.
+ Altere os campos selecionados na consulta da regra e observe o efeito no conteúdo da mensagem de texto.
+ Altere o teste na consulta da regra para testar uma temperatura mínima em vez de uma temperatura máxima. Lembre-se de mudar o nome de `max_temperature`\$1
+ Adicione uma ação de regra de republicação para enviar uma mensagem MQTT quando uma notificação do SNS for enviada.
+ Experimente o próximo tutorial desta série e aprenda como [Tutorial: Armazenamento de dados do dispositivo em uma tabela do DynamoDB](iot-ddb-rule.md).

# 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).

# Tutorial: Formatando uma notificação usando uma função AWS Lambda
<a name="iot-lambda-rule"></a>

Este tutorial demonstra como enviar dados da mensagem MQTT para uma AWS Lambda ação para formatação e envio para outro serviço. AWS Neste tutorial, a AWS Lambda ação usa o AWS SDK para enviar a mensagem formatada para o tópico do Amazon SNS que você criou no tutorial sobre como fazer isso. [Tutorial:r Como enviar uma notificação do Amazon SNS](iot-sns-rule.md)

No tutorial sobre como fazer isso[Tutorial:r Como enviar uma notificação do Amazon SNS](iot-sns-rule.md), o documento JSON resultante da instrução de consulta da regra foi enviado como o corpo da mensagem de texto. O resultado foi uma mensagem de texto parecida com o seguinte exemplo:

```
{"device_id":"32","reported_temperature":38,"max_temperature":30}
```

Neste tutorial, você usará uma ação de AWS Lambda regra para chamar uma AWS Lambda função que formata os dados da instrução de consulta de regra em um formato mais amigável, como este exemplo:

```
Device 32 reports a temperature of 38, which exceeds the limit of 30.
```

A AWS Lambda função que você criará neste tutorial formata a string da mensagem usando os dados da declaração de consulta de regra e chama a função de [publicação do SNS](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sns.html#SNS.Client.publish) do AWS SDK para criar a notificação.

**O que você aprenderá neste tutorial**
+ Como criar e testar uma AWS Lambda função
+ Como usar o AWS SDK em uma AWS Lambda função para publicar uma notificação do Amazon SNS
+ 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 45 minutos para ser concluído.

**Topics**
+ [

## Etapa 1: criar uma AWS Lambda função que envie uma mensagem de texto
](#iot-lambda-rule-create-lambda)
+ [

## Etapa 2: criar uma AWS IoT regra com uma ação de AWS Lambda regra
](#iot-lambda-rule-create-rule)
+ [

## Etapa 3: testar a AWS IoT regra e a ação da AWS Lambda regra
](#iot-lambda-rule-test-rule)
+ [

## Etapa 4: revisar os resultados e as próximas etapas
](#iot-lambda-rule-next-steps)

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

**Concluídos os outros tutoriais de regras desta seção**  
Este tutorial requer o tópico de notificação do SNS que você criou no tutorial sobre como fazer isso [Tutorial:r Como enviar uma notificação do Amazon SNS](iot-sns-rule.md). Também pressupõe que você tenha concluído os outros tutoriais relacionados às regras nesta seção.
+ 

**Revisou a visão geral do [AWS Lambda](https://docs.aws.amazon.com//lambda/latest/dg/welcome.html)**  
Se você nunca usou AWS Lambda antes, revise [AWS Lambda](https://docs.aws.amazon.com//lambda/latest/dg/welcome.html)e [Comece a usar o Lambda](https://docs.aws.amazon.com//lambda/latest/dg/getting-started.html) para aprender seus termos e conceitos.

## Etapa 1: criar uma AWS Lambda função que envie uma mensagem de texto
<a name="iot-lambda-rule-create-lambda"></a>

A AWS Lambda função neste tutorial recebe o resultado da declaração de consulta da regra, insere os elementos em uma string de texto e envia a string resultante para o Amazon SNS como mensagem em uma notificação.

Ao contrário do tutorial sobre como[Tutorial:r Como enviar uma notificação do Amazon SNS](iot-sns-rule.md), que usou uma ação de AWS IoT regra para enviar a notificação, este tutorial envia a notificação da função Lambda usando uma função do AWS SDK. No entanto, o tópico real de notificação do Amazon SNS usado neste tutorial é o mesmo que você usou no tutorial sobre como fazer isso [Tutorial:r Como enviar uma notificação do Amazon SNS](iot-sns-rule.md).

**Para criar uma AWS Lambda função que envia uma mensagem de texto**

1. Crie uma nova AWS Lambda função.

   1. No [AWS Lambda console](https://console.aws.amazon.com//lambda/home), selecione **Criar função**.

   1. Em **Criar função**, selecione **Usar um esquema**.

      Pesquise e selecione o esquema **hello-world-python** e, em seguida, escolha **Configurar**.

   1. Em **Informações básicas**:

      1. Em **Nome do perfil**, insira o nome da função, **format-high-temp-notification**. 

      1. Em **Função de execução**, escolha **Criar uma nova função a partir de modelos de AWS política**.

      1. No campo Nome do perfil, digite o nome da nova função, **format-high-temp-notification-role**.

      1. Em **Modelos de política - *opcional***, pesquise e selecione a política ** de publicação do Amazon SNS**.

      1. Escolha a opção **Criar função**.

1. Modifique o código do esquema para formatar e enviar uma notificação do Amazon SNS.

   1. Depois de criar sua função, você deverá ver a página de **format-high-temp-notification**detalhes. Caso contrário, abra-a na página [Função **do Lambda**](https://console.aws.amazon.com//lambda/home#/functions)

   1. Na página de **format-high-temp-notification**detalhes, escolha a guia **Configuração** e vá até o painel **Código da função**.

   1. Na janela **Código da função**, no painel **Ambiente**, escolha o arquivo Python, `lambda_function.py`.

   1. Na janela **Código da função**, exclua todo o código original do programa do esquema e substitua-o por esse código.

      ```
      import boto3
      #
      #   expects event parameter to contain:
      #   {
      #       "device_id": "32",
      #       "reported_temperature": 38,
      #       "max_temperature": 30,
      #       "notify_topic_arn": "arn:aws:sns:us-east-1:57EXAMPLE833:high_temp_notice"
      #   }
      # 
      #   sends a plain text string to be used in a text message
      #
      #      "Device {0} reports a temperature of {1}, which exceeds the limit of {2}."
      #   
      #   where:
      #       {0} is the device_id value
      #       {1} is the reported_temperature value
      #       {2} is the max_temperature value
      #
      def lambda_handler(event, context):
      
          # Create an SNS client to send notification
          sns = boto3.client('sns')
      
          # Format text message from data
          message_text = "Device {0} reports a temperature of {1}, which exceeds the limit of {2}.".format(
                  str(event['device_id']),
                  str(event['reported_temperature']),
                  str(event['max_temperature'])
              )
      
          # Publish the formatted message
          response = sns.publish(
                  TopicArn = event['notify_topic_arn'],
                  Message = message_text
              )
      
          return response
      ```

   1. Escolha **Implantar**.

1. Em uma nova janela, consulte o nome do recurso da Amazon (ARN) do tópico do Amazon SNS no tutorial sobre como fazer isso [Tutorial:r Como enviar uma notificação do Amazon SNS](iot-sns-rule.md).

   1. Em uma nova janela, abra o console [página Tópicos no console do Amazon SNS](https://console.aws.amazon.com//sns/v3/home#/topics). 

   1. Na página **Tópicos**, encontre o tópico de notificação **high\$1temp\$1notice** na lista de tópicos do Amazon SNS.

   1. Encontre o **ARN** do tópico de notificação **high\$1temp\$1notice** para usar na próxima etapa.

1. Crie um caso de teste para sua função do Lambda.

   1. Na página [Lambda **Functions**](https://console.aws.amazon.com//lambda/home#/functions) do console, na página de **format-high-temp-notification**detalhes, escolha **Selecionar um evento de teste** no canto superior direito da página (mesmo que pareça desativado) e escolha **Configurar eventos de teste**.

   1. Em **Selecionar um evento de teste**, escolha **Configurar evento de teste**.

   1. Em **Nome do evento**, insira **SampleRuleOutput**.

   1. No editor JSON abaixo do **Nome do evento**, cole esse exemplo de documento JSON. Esse é um exemplo do que sua AWS IoT regra enviará para a função Lambda.

      ```
      {
        "device_id": "32",
        "reported_temperature": 38,
        "max_temperature": 30,
        "notify_topic_arn": "arn:aws:sns:us-east-1:57EXAMPLE833:high_temp_notice"
      }
      ```

   1. Consulte a janela que tem o **ARN** do tópico de notificação **high\$1temp\$1notice** e copie o valor do ARN.

   1. Substitua o valor `notify_topic_arn` no editor JSON pelo ARN do seu tópico de notificação.

      Mantenha essa janela aberta para que você possa usar esse valor de ARN novamente ao criar a regra AWS IoT .

   1. Escolha **Criar**.

1. Teste a função com dados de amostra.

   1. Na página de **format-high-temp-notification**detalhes, no canto superior direito da página, confirme que **SampleRuleOutput**aparece ao lado do botão **Testar**. Caso contrário, selecione-o na lista de eventos de teste disponíveis.

   1. Para enviar a mensagem de saída da regra de amostra para a função, escolha **Testar**.

Se a função e a notificação funcionarem, você receberá uma mensagem de texto no telefone de assinatura da notificação.

Se você não recebeu uma mensagem de texto no telefone, verifique o resultado da operação. No painel **Código da função**, na guia **Resultado da execução**, revise a resposta para encontrar quaisquer erros ocorridos. Não prossiga para a próxima etapa até que sua função possa enviar a notificação para seu telefone.

## Etapa 2: criar uma AWS IoT regra com uma ação de AWS Lambda regra
<a name="iot-lambda-rule-create-rule"></a>

Nesta etapa, você usará a instrução de consulta de regras para formatar os dados do dispositivo de sensor climático imaginário para enviar para uma função do Lambda, que formatará e enviará uma mensagem de texto.

Um exemplo de carga útil de mensagem recebida dos dispositivos meteorológicos tem a seguinte aparência:

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

Nessa regra, você usará a instrução de consulta de regras para criar uma carga útil de mensagem para a função do Lambda que se parece com esta:

```
{
  "device_id": "32",
  "reported_temperature": 38,
  "max_temperature": 30,
  "notify_topic_arn": "arn:aws:sns:us-east-1:57EXAMPLE833:high_temp_notice"
}
```

Ela contém todas as informações que a função do Lambda precisa para formatar e enviar a mensagem de texto correta.

**Para criar a AWS IoT regra para chamar uma função Lambda**

1. Abra o [hub de **regras** do AWS IoT console](https://console.aws.amazon.com//iot/home#/rulehub).

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

1. Na parte superior da opção **Criar uma regra**:

   1. Em **Nome**, insira o nome da regra, **wx\$1friendly\$1text**.

      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**, 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. Na **declaração de consulta de regra** de **Criar uma regra**:

   1.  Em **Uso da versão SQL**, selecione**2016-03-23**. 

   1. Na caixa de edição **Instrução de consulta de regra**, insira a instrução: 

      ```
      SELECT 
        cast(topic(2) AS DECIMAL) as device_id, 
        temperature as reported_temperature,
        30 as max_temperature,
        'arn:aws:sns:us-east-1:57EXAMPLE833:high_temp_notice' as notify_topic_arn
      FROM 'device/+/data' WHERE temperature > 30
      ```

      Esta declaração:
      + Recebe mensagens MQTT com um tópico que corresponda ao filtro de tópicos `device/+/data` e que tenha um valor `temperature` maior que 30. 
      + Seleciona o segundo elemento da cadeia de caracteres do tópico, converte-o em um número decimal e o atribui ao campo `device_id`.
      + Seleciona o valor do campo `temperature` na carga da mensagem e o atribui ao campo `reported_temperature`. 
      + Cria um valor constante, `30`, para representar o valor limite e o atribui ao campo `max_temperature`. 
      + Cria um valor constante para o campo `notify_topic_arn`.

   1. Consulte a janela que tem o **ARN** do tópico de notificação **high\$1temp\$1notice** e copie o valor do ARN.

   1. Substitua o valor do ARN (*arn:aws:sns:us-east-1:57EXAMPLE833:high\$1temp\$1notice*) no editor de instruções de consulta de regras pelo ARN do seu tópico de notificação.

1. Em **Definir uma ou mais ações**:

   1. Para abrir a lista de ações de regra para essa regra, escolha **Adicionar ação**.

   1. Em **Selecionar uma ação**, escolha **Enviar uma mensagem para uma função do Lambda**.

   1. Para abrir a página de configuração da ação selecionada, na parte inferior da lista de ações, escolha **Configurar ação**.

1. Em **Configurar ação**:

   1. Em **Nome do perfil**, escolha **Selecionar**.

   1. Selecione **format-high-temp-notification**.

   1. Na parte inferior da opção **Configurar ação**, escolha **Adicionar ação**.

   1. Para criar a regra, na parte inferior da opção **Criar uma regra**, escolha **Criar regra**.

## Etapa 3: testar a AWS IoT regra e a ação da AWS Lambda regra
<a name="iot-lambda-rule-test-rule"></a>

Para testar sua nova regra, você usará o cliente MQTT para publicar e assinar as mensagens MQTT usadas por essa regra.

Abra o [cliente MQTT no AWS IoT console](https://console.aws.amazon.com//iot/home#/test) em uma nova janela. Agora você pode editar a regra sem perder a configuração do cliente MQTT. Se você deixar o cliente MQTT para ir para outra página no console, perderá as assinaturas ou registros de mensagens.

**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 os tópicos de entrada, neste caso, `device/+/data`.

   1. No Cliente MQTT, em **Assinaturas**, selecione **Assine um tópico**.

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

   1. Deixe os demais campos com as configurações padrão.

   1. Escolha **Assinar um tópico**.

      Na coluna **Assinaturas**, em **Publicar em um tópico**, **device/\$1/data** é exibido. 

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

   1. No cliente MQTT, em **Assinaturas**, selecione **Publicar em um tópico**.

   1. No campo **Publicar**, insira o nome do tópico de entrada, **device/32/data**.

   1. Copie os dados de amostra mostrados aqui e, na caixa de edição abaixo do nome do tópico, cole os dados de amostra.

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

   1. Escolha **Publicar em um tópico** para publicar sua mensagem MQTT.

1. Confirme se a mensagem de texto foi enviada.

   1. No cliente MQTT, em **Assinaturas**, há um ponto verde ao lado do tópico assinado anteriormente.

      O ponto verde indica que uma ou mais mensagens novas foram recebidas desde a última vez que você as visualizou.

   1. Em **Assinaturas**, escolha **dispositivo/\$1/dado** para verificar se a carga útil da mensagem corresponde ao que você acabou de publicar e tem a seguinte aparência:

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

   1. Verifique o telefone utilizado para assinar o tópico do SNS e confirme se o conteúdo da carga útil da mensagem tem a seguinte aparência:

      ```
      Device 32 reports a temperature of 38, which exceeds the limit of 30.
      ```

      Se você alterar o elemento ID do tópico no tópico da mensagem, lembre-se de que converter o valor `topic(2)` em um valor numérico só funcionará se esse elemento no tópico da mensagem contiver somente caracteres numéricos.

1. Tente enviar uma mensagem MQTT na qual a temperatura não exceda o limite.

   1. No cliente MQTT, em **Assinaturas**, selecione **Publicar em um tópico**.

   1. No campo **Publicar**, insira o nome do tópico de entrada, **device/33/data**.

   1. Copie os dados de amostra mostrados aqui e, na caixa de edição abaixo do nome do tópico, cole os dados de amostra.

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

   1. Para enviar sua mensagem MQTT, escolha **Publicar no tópico**.

   Você deve ver a mensagem que enviou na assinatura **device/\$1/data**; no entanto, como o valor da temperatura está abaixo da temperatura máxima na consulta da regra, você não deve receber uma mensagem de texto.

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

### Solução de problemas com sua AWS Lambda regra e notificação
<a name="iot-lambda-rule-troubleshoot"></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/32/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. 
+ 

**Se você não receber uma mensagem SMS**  
Para que sua regra funcione, ela deve ter a política correta que a autorize a receber uma mensagem e enviar uma notificação do SNS, e ela deve receber a mensagem.

**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 se o valor da temperatura na carga útil da mensagem excede o limite de teste**  
Se o valor da temperatura for menor ou igual a 30, conforme definido na instrução de consulta da regra, a regra não executará nenhuma das ações.
  + 

**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 a notificação do Amazon SNS**  
Em[Etapa 1: criar um tópico do Amazon SNS que envia uma mensagem de texto SMS](iot-sns-rule.md#iot-sns-rule-create-sns-topic), consulte a etapa 3 que descreve como testar a notificação do Amazon SNS e testar a notificação para garantir que a notificação funcione.
  + 

**Verifique a função do Lambda**  
Em [Etapa 1: criar uma AWS Lambda função que envie uma mensagem de texto](#iot-lambda-rule-create-lambda), consulte a etapa 5 que descreve como testar a função do Lambda usando dados de teste e testar a função do Lambda.
  + 

**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 republicá-los são específicas para os tópicos usados. Se você alterar o tópico usado para republicar os dados da mensagem, deverá atualizar a função da ação de regra para atualizar sua política conforme o tópico atual.

    Se você suspeitar que esse é o problema, edite a ação da regra de republicação e crie uma nova função. 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-lambda-rule-next-steps"></a>

**Neste tutorial:**
+ Você criou uma AWS IoT regra para chamar uma função Lambda que enviou uma notificação do Amazon SNS usando sua carga de mensagem personalizada.
+ Você usou uma consulta SQL simples e funções em uma instrução de consulta de regra para criar uma nova carga de mensagem para a função do Lambda.
+ Você usou o cliente MQTT para testar sua AWS IoT regra.

**Próximas etapas**  
Depois de enviar algumas mensagens de texto com essa regra, experimente usá-la para ver como a alteração de alguns aspectos do tutorial afeta a mensagem e quando ela é enviada. Aqui estão algumas ideias para você começar.
+ Altere o *device\$1id* tópico da mensagem de entrada e observe o efeito no conteúdo da mensagem de texto.
+ Altere os campos selecionados na instrução de consulta de regras, atualize a função do Lambda para usá-los em uma nova mensagem e observe o efeito no conteúdo da mensagem de texto.
+ Altere o teste na consulta da regra para testar uma temperatura mínima em vez de uma temperatura máxima. Atualize a função do Lambda para formatar uma nova mensagem e lembre-se de alterar o nome de `max_temperature`.
+ Para saber mais sobre como encontrar erros que possam ocorrer durante o desenvolvimento e o uso de AWS IoT regras, consulte[Monitoramento AWS IoT](monitoring_overview.md).