Tutoriel : Formatage d'une notification à l'aide d'une AWS Lambda fonction - AWS IoT Core

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Tutoriel : Formatage d'une notification à l'aide d'une AWS Lambda fonction

Ce didacticiel explique comment envoyer des données de MQTT message à une AWS Lambda action pour le formatage et l'envoi à un autre AWS service. Dans ce didacticiel, l' AWS Lambda action utilise le AWS SDK pour envoyer le message formaté au SNS sujet Amazon que vous avez créé dans le didacticiel sur la procédure à Tutoriel : Envoi d'une SNS notification Amazon suivre.

Dans le didacticiel expliquant comment procéderTutoriel : Envoi d'une SNS notification Amazon, le JSON document issu de l'instruction de requête de la règle a été envoyé dans le corps du message texte. Le résultat a été un message texte qui ressemblait à cet exemple :

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

Dans ce didacticiel, vous allez utiliser une action de AWS Lambda règle pour appeler une AWS Lambda fonction qui met en forme les données de l'instruction de requête de règle dans un format plus convivial, comme dans cet exemple :

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

La AWS Lambda fonction que vous allez créer dans ce didacticiel formate la chaîne du message en utilisant les données de l'instruction de requête de règle et appelle la fonction de SNSpublication du AWS SDK pour créer la notification.

Ce que vous allez apprendre dans ce didacticiel
  • Comment créer et tester une AWS Lambda fonction

  • Comment utiliser la AWS Lambda fonction AWS SDK in an pour publier une SNS notification Amazon

  • Comment utiliser des SQL requêtes et des fonctions simples dans une instruction de requête de règle

  • Comment utiliser le MQTT client pour tester une AWS IoT règle

Ce didacticiel vous prendra environ 45 minutes.

Avant de commencer ce didacticiel, assurez-vous de disposer des éléments suivants :
  • Configurez Compte AWS

    Vous aurez besoin de votre AWS IoT console Compte AWS et de votre console pour terminer ce didacticiel.

  • Révisé Afficher MQTT les messages avec le AWS IoT MQTT client

    Assurez-vous que vous pouvez utiliser le MQTT client pour vous abonner à un sujet et le publier. Vous allez utiliser le MQTT client pour tester votre nouvelle règle dans le cadre de cette procédure.

  • Vous avez terminé les autres didacticiels sur les règles de cette section

    Ce didacticiel nécessite le sujet de SNS notification que vous avez créé dans le didacticiel pour savoir comment procéderTutoriel : Envoi d'une SNS notification Amazon. Cela suppose également que vous avez suivi les autres didacticiels relatifs aux règles de cette section.

  • J'ai revu l'AWS Lambda aperçu

    Si vous ne l'avez jamais utilisé AWS Lambda auparavant, consultez le AWS Lambdaguide Getting started with Lambda pour en apprendre les termes et les concepts.

Étape 1 : créer une AWS Lambda fonction qui envoie un message texte

La AWS Lambda fonction de ce didacticiel reçoit le résultat de l'instruction de requête de règle, insère les éléments dans une chaîne de texte et envoie la chaîne résultante à Amazon SNS sous forme de message dans une notification.

Contrairement au didacticiel expliquant commentTutoriel : Envoi d'une SNS notification Amazon, qui utilisait une action de AWS IoT règle pour envoyer la notification, ce didacticiel envoie la notification à partir de la fonction Lambda en utilisant une fonction du. AWS SDK Le sujet des SNS notifications Amazon utilisé dans ce didacticiel est toutefois le même que celui que vous avez utilisé dans le didacticiel expliquant comment procéderTutoriel : Envoi d'une SNS notification Amazon.

Pour créer une AWS Lambda fonction qui envoie un message texte
  1. Créez une nouvelle AWS Lambda fonction.

    1. Dans la AWS Lambda console, choisissez Créer une fonction.

    2. Dans Créer une fonction, sélectionnez Utiliser un plan.

      Recherchez et sélectionnez le hello-world-python plan, puis choisissez Configurer.

    3. Dans Informations de base :

      1. Dans Nom de la fonction, entrez le nom de votre fonction, par exemple format-high-temp-notification.

      2. Dans Rôle d'exécution, choisissez Créer un nouveau rôle à partir de modèles de AWS politique.

      3. Dans Role name, entrez un nom pour le nouveau rôle.

      4. Dans Modèles de politiques (facultatif), recherchez et sélectionnez Amazon SNS Publish Policy.

      5. Sélectionnez Create function (Créer une fonction).

  2. Modifiez le code du plan pour le formater et envoyer une SNS notification Amazon.

    1. Après avoir créé votre fonction, vous devriez voir la page de format-high-temp-notificationdétails. Si ce n'est pas le cas, ouvrez-le depuis la page des Lambdafonctions.

    2. Sur la page de format-high-temp-notificationdétails, choisissez l'onglet Configuration et faites défiler l'écran jusqu'au panneau des codes de fonction.

    3. Dans la fenêtre Code de fonction, dans le volet Environnement, choisissez le fichier Python, lambda_function.py.

    4. Dans la fenêtre Code de fonction, supprimez tout le code du programme d'origine du plan et remplacez-le par ce code.

      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. Choisissez Deploy (Déployer).

  3. Dans une nouvelle fenêtre, recherchez le nom de la ressource Amazon (ARN) de votre SNS rubrique Amazon dans le didacticiel expliquant comment procéderTutoriel : Envoi d'une SNS notification Amazon.

    1. Dans une nouvelle fenêtre, ouvrez la page Sujets de la SNS console Amazon.

    2. Sur la page Rubriques, recherchez la rubrique de notification high_temp_notice dans la liste des rubriques Amazon. SNS

    3. Recherchez la rubrique ARNde notification high_temp_notice à utiliser à l'étape suivante.

  4. Créez un scénario de test pour votre fonction Lambda.

    1. Sur la page Fonctions Lambda de la console, sur la page de format-high-temp-notificationdétails, choisissez Sélectionner un événement de test dans le coin supérieur droit de la page (même s'il semble désactivé), puis sélectionnez Configurer les événements de test.

    2. Dans Configure test event (Configurer un événement de test) choisissez Select a test event (Sélectionner un événement de test).

    3. Dans Event name (Nom de l'événement), saisissez SampleRuleOutput.

    4. Dans l'JSONéditeur situé sous Nom de l'événement, collez cet exemple de JSON document. Voici un exemple de ce que votre AWS IoT règle enverra à la fonction Lambda.

      { "device_id": "32", "reported_temperature": 38, "max_temperature": 30, "notify_topic_arn": "arn:aws:sns:us-east-1:57EXAMPLE833:high_temp_notice" }
    5. Reportez-vous à la fenêtre contenant le sujet ARNde notification high_temp_notice et copiez la valeur. ARN

    6. Remplacez la notify_topic_arn valeur dans l'JSONéditeur par celle ARN de votre sujet de notification.

      Gardez cette fenêtre ouverte afin de pouvoir réutiliser cette ARN valeur lors de la création de la AWS IoT règle.

    7. Sélectionnez Create (Créer).

  5. Testez la fonction avec des exemples de données.

    1. Sur la page de format-high-temp-notificationdétails, dans le coin supérieur droit de la page, vérifiez que cela SampleRuleOutputapparaît à côté du bouton Test. Si ce n'est pas le cas, sélectionnez-le dans la liste des événements de test disponibles.

    2. Pour envoyer le message de sortie de l'exemple de règle à votre fonction, choisissez Test.

Si la fonction et la notification ont toutes deux fonctionné, vous recevrez un message texte sur le téléphone abonné à la notification.

Si vous n'avez pas reçu de SMS au téléphone, vérifiez le résultat de l'opération. Dans le panneau Code de fonction, dans l'onglet Résultat de l'exécution, passez en revue la réponse pour détecter les erreurs qui se sont produites. Ne passez pas à l'étape suivante tant que votre fonction n'a pas pu envoyer la notification à votre téléphone.

Étape 2 : Création d'une AWS IoT règle avec une action de AWS Lambda règle

Au cours de cette étape, vous allez utiliser l'déclararionde requête de règle pour formater les données provenant du capteur météo imaginaire à envoyer à une fonction Lambda, qui formatera et enverra un message texte.

Voici un exemple de charge utile des messages reçus des appareils météorologiques :

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

Dans cette règle, vous allez utiliser l'déclararionrule query pour créer une charge utile de message pour la fonction Lambda qui ressemble à ceci :

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

Il contient toutes les informations dont la fonction Lambda a besoin pour formater et envoyer le message texte correct.

Pour créer la AWS IoT règle permettant d'appeler une fonction Lambda
  1. Ouvrez le hub de règles de la AWS IoT console.

  2. Pour commencer à créer votre nouvelle règle dans Règles, choisissez Créer.

  3. Dans la partie supérieure de Créer une règle :

    1. Dans Nom, entrez le nom de la règle, wx_friendly_text.

      N'oubliez pas qu'un nom de règle doit être unique dans votre région Compte AWS et qu'il ne doit pas comporter d'espaces. Nous avons utilisé un trait de soulignement dans ce nom pour séparer les deux mots du nom de la règle.

    2. Dans Description, décrivez la règle.

      Une description significative permet de se souvenir plus facilement du rôle de cette règle et de la raison pour laquelle vous l'avez créée. La description peut être aussi longue que nécessaire, donc soyez aussi détaillée que possible.

  4. Dans l'déclararionde requête règle de Create a rule :

    1. Dans Utiliser SQL la version, sélectionnez2016-03-23.

    2. Dans la zone d'édition de la instruction de requête de règle, entrez l'instruction :

      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

      Cette instruction :

      • Écoute les MQTT messages dont le sujet correspond au filtre de device/+/data sujet et dont la temperature valeur est supérieure à 30.

      • Sélectionne le deuxième élément dans la chaîne de l'objet, le convertit en nombre décimal, puis l'affecte au device_id champ.

      • Sélectionne la valeur du temperature champ dans la charge utile du message et l'affecte au reported_temperature champ.

      • Crée une valeur constante, 30, pour représenter la valeur limite et l'affecte au max_temperature champ.

      • Crée une valeur constante pour le notify_topic_arn champ.

    3. Reportez-vous à la fenêtre contenant le sujet ARNde notification high_temp_notice et copiez la valeur. ARN

    4. Remplacez la ARN valeur (arn:aws:sns:us-east-1:57EXAMPLE833:high_temp_notice) dans l'éditeur d'instructions de requête de règles avec le sujet ARN de votre notification.

  5. Dans Définir une ou plusieurs actions :

    1. Pour ouvrir la liste des actions de règle pour cette règle, choisissez Ajouter une action.

    2. Dans Sélectionner une action, choisissez Envoyer un message à une fonction Lambda.

    3. Pour ouvrir la page de configuration de l'action sélectionnée, en bas de la liste d'actions, choisissez Configurer l'action.

  6. Sous Configurer les actions :

    1. Dans Nom de la fonction, choisissez Sélectionner.

    2. Choisissez format-high-temp-notification.

    3. Au bas de Configurer l'action, choisissez Ajouter une action.

    4. Pour créer la règle, en bas de Créer une règle, sélectionnez Créer une règle.

Étape 3 : tester la AWS IoTAWS Lambda règle et son action

Pour tester votre nouvelle règle, vous allez utiliser le MQTT client pour publier les MQTT messages utilisés par cette règle et vous y abonner.

Ouvrez le MQTTclient dans la AWS IoT console dans une nouvelle fenêtre. Vous pouvez désormais modifier la règle sans perdre la configuration de votre MQTT client. Si vous quittez le MQTT client pour accéder à une autre page de la console, vous perdrez vos abonnements ou vos journaux de messages.

Pour utiliser le MQTT client pour tester votre règle
  1. Dans le MQTTclient de la AWS IoT console, abonnez-vous aux sujets d'entrée, dans ce cas,device/+/data.

    1. Dans le MQTT client, sous Abonnements, choisissez S'abonner à un sujet.

    2. Dans Sujet d'abonnement, entrez le objet du filtre de objet d'entrée,device/+/data.

    3. Conservez les valeurs par défaut des autres paramètres.

    4. Choisissez Subscribe to topic (S'abonner à la rubrique).

      Dans la colonne Abonnements, la section Publier dans un objet device/+/data apparaît.

  2. Publiez un message sur le objet d'entrée avec un identifiant d'appareil spécifique, device/32/data. Vous ne pouvez pas publier dans MQTT des rubriques contenant des caractères génériques.

    1. Dans le MQTT client, sous Abonnements, choisissez Publier dans le sujet.

    2. Dans le champ Publier, entrez le nom de l'objet d'entrée, device/32/data.

    3. Copiez les exemples de données présentés ici et, dans la zone d'édition située sous le nom de l'objet, collez les exemples de données.

      { "temperature": 38, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
    4. Pour publier votre MQTT message, choisissez Publier dans le sujet.

  3. Confirmez que le message texte a été envoyé.

    1. Dans le MQTT client, sous Abonnements, il y a un point vert à côté du sujet auquel vous vous êtes abonné précédemment.

      Le point vert indique qu'un ou plusieurs nouveaux messages ont été reçus depuis la dernière fois que vous les avez consultés.

    2. Sous Abonnements, choisissez device/+/data pour vérifier que la charge utile du message correspond à ce que vous venez de publier et ressemble à ceci :

      { "temperature": 38, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
    3. Vérifiez le téléphone que vous avez utilisé pour vous abonner au SNS sujet et vérifiez que le contenu de la charge utile du message ressemble à ceci :

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

      Si vous modifiez l'élément ID de objet dans le objet du message, n'oubliez pas que la conversion de la topic(2) valeur en valeur numérique ne fonctionnera que si cet élément de l'objet du message contient uniquement des caractères numériques.

  4. Essayez d'envoyer un MQTT message dans lequel la température ne dépasse pas la limite.

    1. Dans le MQTT client, sous Abonnements, choisissez Publier dans le sujet.

    2. Dans le champ Publier, entrez le nom de l'objet d'entrée, device/33/data.

    3. Copiez les exemples de données présentés ici et, dans la zone d'édition située sous le nom de l'objet, collez les exemples de données.

      { "temperature": 28, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
    4. Pour envoyer votre MQTT message, choisissez Publier dans le sujet.

    Vous devriez voir le message que vous avez envoyé dans l'device/+/dataabonnement ; toutefois, comme la valeur de température est inférieure à la température maximale indiquée dans l'énoncé de la requête de règle, vous ne devriez pas recevoir de message texte.

    Si vous ne voyez pas le comportement correct, consultez les conseils de dépannage.

Résolution des problèmes liés à votre AWS Lambda règle et à votre notification

Voici quelques points à vérifier, au cas où vous n'obtiendriez pas les résultats escomptés.

  • Vous avez reçu une bannière d'erreur

    Si une erreur est apparue lorsque vous avez publié le message d'entrée, corrigez-la d'abord. Les étapes suivantes peuvent vous aider à corriger cette erreur.

  • Vous ne voyez pas le message d'entrée dans le MQTT client

    Chaque fois que vous publiez votre message d'entrée dans le device/32/data sujet, ce message doit apparaître dans le MQTT client, si vous vous êtes abonné au filtre de device/+/data sujet comme décrit dans la procédure.

    À savoir
    • Vérifiez le filtre de objets auquel vous vous êtes abonné

      Si vous vous êtes abonné au objet du message d'entrée comme décrit dans la procédure, vous devriez voir une copie du message d'entrée chaque fois que vous le publiez.

      Si le message ne s'affiche pas, vérifiez le nom de l'objet auquel vous vous êtes abonné et comparez-le au objet dans lequel vous avez publié. Les noms des objets distinguent les majuscules et minuscules et le objet auquel vous vous êtes abonné doit être identique au objet dans lequel vous avez publié la charge utile du message.

    • Vérifiez la fonction de publication des messages

      Dans le MQTT client, sous Abonnements, choisissez device/+/data, vérifiez le sujet du message de publication, puis choisissez Publier dans le sujet. La charge utile du message figurant dans la zone d'édition située sous le objet devrait apparaître dans la liste des messages.

  • Vous ne recevez pas de SMS message

    Pour que votre règle fonctionne, elle doit disposer de la politique appropriée qui l'autorise à recevoir un message et à envoyer une SNS notification, et elle doit recevoir le message.

    À savoir
    • Vérifiez le Région AWS nom de votre MQTT client et la règle que vous avez créée

      La console dans laquelle vous exécutez le MQTT client doit se trouver dans la même AWS région que la règle que vous avez créée.

    • Vérifiez que la valeur de température dans la charge utile du message dépasse le seuil de test

      Si la valeur de température est inférieure ou égale à 30, telle que définie dans l'déclararionde requête de règle, la règle n'exécutera aucune de ses actions.

    • Vérifiez le objet du message d'entrée dans la déclaration de requête de règle

      Pour que la règle fonctionne, elle doit recevoir un message dont le nom de rubrique correspond au filtre de rubrique figurant dans la FROM clause de l'instruction de requête de règle.

      Vérifiez l'orthographe du filtre de rubrique dans l'instruction de requête de règle avec celle du sujet dans le MQTT client. Les noms de objets distinguent les majuscules et minuscules et le objet du message doit correspondre au filtre de objet indiqué dans l'déclararionde requête de règle.

    • Vérifiez le contenu de la charge utile des messages d'entrée

      Pour que la règle fonctionne, elle doit trouver le champ de données dans la charge utile du message déclarée dans l'SELECTinstruction.

      Vérifiez l'orthographe du temperature champ dans l'instruction de requête de règle avec celle de la charge utile du message dans le MQTT client. Les noms de champs distinguent les majuscules et minuscules et le temperature champ de l'déclararionde requête de règle doit être identique au temperature champ de la charge du message.

      Assurez-vous que le JSON document contenu dans la charge utile du message est correctement formaté. S'il JSON contient des erreurs, telles qu'une virgule manquante, la règle ne pourra pas le lire.

    • Consultez la SNS notification Amazon

      DansÉtape 1 : créer un SNS sujet Amazon qui envoie un message SMS texte, reportez-vous à l'étape 3 qui décrit comment tester la SNS notification Amazon et tester la notification pour vous assurer qu'elle fonctionne.

    • La fonction Lambda.

      DansÉtape 1 : créer une AWS Lambda fonction qui envoie un message texte, reportez-vous à l'étape 5 qui décrit comment tester la fonction Lambda à l'aide de données de test et tester la fonction Lambda.

    • Vérifiez le rôle utilisé par la règle

      L'action de règle doit être autorisée à recevoir le objet d'origine et à publier le nouveau objet.

      Les politiques qui autorisent la règle à recevoir les données des messages et à les republier sont spécifiques aux objets utilisés. Si vous modifiez le objet utilisé pour republier les données du message, vous devez mettre à jour le rôle de l'action de règle afin de mettre à jour sa politique afin qu'elle corresponde au objet actuel.

      Si vous pensez que c'est le problème, modifiez l'action Republier la règle et créez un nouveau rôle. Les nouveaux rôles créés par l'action de règle reçoivent les autorisations nécessaires pour effectuer ces actions.

Étape 4 : examen des résultats et des étapes suivantes

Dans ce tutoriel :
  • Vous avez créé une AWS IoT règle pour appeler une fonction Lambda qui a envoyé une SNS notification Amazon utilisant la charge utile de vos messages personnalisés.

  • Vous avez utilisé une SQL requête et des fonctions simples dans une instruction de requête de règle pour créer une nouvelle charge utile de message pour votre fonction Lambda.

  • Vous avez utilisé le MQTT client pour tester votre AWS IoT règle.

Étapes suivantes

Après avoir envoyé quelques SMS avec cette règle, essayez de l'utiliser pour voir comment la modification de certains aspects du didacticiel affecte le message et le moment où il est envoyé. Voici quelques idées pour vous aider à démarrer.

  • Changez le device_id dans le sujet du message d'entrée et observez l'effet dans le contenu du message texte.

  • Modifiez les champs sélectionnés dans l'déclararionde requête de règle, mettez à jour la fonction Lambda pour les utiliser dans un nouveau message et observez l'effet dans le contenu du message texte.

  • Modifiez le test dans l'déclararionde requête de règle pour tester une température minimale au lieu d'une température maximale. Mettez à jour la fonction Lambda pour formater un nouveau message et n'oubliez pas de changer le nom de max_temperature.

  • Pour en savoir plus sur la détection des erreurs susceptibles de se produire lors du développement et de l'utilisation de AWS IoT règles, consultezSurveillance AWS IoT.