Tutoriel : Stockage des données de l'appareil dans une table DynamoDB - 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 : Stockage des données de l'appareil dans une table DynamoDB

Ce didacticiel explique comment créer une AWS IoT règle qui envoie des données de message à une table DynamoDB.

Dans ce didacticiel, vous allez créer une règle qui envoie les données des messages d'un capteur météo imaginaire vers une table DynamoDB. La règle met en forme les données de nombreux capteurs météorologiques de manière à ce qu'elles puissent être ajoutées à une seule table de base de données.

Ce que vous allez apprendre dans ce didacticiel
  • Pour créer une table DynamoDB

  • Comment envoyer des données de message à une table DynamoDB à partir d'une règle AWS IoT

  • Comment utiliser des modèles de substitution dans une AWS IoT règle

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

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

Ce didacticiel vous prendra environ 30 minutes.

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

Dans l'étape 1 de ce didacticiel, vous allez créer une table dans DynamoDB en utilisant l'.

Dans ce didacticiel, vous allez créer une table DynamoDB avec les attributs suivants pour enregistrer les données des capteurs météorologiques imaginaires :

  • sample_timeest une clé primaire et décrit l'heure à laquelle l'échantillon a été enregistré.

  • device_idest une clé de tri et décrit le périphérique qui a fourni l'échantillon

  • device_datacorrespond aux données reçues de l'appareil et formatées par l'déclararionde requête de règle

Pour créer la table DynamoDB pour ce didacticiel
  1. Ouvrez la console DynamoDB, puis choisissez Créer une un tableau.

  2. Dans Créer une table :

    1. Saisissez un nom de table dans la zone Nom de la table.

    2. Dans Clé de partition, entrez sample_time, puis dans la liste d'options à côté du champ, sélectionnez Number.

    3. Dans Touche de tri, entrez device_id, et dans la liste d'options à côté du champ, sélectionnez Number.

    4. En bas de la page, choisissez Create .

Vous le définirez device_data ultérieurement, lorsque vous configurerez l'action de règle DynamoDB.

Étape 2 : créer une AWS IoT règle pour envoyer des données à la table DynamoDB

Au cours de cette étape, vous allez utiliser l'déclararionde requête de règle pour formater les données provenant des capteurs météorologiques imaginaires afin de les écrire dans la table de base de données.

Voici un exemple de charge utile de messages reçue d'un capteur météo :

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

Pour l'entrée de base de données, vous allez utiliser l'déclararionrule query pour aplatir la structure de la charge utile du message de manière à ce qu'elle ressemble à ceci :

{ "temperature": 28, "humidity": 80, "barometer": 1013, "wind_velocity": 22, "wind_bearing": 255 }

Dans cette règle, vous utiliserez également deux Modèles de substitution. Les modèles de substitution sont des expressions qui vous permettent d'insérer des valeurs dynamiques à partir de fonctions et de données de message.

Pour créer la AWS IoT règle permettant d'envoyer des données à la table DynamoDB
  1. Ouvrez les Règles du hub de la console AWS IoT. Vous pouvez également ouvrir la AWS IoT page d'accueil dans le AWS Management Console et accéder à Routage des messages > Règles.

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

  3. Dans Propriétés de la règle :

    1. Sous Nom du rôle, entrez wx_data_ddb.

      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 de la règle, 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. Choisissez Next (Suivant) pour continuer.

  5. Dans Instruction SQL:

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

    2. Dans la zone d'édition de l'instruction SQL, entrez l'instruction :

      SELECT temperature, humidity, barometer, wind.velocity as wind_velocity, wind.bearing as wind_bearing, FROM 'device/+/data'

      Cette instruction :

      • Écoute les messages MQTT dont le objet correspond au filtre de device/+/data objet.

      • Formate les éléments de l'windattribut en tant qu'attributs individuels.

      • Transmet les temperature, humidity, et barometer, attributs et tels quels.

  6. Choisissez Next (Suivant) pour continuer.

  7. Dans Rule actions :

    1. Pour ouvrir la liste des actions de règle pour cette règle, dans Action 1, sélectionnezDynamoDB.

      Note

      Assurez-vous de choisir DynamoDB et non DynamoDBV2 comme action de règle.

    2. Dans Nom de la table, choisissez le nom de la table DynamoDB que vous avez créée lors d'une étape précédente :. wx_data

      Les champs Type de clé de partition et Type de clé de tri sont remplis avec les valeurs de votre tableau DynamoDB.

    3. Dans Clé de partition, entrer sample_time.

    4. Dans Valeur de la clé de partition, tapez ${timestamp()}.

      Il s'agit de la première des Modèles de substitution que vous utiliserez dans cette règle. Au lieu d'utiliser une valeur provenant de la charge utile du message, il utilisera la valeur renvoyée par la fonction d'horodatage. Pour en savoir plus, consultez timestamp dans le AWS IoT Core Guide du développeur.

    5. Dans clé de tri, entrez device_id.

    6. Dans Valeur de la clé de tri, entrez ${cast(topic(2) AS DECIMAL)}.

      Il s'agit de la deuxième des Modèles de substitution que vous utiliserez dans cette règle. Il insère la valeur du deuxième élément dans le nom de l'objet, qui est l'ID de l'appareil, après l'avoir converti en valeur DÉCIMALE pour correspondre au format numérique de la clé. Pour de plus amples informations, veuillez consulter Rubriques dans le AWS IoT Core Guide du développeur. Ou pour en savoir plus sur le casting, consultez le AWS IoT Core guide du développeur.

    7. Dans Write message data to this column (Écrire des données de message dans cette colonne), entrez device_data.

      Cela créera la device_data colonne dans la table DynamoDB.

    8. Laissez le champ Operation (Opération) vide.

    9. Pour Rôle IAM, choisissez Créer un rôle.

    10. Dans la boîte de dialogue Créer un rôle, pour Nom du rôle, entrez wx_ddb_role. Ce nouveau rôle contiendra automatiquement une politique avec le préfixe « aws-iot-rule » qui permettra à la wx_data_ddb règle d'envoyer des données à la table wx_data DynamoDB que vous avez créée.

    11. Pour Rôle IAM, choisissez wx_ddb_role.

    12. Au bas de la page, sélectionnez Next.

  8. Au bas de la page Réviser et créer, choisissez Créer pour créer la règle.

Étape 3 : tester la AWS IoT règle et la table DynamoDB

Pour tester la nouvelle règle, vous allez utiliser le client MQTT pour publier et vous abonner aux messages MQTT utilisés dans ce test.

Ouvrez le client MQTT dans la AWS IoT console dans une nouvelle fenêtre. Cela vous permettra de modifier la règle sans perdre la configuration de votre client MQTT. Le client MQTT ne conserve aucun abonnement ou journal de messages si vous le quittez pour accéder à une autre page de la console. Vous devez également ouvrir une fenêtre de console distincte sur le hub de tables DynamoDB de AWS IoT la console pour afficher les nouvelles entrées envoyées par votre règle.

Vous pouvez utiliser le client MQTT pour tester votre règle.
  1. Dans le client MQTT de la AWS IoT console, abonnez-vous au objet d'entrée,device/+/data.

    1. Dans le client MQTT, choisissez Publier dans une rubrique.

    2. Pour le filtre de objet, entrez l’objet du filtre de l’objet d'entrée, device/+/data.

    3. Choisissez Souscrire.

  2. Maintenant, publiez un message sur le objet d'entrée avec un identifiant d'appareil spécifique, device/22/data. Vous ne pouvez pas publier au format MQTT des objets contenant des caractères génériques.

    1. Dans le client MQTT, choisissez Publier dans une rubrique.

    2. Dans Nom de la rubrique, attribuez un nom à la rubrique device/22/data.

    3. Pour la charge du message, entrez les exemples de données suivants.

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

    5. Maintenant, dans le client MQTT, choisissez S'abonner à un objet. Dans la colonne S'abonner, choisissez l'device/+/dataabonnement. Vérifiez que les exemples de données de l'étape précédente y figurent.

  3. Vérifiez la ligne de la table DynamoDB créée par votre règle.

    1. Dans le hub de tables DynamoDB de AWS IoT la console, choisissez wx_data, puis l'onglet Éléments.

      Si vous êtes déjà dans l'onglet Éléments savoir, vous devrez peut-être actualiser l'affichage en choisissant l'icône d'actualisation dans le coin supérieur droit de l'en-tête du tableau.

    2. Notez que les valeurs sample_time de la table sont des liens et ouvrez-en un. Si vous venez d'envoyer votre premier message, ce sera le seul de la liste.

      Ce lien affiche toutes les données de cette ligne du tableau.

    3. Développez l'entrée device_data pour voir les données résultant de l'déclararionde requête de règle.

    4. Explorez les différentes représentations des données disponibles dans cet affichage. Vous pouvez également modifier les données de cet affichage.

    5. Après avoir passé en revue cette ligne de données, pour enregistrer les modifications que vous avez apportées, choisissez Enregistrer, ou pour quitter sans enregistrer les modifications, choisissez Annuler.

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

Résolution des problèmes de votre règle DynamoDB

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 client MQTT

    Chaque fois que vous publiez votre message d'entrée dans le device/22/data objet, ce message doit apparaître dans le client MQTT si vous vous êtes abonné au filtre de device/+/data objet 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 client MQTT, sous Abonnements, choisissez device/+/data, vérifiez l’objet du message de publication, puis choisissez Publier dans le objet. 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 voyez pas vos données dans la table DynamoDB

    La première chose à faire est d'actualiser l'affichage en choisissant l'icône d'actualisation dans le coin supérieur droit de l'en-tête du tableau. Si les données que vous recherchez ne s'affichent pas, vérifiez les points suivants.

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

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

    • 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 clause FROM de l'déclararionde requête de règle.

      Vérifiez l'orthographe du filtre de rubrique dans l'déclararionde requête de règle avec celle de l'objet dans le client MQTT. 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'déclararionSELECT.

      Vérifiez l'orthographe du temperature champ dans l'déclararionde requête de règle avec celle de la charge utile du message dans le client MQTT. 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 document JSON contenu dans la charge utile du message est correctement formaté. Si le JSON contient des erreurs, telles qu'une virgule manquante, la règle ne pourra pas le lire.

    • Vérifiez les noms de clé et de champ utilisés dans l'action de la règle

      Les noms de champs utilisés dans la règle de rubrique doivent correspondre à ceux trouvés dans la charge utile du message JSON du message publié.

      Ouvrez la règle que vous avez créée dans la console et vérifiez les noms des champs dans la configuration de l'action des règles avec ceux utilisés dans le client MQTT.

    • 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 des données de message et à mettre à jour la table DynamoDB sont spécifiques aux rubriques utilisées. Si vous modifiez le nom de rubrique ou de table DynamoDB utilisé par la règle, vous devez mettre à jour le rôle de l'action de règle afin de mettre à jour sa politique en conséquence.

      Si vous pensez que c'est le problème, modifiez l'action de 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

Après avoir envoyé quelques messages à la table DynamoDB avec cette règle, essayez de l'utiliser pour voir comment la modification de certains aspects du didacticiel affecte les données écrites dans la table. Voici quelques idées pour vous aider à démarrer.

  • Modifiez le device_id dans le objet du message d'entrée et observez l'effet sur les données. Vous pouvez l'utiliser pour simuler la réception de données provenant de plusieurs capteurs météorologiques.

  • Modifiez les champs sélectionnés dans l'déclararionde requête de règle et observez l'effet sur les données. Vous pouvez l'utiliser pour filtrer les données stockées dans la table.

  • Ajoutez une action de règle de republication pour envoyer un message MQTT pour chaque ligne ajoutée au tableau. Vous pouvez l'utiliser pour le débogage.

Après avoir terminé ce didacticiel, jetez un œil Tutoriel : Formatage d'une notification à l'aide d'une AWS Lambda fonction.