Tutorial: Como formatar uma notificação usando uma função AWS Lambda - AWS IoT Core

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

Tutorial: Como formatar uma notificação usando uma função AWS Lambda

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

No tutorial sobre como fazer issoTutorial:r Como enviar uma notificação do Amazon SNS, 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 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.

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

Etapa 1: criar uma AWS Lambda função que envie uma mensagem de texto

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 comoTutorial:r Como enviar uma notificação do Amazon SNS, 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.

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, selecione Criar função.

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

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

    3. Em Informações básicas:

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

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

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

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

      5. Escolha a opção Criar função.

  2. 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-notificationdetalhes. Caso contrário, abra-a na página Função do Lambda

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

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

    4. 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
    5. Escolha Implantar.

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

    1. Em uma nova janela, abra o console página Tópicos no console do Amazon SNS.

    2. Na página Tópicos, encontre o tópico de notificação high_temp_notice na lista de tópicos do Amazon SNS.

    3. Encontre o ARN do tópico de notificação high_temp_notice para usar na próxima etapa.

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

    1. Na página Lambda Functions do console, na página de format-high-temp-notificationdetalhes, escolha Selecionar um evento de teste no canto superior direito da página (mesmo que pareça desativado) e escolha Configurar eventos de teste.

    2. Em Selecionar um evento de teste, escolha Configurar evento de teste.

    3. Em Nome do evento, insira SampleRuleOutput.

    4. 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" }
    5. Consulte a janela que tem o ARN do tópico de notificação high_temp_notice e copie o valor do ARN.

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

    7. Escolha Criar.

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

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

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

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.

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

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

    1. Em Nome, insira o nome da regra, wx_friendly_text.

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

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

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

  4. Na declaração de consulta de regra de Criar uma regra:

    1. Em Uso da versão SQL, selecione2016-03-23.

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

    3. Consulte a janela que tem o ARN do tópico de notificação high_temp_notice e copie o valor do ARN.

    4. Substitua o valor do ARN (arn:aws:sns:us-east-1:57EXAMPLE833:high_temp_notice) no editor de instruções de consulta de regras pelo ARN do tópico de notificação.

  5. Em Definir uma ou mais ações:

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

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

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

  6. Em Configurar ação:

    1. Em Nome do perfil, escolha Selecionar.

    2. Escolha format-high-temp-notification.

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

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

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

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

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

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

    4. Escolha Assinar um tópico.

      Na coluna Assinaturas, em Publicar em um tópico, device/+/data é exibido.

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

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

    3. 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 } }
    4. Escolha Publicar em um tópico para publicar sua mensagem MQTT.

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

    2. Em Assinaturas, escolha dispositivo/+/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 } }
    3. 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.

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

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

    3. 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 } }
    4. Para enviar sua mensagem MQTT, escolha Publicar no tópico.

    Você deve ver a mensagem que enviou na assinatura device/+/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

Aqui estão algumas objetos para verificar, caso 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/+/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

      EmEtapa 1: Criar um tópico do Amazon SNS que envia uma mensagem de texto SMS, 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, 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

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_id no 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, consulteMonitoramento AWS IoT.