

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
<a name="iot-ddb-rule"></a>

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.

**Topics**
+ [Dans l'étape 1 de ce didacticiel, vous allez créer une table dans DynamoDB en utilisant l'.](#iot-ddb-rule-ddb-table)
+ [Étape 2 : créer une AWS IoT règle pour envoyer des données à la table DynamoDB](#iot-ddb-rule-topic-rule)
+ [Étape 3 : tester la AWS IoT règle et la table DynamoDB](#iot-ddb-rule-test)
+ [Étape 4 : examen des résultats et des étapes suivantes](#iot-ddb-rule-review)

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

**[Configurez Compte AWS](setting-up.md)**  
Vous aurez besoin de votre AWS IoT console Compte AWS et de votre console pour terminer ce didacticiel.
+ 

**Révisé [Afficher les messages MQTT avec le client AWS IoT MQTT](view-mqtt-messages.md)**  
Assurez-vous de pouvoir utiliser le client MQTT pour vous abonner à un objet et le publier. Vous allez utiliser le client MQTT pour tester votre nouvelle règle dans le cadre de cette procédure.
+ 

**J'ai consulté la présentation [d'Amazon DynamoDB](https://docs.aws.amazon.com//amazondynamodb/latest/developerguide/Introduction.html)**  
Si vous n'avez jamais utilisé DynamoDB auparavant, consultez [Mise en route with DynamoDB](https://docs.aws.amazon.com//amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html) pour vous familiariser avec les concepts et opérations de DynamoDB.

## Dans l'étape 1 de ce didacticiel, vous allez créer une table dans DynamoDB en utilisant l'.
<a name="iot-ddb-rule-ddb-table"></a>

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_time`est une clé primaire et décrit l'heure à laquelle l'échantillon a été enregistré.
+ `device_id`est une clé de tri et décrit le périphérique qui a fourni l'échantillon 
+ `device_data`correspond 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](https://console.aws.amazon.com//dynamodb/home), puis choisissez **Créer une un tableau**.

1. Dans **Créer une table** :

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

   1. Dans **Clé de partition**, entrez **sample\$1time**, puis dans la liste d'options à côté du champ, sélectionnez **Number**.

   1. Dans **Touche de tri**, entrez **device\$1id**, et dans la liste d'options à côté du champ, sélectionnez **Number**.

   1. 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
<a name="iot-ddb-rule-topic-rule"></a>

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](iot-substitution-templates.md). 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](https://console.aws.amazon.com//iot/home#/rulehub). Vous pouvez également ouvrir la AWS IoT page d'accueil dans le AWS Management Console et accéder à **Routage des messages** > Règles.

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

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

   1. Sous **Nom du rôle**, entrez **wx\$1data\$1ddb**.

      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.

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

1. Choisissez **Next (Suivant)** pour continuer.

1. Dans **Instruction SQL**:

   1. Dans la **version SQL**, sélectionnez**2016-03-23**.

   1. 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'`wind`attribut en tant qu'attributs individuels.
      + Transmet les `temperature`, `humidity`, et `barometer`, attributs et tels quels.

1. Choisissez **Next (Suivant)** pour continuer.

1. Dans **Rule actions** :

   1. Pour ouvrir la liste des actions de règle pour cette règle, dans **Action 1**, sélectionnez**DynamoDB**.
**Note**  
Assurez-vous de choisir DynamoDB et non DBv2 Dynamo comme action de règle.

   1. 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\$1data**

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

   1. Dans **Clé de partition**, entrer **sample\$1time**.

   1. Dans **Valeur de la clé de partition**, tapez **\$1\$1timestamp()\$1**.

      Il s'agit de la première des [Modèles de substitution](iot-substitution-templates.md) 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](iot-sql-functions.md#iot-function-timestamp) dans le AWS IoT Core Guide du développeur.

   1. Dans **clé de tri**, entrez **device\$1id**.

   1. Dans **Valeur de la clé de tri**, entrez **\$1\$1cast(topic(2) AS DECIMAL)\$1**.

      Il s'agit de la deuxième des [Modèles de substitution](iot-substitution-templates.md) 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](iot-sql-functions.md#iot-function-topic) dans le *AWS IoT Core Guide du développeur*. Ou pour en savoir plus sur le [casting](iot-sql-functions.md#iot-sql-function-cast), consultez le *AWS IoT Core guide du développeur*.

   1. Dans **Write message data to this column (Écrire des données de message dans cette colonne)**, entrez **device\$1data**.

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

   1. Laissez le champ **Operation (Opération)** vide.

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

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

   1. Pour **Rôle IAM**, choisissez **wx\$1ddb\$1role**.

   1. Au bas de la page, sélectionnez **Next**.

1. 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
<a name="iot-ddb-rule-test"></a>

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](https://console.aws.amazon.com//iot/home#/test) 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](https://console.aws.amazon.com//dynamodb/home#tables:) 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](https://console.aws.amazon.com//iot/home#/test), abonnez-vous au objet d'entrée,`device/+/data`.

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

   1. Pour le **filtre de objet**, entrez l’objet du filtre de l’objet d'entrée, **device/\$1/data**.

   1. Choisissez **Souscrire**.

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

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

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

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

   1. Pour publier le message MQTT, choisissez **Publier**.

   1. Maintenant, dans le client MQTT, choisissez **S'abonner à un objet**. Dans la colonne **S'abonner**, choisissez l'**device/\$1/data**abonnement. Vérifiez que les exemples de données de l'étape précédente y figurent.

1. 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](https://console.aws.amazon.com//dynamodb/home#tables:) console, **choisissez** wx\$1data, 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.

   1. Notez que les valeurs **sample\$1time** 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.

   1. Développez l'entrée **device\$1data** pour voir les données résultant de l'déclararionde requête de règle.

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

   1. 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
<a name="iot-ddb-rule-trouble"></a>

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/\$1/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
<a name="iot-ddb-rule-review"></a>

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\$1id* sujet 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](iot-lambda-rule.md).