

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