

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.

# Création de AWS IoT règles pour acheminer les données des appareils vers d'autres services
<a name="iot-rules-tutorial"></a>

Ces didacticiels vous montrent comment créer et tester des AWS IoT règles à l'aide de certaines des actions de règles les plus courantes.

AWS IoT les règles envoient des données de vos appareils à d'autres AWS services. Ils écoutent des messages MQTT spécifiques, formatent les données contenues dans les charges utiles des messages et envoient le résultat à d'autres AWS services.

Nous vous recommandons de les essayer dans l'ordre dans lequel ils apparaissent ici, même si votre objectif est de créer une règle utilisant une fonction Lambda ou une fonction plus complexe. Les didacticiels sont présentés dans l'ordre du plus élémentaire au plus complexe. Ils présentent de nouveaux concepts de manière progressive afin de vous aider à apprendre les concepts que vous pouvez utiliser pour créer les actions de règles qui ne font pas l'objet d'un didacticiel spécifique.

**Note**  
AWS IoT les règles vous aident à envoyer les données de vos appareils IoT vers d'autres AWS services. Pour le faire avec succès, vous devez toutefois avoir une connaissance pratique des autres services auxquels vous souhaitez envoyer des données. Bien que ces didacticiels fournissent les informations nécessaires pour effectuer les tâches, vous trouverez peut-être utile d'en savoir plus sur les services auxquels vous souhaitez envoyer des données avant de les utiliser dans votre solution. Une explication détaillée des autres AWS services n'entre pas dans le cadre de ces didacticiels.

**Présentation des scénarios de didacticiel**  
Le scénario de ces didacticiels est celui d'un capteur météo qui publie périodiquement ses données. Il existe de nombreux capteurs de ce type dans ce système imaginaire. Les didacticiels de cette section se concentrent toutefois sur un seul appareil tout en montrant comment vous pouvez intégrer plusieurs capteurs.

Les didacticiels de cette section vous montrent comment utiliser des AWS IoT règles pour effectuer les tâches suivantes avec ce système imaginaire de capteurs météorologiques.
+ 

**[Tutoriel : Republication d'un message MQTT](iot-repub-rule.md)**  
Ce didacticiel montre comment republier un message MQTT reçu des capteurs météorologiques sous la forme d'un message contenant uniquement l'identifiant du capteur et la valeur de température. Il utilise uniquement AWS IoT Core des services et montre une requête SQL simple et explique comment utiliser le client MQTT pour tester votre règle.
+ 

**[Tutoriel : envoi d'une notification Amazon SNS](iot-sns-rule.md)**  
Ce didacticiel explique comment envoyer un message SNS lorsqu'une valeur d'un capteur météo dépasse une valeur spécifique. Il s'appuie sur les concepts présentés dans le didacticiel précédent et explique comment travailler avec un autre AWS service, l'[Amazon Simple Notification Service](https://docs.aws.amazon.com//sns/latest/dg/welcome.html) (Amazon SNS).

  Si vous débutez avec Amazon SNS, consultez ses exercices de [mise en route](https://docs.aws.amazon.com//sns/latest/dg/sns-getting-started.html) avant de commencer ce didacticiel. 
+ 

**[Tutoriel : Stockage des données de l'appareil dans une table DynamoDB](iot-ddb-rule.md)**  
Ce didacticiel montre comment stocker les données des capteurs météorologiques dans une table de base de données. Il utilise l'énoncé de requête de règle et les modèles de substitution pour formater les données des messages pour le service de destination, [Amazon DynamoDB](https://docs.aws.amazon.com//amazondynamodb/latest/developerguide/Introduction.html).

  Si vous utilisez DynamoDB pour la première fois, consultez ses exercices de [mise en route](https://docs.aws.amazon.com//amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html) avant de commencer ce didacticiel.
+ 

**[Tutoriel : Formatage d'une notification à l'aide d'une AWS Lambda fonction](iot-lambda-rule.md)**  
Ce didacticiel explique comment appeler une fonction Lambda pour reformater les données de l'appareil, puis les envoyer sous forme de message texte. Il ajoute un script Python et des fonctions du AWS SDK dans une [AWS Lambda](https://docs.aws.amazon.com//lambda/latest/dg/welcome.html)fonction permettant de formater avec le message les données de charge utile provenant des capteurs météorologiques et d'envoyer un message texte.

  Si vous utilisez Lambda pour la première fois, consultez ses exercices de [mise en route](https://docs.aws.amazon.com//lambda/latest/dg/getting-started.html) avant de commencer ce didacticiel.

**AWS IoT vue d'ensemble des règles**  
Tous ces didacticiels créent des AWS IoT règles. 

Pour qu'une AWS IoT règle envoie les données d'un appareil à un autre AWS service, elle utilise : 


+ Une déclararionde requête de règle composée des éléments suivants :
  + Une clause SQL SELECT qui sélectionne et met en forme les données de la charge utile du message
  + Un filtre de rubrique (l'objet FROM dans l'déclararionde requête de règle) qui identifie les messages à utiliser
  + Une déclararionconditionnelle facultative (une clause SQL WHERE) qui spécifie les conditions spécifiques sur lesquelles agir
+ Au moins une action de règle

Les appareils publient des messages dans des rubriques MQTT. Le filtre de rubrique de l'déclararionSQL SELECT identifie les objets MQTT auxquels appliquer la règle. Les champs spécifiés dans l'déclararionSQL SELECT mettent en forme les données de la charge utile du message MQTT entrant afin qu'elles soient utilisées par les actions de la règle. Pour obtenir la liste complète des actions de règle, consultez [Actions de règle AWS IoT](iot-rule-actions.md).

**Topics**
+ [Tutoriel : Republication d'un message MQTT](iot-repub-rule.md)
+ [Tutoriel : envoi d'une notification Amazon SNS](iot-sns-rule.md)
+ [Tutoriel : Stockage des données de l'appareil dans une table DynamoDB](iot-ddb-rule.md)
+ [Tutoriel : Formatage d'une notification à l'aide d'une AWS Lambda fonction](iot-lambda-rule.md)

# Tutoriel : Republication d'un message MQTT
<a name="iot-repub-rule"></a>

Ce didacticiel explique comment créer une AWS IoT règle qui publie un message MQTT lorsqu'un message MQTT spécifié est reçu. La charge utile des messages entrants peut être modifiée par la règle avant sa publication. Cela permet de créer des messages adaptés à des applications spécifiques sans qu'il soit nécessaire de modifier votre appareil ou son microprogramme. Vous pouvez également utiliser l'aspect filtrage d'une règle pour publier des messages uniquement lorsqu'une condition spécifique est remplie.

Les messages republiés par une règle agissent comme des messages envoyés par n'importe quel autre AWS IoT appareil ou client. Les appareils peuvent s'abonner aux messages republiés de la même manière qu'ils peuvent s'abonner à n'importe quel autre objet de message MQTT.

**Ce que vous allez apprendre dans ce didacticiel :**
+ 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**
+ [Passez en revue les sujets et AWS IoT les règles du MQTT](#iot-repub-rule-mqtt)
+ [Étape 1 : créer une AWS IoT règle pour republier un message MQTT](#iot-repub-rule-define)
+ [Étape 2 : Test de votre règle](#iot-repub-rule-test)
+ [Étape 3 : examen des résultats et des étapes suivantes](#iot-repub-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.

## Passez en revue les sujets et AWS IoT les règles du MQTT
<a name="iot-repub-rule-mqtt"></a>

Avant de parler de AWS IoT règles, il est utile de comprendre le protocole MQTT. Dans les solutions IoT, le protocole MQTT offre certains avantages par rapport aux autres protocoles de communication réseau, tels que le HTTP, ce qui en fait un choix populaire pour les appareils IoT. Cette section passe en revue les principaux aspects du MQTT tels qu'ils s'appliquent à ce didacticiel. Pour plus d'informations sur la comparaison entre MQTT et HTTP, consultez [Choix d'un protocole d'application pour la communication de votre appareil](protocols.md#protocol-selection).

**Protocole MQTT**  
Le protocole MQTT utilise un modèle publish/subscribe de communication avec son hôte. Pour envoyer des données, les appareils publient des messages identifiés par des sujets sur le courtier de AWS IoT messages. Pour recevoir des messages du courtier de messages, les appareils s'abonnent aux objets qu'ils recevront en envoyant des filtres de objets dans les demandes d'abonnement adressées au courtier de messages. Le moteur de AWS IoT règles reçoit les messages MQTT du courtier de messages.

**AWS IoT règles**  
AWS IoT les règles consistent en une instruction de requête de règle et une ou plusieurs actions de règles. Lorsque le moteur de AWS IoT règles reçoit un message MQTT, ces éléments agissent sur le message comme suit.
+ 

**Déclaration de requête de règle**  
L'déclararionde requête de la règle décrit les objets MQTT à utiliser, interprète les données issues de la charge utile du message et met en forme les données comme décrit par une déclararionSQL similaire aux instructions utilisées par les bases de données SQL courantes. Le résultat de l'déclararionde requête correspond aux données envoyées aux actions de la règle.
+ 

**Action de règle**  
Chaque action de règle d'une règle agit sur les données qui résultent de l'instruction de requête de la règle. AWS IoT prend en charge [de nombreuses actions de règles](iot-rule-actions.md). Dans ce didacticiel, vous allez toutefois vous concentrer sur l'action de la [Republier](republish-rule-action.md) règle, qui publie le résultat de l'déclararionde requête sous forme de message MQTT avec un objet spécifique.

## Étape 1 : créer une AWS IoT règle pour republier un message MQTT
<a name="iot-repub-rule-define"></a>

La AWS IoT règle que vous allez créer dans ce didacticiel s'abonne aux rubriques `device/device_id/data` MQTT où *device\$1id* figure l'identifiant de l'appareil qui a envoyé le message. Ces rubriques sont décrites par un [filtre de rubrique](topics.md#topicfilters) en tan que `device/+/data`, où le `+` est un caractère générique correspondant à n'importe quelle chaîne située entre les deux barres obliques.

Lorsque la règle reçoit un message d'un objet correspondant, elle republie les valeurs `device_id` et `temperature` sous la forme d'un nouveau message MQTT avec l’ `device/data/temp` objet. 

Par exemple, la charge utile d'un message MQTT avec l’ `device/22/data` objet se présente comme suit :

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

La règle prend la `temperature` valeur de la charge utile du message et celle `device_id` de l'objet, et les republie sous forme de message MQTT avec le `device/data/temp` objet et une charge utile du message qui ressemblent à ceci :

```
{
  "device_id": "22",
  "temperature": 28
}
```

Avec cette règle, les appareils qui n'ont besoin que de l'identifiant de l'appareil et des données de température s'abonnent à la `device/data/temp` rubrique pour ne recevoir que ces informations.

**Pour créer une règle qui republie un message MQTT**

1. Ouvrez [le hub de **règles** de la AWS IoT console](https://console.aws.amazon.com//iot/home#/rulehub).

1. Dans **Règles**, choisissez **Créer** et commencez à créer votre nouvelle règle.

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

   1. Dans **Nom**, entrez le nom de la règle. Pour ce didacticiel, nommez le **republish\$1temp**.

      N'oubliez pas qu'un nom de règle doit être unique au sein de votre compte et de votre région, 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**, décrivez la règle. 

      Une description significative vous permet de vous souvenir 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. Dans l'**déclararionde requête règle** de **Create a rule** :

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

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

      ```
      SELECT topic(2) as device_id, temperature FROM 'device/+/data'
      ```

      Cette instruction :
      + Écoute les messages MQTT dont le objet correspond au filtre de `device/+/data` objet.
      + Sélectionne le deuxième élément dans la chaîne de l'objet et l'affecte au `device_id` champ.
      + Sélectionne le `temperature` champ de valeur dans la charge utile du message et l'affecte au `temperature` champ.

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

   1. Dans **Sélectionner une action**, choisissez **Republier un message dans un AWS IoT sujet**.

   1. Au bas de la liste d'actions, choisissez **Configurer l'action** pour ouvrir la page de configuration de l'action sélectionnée.

1. Sous **Configurer les actions** :

   1.  Dans **Sujet**, entrez **device/data/temp**. Il s'agit de l'objet MQTT du message que cette règle publiera. 

   1.  Dans **Qualité de service**, choisissez **0 - Le message est délivré zéro fois ou plus**. 

   1.  Dans **Choisir ou créer un rôle pour accorder AWS IoT l'accès pour effectuer cette action** :

      1.  Choisissez **Create Role** (Créer un rôle). La boîte de dialogue **Créer un rôle** s'ouvre. 

      1. Saisissez un nom qui décrit le nouveau rôle. Dans le cadre de ce tutoriel, utilisez **republish\$1role**. 

         Lorsque vous créez un nouveau rôle, les politiques appropriées pour exécuter l'action de la règle sont créées et associées au nouveau rôle. Si vous modifiez le objet de cette action de règle ou si vous utilisez ce rôle dans une autre action de règle, vous devez mettre à jour la politique de ce rôle afin d'autoriser le nouveau objet ou la nouvelle action. Pour mettre à jour un rôle existant, choisissez **Mettre à jour le rôle** dans cette section.

      1. Choisissez **Create Role** pour créer le rôle et fermer la boîte de dialogue. 

   1. Choisissez **Ajouter une action** pour ajouter l'action à la règle et revenez à la page **Créer une règle**. 

1. L'action **Republier un message dans un AWS IoT sujet** est désormais répertoriée dans **Définir une ou plusieurs actions**.

   Dans la vignette de la nouvelle action, sous **Republier un message dans un AWS IoT objet**, vous pouvez voir le objet dans lequel votre action de republication sera publiée.

   Il s'agit de la seule action de règle que vous ajouterez à cette règle.

1. Dans **Créer une règle**, faites défiler l'écran vers le bas et choisissez **Créer une règle** pour créer la règle et terminer cette étape.

## Étape 2 : Test de votre règle
<a name="iot-repub-rule-test"></a>

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

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 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 aux rubriques d'entrée, dans ce cas, `device/+/data`.

   1. Dans le client MQTT, sous Souscriptions, choisissez Publish to topic.

   1. Dans **Sujet d'abonnement**, entrez le objet du filtre de objet d'entrée,**device/\$1/data**.

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

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

      Dans la colonne **Abonnements**, la section **Publier dans un objet** **device/\$1/data** apparaît. 

1. Abonnez-vous à l’objet que votre règle publiera :`device/data/temp`.

   1. Sous **Abonnements**, choisissez **S’abonner à un objet** nouveau, puis dans **Sujet d'abonnement**, entrez l’objet du message republié,**device/data/temp**.

   1. Conservez les paramètres par défaut du reste des champs

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

      Dans la colonne **Abonnements**, la section **appareil/\$1/data**, **device/data/temp** apparaît. 

1. 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, sous **Souscriptions**, choisissez **Publier dans la rubrique**.

   1. Dans le champ **Publier**, entrez le nom de l'objet d'entrée, **device/22/data**.

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

   1. Pour envoyer votre message MQTT, choisissez **Publier dans le objet**.

1. Passez en revue les messages qui ont été envoyés.

   1. Dans le client MQTT, sous **Abonnements**, il y a un point vert à côté des deux objets auxquels vous vous êtes abonné précédemment.

      Les points verts indiquent qu'un ou plusieurs nouveaux messages ont été reçus depuis la dernière fois que vous les avez consultés.

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

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

   1. Sous **Abonnements**, choisissez **device/data/temp**de vérifier que la charge utile de vos messages republiés ressemble à ceci :

      ```
      {
        "device_id": "22",  
        "temperature": 28
      }
      ```

      Notez que la `device_id` valeur est une chaîne entre guillemets et que la `temperature` valeur est numérique. Cela est dû au fait que la [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) fonction a extrait la chaîne du nom de l'objet du message d'entrée tandis que la `temperature` valeur utilise la valeur numérique de la charge utile du message d'entrée.

      Si vous souhaitez transformer la `device_id` valeur en valeur numérique, remplacez-la `topic(2)` dans l'déclararionde requête de règle par :

      ```
      cast(topic(2) AS DECIMAL)
      ```

      Notez que la conversion de la `topic(2)` valeur en valeur numérique ne fonctionnera que si cette partie de la rubrique contient uniquement des caractères numériques.

1. Si vous constatez que le message correct a été publié dans le **device/data/temp**sujet, cela signifie que votre règle a fonctionné. Découvrez les informations supplémentaires que vous pouvez obtenir sur l'action Republier la règle dans la section suivante.

   Si vous ne voyez pas que le message correct a été publié sur l'**appareil/\$1/data** ou **device/data/temp**sur les rubriques, consultez les conseils de dépannage.

### Résolution des problèmes liés à la règle de republication des messages
<a name="iot-repub-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 votre message republié dans le client MQTT**  
Pour que votre règle fonctionne, elle doit disposer de la politique appropriée qui l'autorise à recevoir et à republier un message et elle doit recevoir le message.

**À 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 le objet du message republié dans l'action de la règle**  
Le objet auquel l'action Republier la règle publie le nouveau message doit correspondre au objet auquel vous vous êtes abonné dans le client MQTT.

    Ouvrez la règle que vous avez créée dans la console et vérifiez le objet dans lequel l'action de règle republiera le message.
  + 

**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 3 : examen des résultats et des étapes suivantes
<a name="iot-repub-rule-review"></a>

**Dans ce tutoriel**
+ Vous avez utilisé une simple requête SQL et quelques fonctions dans une instruction de requête de règle pour produire un nouveau message MQTT.
+ Vous avez créé une règle qui republie ce nouveau message.
+ Vous avez utilisé le client MQTT pour tester votre AWS IoT règle.

**Étapes suivantes**  
Après avoir republié quelques messages avec cette règle, essayez de l'utiliser pour voir comment la modification de certains aspects du didacticiel affecte le message republié. Voici quelques idées pour vous aider à démarrer.
+ Modifiez le *device\$1id* sujet du message d'entrée et observez l'effet sur la charge utile du message republié.
+ Modifiez les champs sélectionnés dans l'déclararionde requête de règle et observez l'effet sur la charge utile des messages republiés.
+ Essayez le prochain didacticiel de cette série et découvrez comment [Tutoriel : envoi d'une notification Amazon SNS](iot-sns-rule.md).

L'action Republier la règle utilisée dans ce didacticiel peut également vous aider à déboguer les instructions de requête relatives aux règles. Par exemple, vous pouvez ajouter cette action à une règle pour voir comment son déclararionde requête de règle met en forme les données utilisées par ses actions de règle.

# Tutoriel : envoi d'une notification Amazon SNS
<a name="iot-sns-rule"></a>

Ce didacticiel explique comment créer une AWS IoT règle qui envoie des données de message MQTT à une rubrique Amazon SNS afin qu'elles puissent être envoyées sous forme de SMS. 

Dans ce didacticiel, vous allez créer une règle qui envoie des données de message depuis un capteur météo à tous les abonnés d'une rubrique Amazon SNS, chaque fois que la température dépasse la valeur définie dans la règle. La règle détecte lorsque la température signalée dépasse la valeur définie par la règle, puis crée une nouvelle charge utile de message qui inclut uniquement l'identifiant de l'appareil, la température signalée et la limite de température dépassée. La règle envoie la charge du nouveau message sous forme de document JSON à une rubrique SNS, qui avertit tous les abonnés à la rubrique SNS.

**Ce que vous allez apprendre dans ce didacticiel :**
+ Comment créer et tester une notification Amazon SNS
+ Comment appeler une notification Amazon SNS à partir d'une règle AWS IoT 
+ 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**
+ [Étape 1 : créer une rubrique Amazon SNS qui envoie un message texte SMS](#iot-sns-rule-create-sns-topic)
+ [Étape 2 : créer une AWS IoT règle pour envoyer le message texte](#iot-sns-rule-create-rule)
+ [Étape 3 : tester la AWS IoT règle et la notification Amazon SNS](#iot-sns-rule-test-rule)
+ [Étape 4 : examen des résultats et des étapes suivantes](#iot-sns-rule-review-results)

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

**Révisé le [Amazon Simple Notification Service](https://docs.aws.amazon.com//sns/latest/dg/welcome.html)**  
Si vous n'avez jamais utilisé Amazon SNS auparavant, consultez [Configuration de l'accès à Amazon SNS.](https://docs.aws.amazon.com//sns/latest/dg/sns-setting-up.html) Si vous avez déjà suivi d'autres AWS IoT didacticiels, vous Compte AWS devriez déjà être correctement configuré.

## Étape 1 : créer une rubrique Amazon SNS qui envoie un message texte SMS
<a name="iot-sns-rule-create-sns-topic"></a>

Cette procédure explique comment créer la rubrique Amazon SNS à laquelle votre capteur météo peut envoyer des données de message. La rubrique Amazon SNS informera ensuite tous ses abonnés par SMS de la limite de température dépassée.

**Créer une rubrique Amazon SNS qui envoie un SMS**

1. **Créer une rubrique Amazon SNS**.

   1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com//sns/home).

   1. Dans le panneau de navigation de gauche, choisissez **Rubriques**.

   1. Sur la page **Rubriques**, choisissez **Créer une rubrique**.

   1. Dans **Détails**, choisissez le type **Standard**. Par défaut, la console crée une rubrique FIFO.

   1. Dans **Nom**, entrez le nom de la rubrique SNS. Dans le cadre de ce didacticiel, entrez **high\$1temp\$1notice**.

   1. Faites défiler la page jusqu'en bas et choisissez **Créer une rubrique**.

      La console ouvre la page **Détails** de la nouvelle rubrique.

1. **Créez un abonnement Amazon SNS.**
**Note**  
Le numéro de téléphone que vous utilisez dans cet abonnement peut entraîner des frais de messagerie texte en raison des messages que vous allez envoyer dans ce didacticiel.

   1. Sur la page des détails de la rubrique **high\$1temp\$1notice**, sélectionnez **Créer un abonnement**.

   1. Dans **Créer un abonnement**, dans la section **Détails**, dans la liste des **protocoles**, choisissez **SMS**.

   1. Dans **Endpoint**, entrez le numéro d'un téléphone pouvant recevoir des SMS. Assurez-vous de le saisir de telle sorte qu'il commence par un `+`, qu'il inclue le code du pays et de la région, et qu'il n'inclue aucun autre caractère de ponctuation.

   1. Choisissez **Créer un abonnement**.

1. **Testez la notification Amazon SNS.**

   1. Dans la [console Amazon SNS](https://console.aws.amazon.com//sns/home), dans le volet de navigation de gauche, choisissez **Rubrique**.

   1. Pour ouvrir la page de détails de l'objet, dans **Rubriques**, dans la liste des objets, choisissez **high\$1temp\$1notice**.

   1. Pour ouvrir la page **Publier le message dans le objet**, sur la page de détails de **high\$1temp\$1notice**, choisissez **Publier le message.**

   1. Dans **Publier le message dans le objet**, dans la section **Corps du message**, dans **le corps du message à envoyer au point de terminaison**, entrez un message court.

   1. Faites défiler la page vers le bas et choisissez **Publier des message**.

   1. Sur le téléphone avec le numéro que vous avez utilisé précédemment lors de la création de l'abonnement, confirmez que le message a bien été reçu.

   Si vous n'avez pas reçu le message de test, vérifiez le numéro de téléphone et les paramètres de votre téléphone.

   Assurez-vous de pouvoir publier des messages de test depuis la [console Amazon SNS](https://console.aws.amazon.com//sns/home) avant de poursuivre le didacticiel.

## Étape 2 : créer une AWS IoT règle pour envoyer le message texte
<a name="iot-sns-rule-create-rule"></a>

La AWS IoT règle que vous allez créer dans ce didacticiel s'abonne aux rubriques `device/device_id/data` MQTT où `device_id` figure l'identifiant de l'appareil qui a envoyé le message. Ces rubriques sont décrites dans un filtre de rubrique sous `device/+/data`, où la `+` est un caractère générique qui correspond à n'importe quelle chaîne de caractères comprise entre les deux barres obliques. Cette règle teste également la valeur du `temperature` champ dans la charge utile du message.

Lorsque la règle reçoit un message d'une rubrique correspondante, `device_id` elle prend du nom de l'objet, la `temperature` valeur de la charge utile du message, ajoute une valeur constante pour la limite qu'elle teste, puis envoie ces valeurs sous forme de document JSON à une rubrique de notification Amazon SNS. 

 Par exemple, un message MQTT provenant du capteur météo numéro 32 utilise le `device/32/data` objet et contient une charge utile du message qui ressemble à ceci : 

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

L'énoncé de la règle de la requête prend la `temperature` valeur de la charge de message, celle `device_id` du nom de l'objet, et ajoute la `max_temperature` valeur constante pour envoyer une charge utile de message qui ressemble à ceci à la rubrique Amazon SNS : 

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

**Pour créer une AWS IoT règle afin de détecter une valeur de température supérieure à la limite et de créer les données à envoyer à la rubrique Amazon SNS**

1. Ouvrez [le hub de **règles** de la AWS IoT console](https://console.aws.amazon.com//iot/home#/rulehub).

1. S'il s'agit de votre première règle, choisissez **Créer** ou **Créer une règle**.

1. Dans **Créer a règle**: :

   1. Pour **Name (Nom)**, entrez **temp\$1limit\$1notify**.

      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 mots du nom de la règle. 

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

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

   1.  Dans Utiliser** is a version SQL**, sélectionnez **2016-03-23**. 

   1. Dans la boîte d'édition Rôle d’instruction de requête entrez l'instruction : 

      ```
      SELECT topic(2) as device_id, 
          temperature as reported_temperature, 
          30 as max_temperature 
        FROM 'device/+/data' 
        WHERE temperature > 30
      ```

      Cette instruction :
      + Écoute les messages MQTT dont le objet correspond au filtre de `device/+/data` objet et dont la `temperature` valeur est supérieure à 30. 
      + Sélectionne le deuxième élément dans la chaîne de l'objet et l'affecte au `device_id` champ.
      + Sélectionne le `temperature` champ de valeur 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. 

1. Pour ouvrir la liste des actions de règle pour cette règle, dans **Définir une ou plusieurs actions**, choisissez **Ajouter une action**.

1. Dans **Sélectionner une action**, choisissez **Envoyer un message en tant que notification push SNS**.

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

1. Sous **Configurer les actions** :

   1. **Dans **SNS target**, choisissez **Select**, recherchez votre rubrique SNS nommée **high\$1temp\$1notice**, puis sélectionnez Select.**

   1. Pour **Format du message**, choisissez **RAW**.

   1. Dans **Choisir ou créer un rôle pour accorder AWS IoT l'accès pour effectuer cette action**, choisissez **Créer un rôle**.

   1. Dans **Créer un nouveau rôle**, dans **Nom**, entrez un nom unique pour le nouveau rôle. Dans le cadre de ce tutoriel, utilisez **sns\$1rule\$1role**.

   1. Choisissez **Créer un rôle**.

   Si vous répétez ce didacticiel ou si vous réutilisez un rôle existant, choisissez **Mettre à jour le rôle** avant de continuer. Cela met à jour le document de politique du rôle pour qu'il fonctionne avec la cible SNS.

1. Choisissez **Ajouter une action** et revenez à la page **Créer une règle**.

   Dans la vignette de la nouvelle action, sous **Envoyer un message sous forme de notification push SNS**, vous pouvez voir la rubrique SNS que votre règle appellera. 

   Il s'agit de la seule action de règle que vous ajouterez à cette règle.

1. Pour créer la règle et terminer cette étape, dans **Créer une règle**, faites défiler la page vers le bas et choisissez **Créer une règle**.

## Étape 3 : tester la AWS IoT règle et la notification Amazon SNS
<a name="iot-sns-rule-test-rule"></a>

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

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. Si vous quittez le client MQTT pour accéder à une autre page de la console, il ne conservera aucun abonnement ni journal de messages.

**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 aux rubriques d'entrée, dans ce cas, `device/+/data`.

   1. Dans le client MQTT, sous Souscriptions, choisissez Publish to topic.

   1. Dans **Sujet d'abonnement**, entrez le objet du filtre de objet d'entrée,**device/\$1/data**.

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

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

      Dans la colonne **Abonnements**, la section **Publier dans un objet** **device/\$1/data** apparaît. 

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

   1. Dans le client MQTT, sous **Souscriptions**, choisissez **Publier dans la rubrique**.

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

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

   1. Choisissez **Publier dans la rubrique** pour publier votre message.

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

   1. Dans le client MQTT, sous **Abonnements**, il y a un point vert à côté de l'objet auquel vous vous êtes abonné plus tôt.

      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.

   1. Sous **Abonnements**, choisissez **device/\$1/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
        }
      }
      ```

   1. Vérifiez le téléphone que vous avez utilisé pour vous abonner à la rubrique SNS et vérifiez que le contenu de la charge utile du message ressemble à ceci :

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

      Notez que la `device_id` valeur est une chaîne entre guillemets et que la `temperature` valeur est numérique. Cela est dû au fait que la [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) fonction a extrait la chaîne du nom de l'objet du message d'entrée tandis que la `temperature` valeur utilise la valeur numérique de la charge utile du message d'entrée.

      Si vous souhaitez transformer la `device_id` valeur en valeur numérique, remplacez-la `topic(2)` dans l'déclara l’instruction requête de règle par :

      ```
      cast(topic(2) AS DECIMAL)
      ```

      Notez que la conversion de la `topic(2)` valeur numérique, `DECIMAL` ne fonctionnera que si cette partie de l'objet contient uniquement des caractères numériques.

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

   1. Dans le client MQTT, sous **Souscriptions**, choisissez **Publier dans la rubrique**.

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

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

   1. Pour envoyer votre message MQTT, choisissez **Publier dans le objet**.

   Vous devriez voir le message que vous avez envoyé dans l'**device/\$1/data**abonnement. Toutefois, étant donné que la valeur de température est inférieure à la température maximale indiquée dans l'déclararionde 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 règle de message SNS
<a name="iot-sns-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 l’`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. 
+ 

**Si vous ne recevez pas le message :**  
Pour que votre règle fonctionne, elle doit disposer de la politique appropriée l'autorisant à recevoir un message et à envoyer une notification SNS, et elle doit recevoir le message.

**À 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 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 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 le objet du message republié dans l'action de la règle**  
Le objet auquel l'action Republier la règle publie le nouveau message doit correspondre au objet auquel vous vous êtes abonné dans le client MQTT.

    Ouvrez la règle que vous avez créée dans la console et vérifiez le objet dans lequel l'action de règle republiera le message.
  + 

**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
<a name="iot-sns-rule-review-results"></a>

**Dans ce tutoriel :**
+ Vous avez créé et testé une rubrique de notification Amazon SNS ainsi qu'un abonnement.
+ Vous avez utilisé une requête SQL simple et des fonctions dans une déclararionde requête de règle pour créer un nouveau message pour votre notification.
+ Vous avez créé une AWS IoT règle pour envoyer une notification Amazon SNS utilisant la charge utile de vos messages personnalisés.
+ Vous avez utilisé le client MQTT 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.
+ Modifiez le *device\$1id* 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 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. N'oubliez pas de changer le nom de `max_temperature` \$1
+ Ajoutez une action de règle de republication pour envoyer un message MQTT lorsqu'une notification SNS est envoyée.
+ Essayez le prochain didacticiel de cette série et découvrez comment [Tutoriel : Stockage des données de l'appareil dans une table DynamoDB](iot-ddb-rule.md) .

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

# Tutoriel : Formatage d'une notification à l'aide d'une AWS Lambda fonction
<a name="iot-lambda-rule"></a>

Ce didacticiel explique comment envoyer des données de message MQTT à 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é à la rubrique Amazon SNS que vous avez créée dans le didacticiel sur la procédure à suivre. [Tutoriel : envoi d'une notification Amazon SNS](iot-sns-rule.md)

Dans le didacticiel expliquant comment procéder[Tutoriel : envoi d'une notification Amazon SNS](iot-sns-rule.md), le document JSON issu de l'déclararionde 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 [publication SNS](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sns.html#SNS.Client.publish) 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 le AWS SDK dans une AWS Lambda fonction pour publier une notification Amazon SNS
+ 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 45 minutes.

**Topics**
+ [Étape 1 : créer une AWS Lambda fonction qui envoie un message texte](#iot-lambda-rule-create-lambda)
+ [Étape 2 : Création d'une AWS IoT règle avec une action de AWS Lambda règle](#iot-lambda-rule-create-rule)
+ [Étape 3 : tester la AWS IoT AWS Lambda règle et son action](#iot-lambda-rule-test-rule)
+ [Étape 4 : examen des résultats et des étapes suivantes](#iot-lambda-rule-next-steps)

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

**Vous avez terminé les autres didacticiels sur les règles de cette section**  
Ce didacticiel nécessite la rubrique de notification SNS que vous avez créée dans le didacticiel pour savoir comment [Tutoriel : envoi d'une notification Amazon SNS](iot-sns-rule.md). Cela suppose également que vous avez suivi les autres didacticiels relatifs aux règles de cette section.
+ 

**J'ai revu l'[AWS Lambda](https://docs.aws.amazon.com//lambda/latest/dg/welcome.html) aperçu**  
Si vous ne l'avez jamais utilisé AWS Lambda auparavant, consultez le [AWS Lambda](https://docs.aws.amazon.com//lambda/latest/dg/welcome.html)guide [Getting started with Lambda](https://docs.aws.amazon.com//lambda/latest/dg/getting-started.html) pour en apprendre les termes et les concepts.

## Étape 1 : créer une AWS Lambda fonction qui envoie un message texte
<a name="iot-lambda-rule-create-lambda"></a>

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 comment[Tutoriel : envoi d'une notification Amazon SNS](iot-sns-rule.md), qui utilisait une action de AWS IoT règle pour envoyer la notification, ce didacticiel envoie la notification à partir de la fonction Lambda à l'aide d'une fonction du AWS SDK. Le objet des notifications Amazon SNS utilisé dans ce didacticiel est toutefois le même que celui que vous avez utilisé dans le didacticiel expliquant comment procéder. [Tutoriel : envoi d'une notification Amazon SNS](iot-sns-rule.md)

**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](https://console.aws.amazon.com//lambda/home), choisissez **Créer une fonction**.

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

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

   1. Dans **Informations de base** :

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

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

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

      1. Dans **Modèles de politiques- *(facultatif)***, recherchez et sélectionnez la politique de **publication Amazon SNS**.

      1. Choisissez **Créer une fonction**.

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

   1. Après avoir créé votre fonction, vous devriez voir la page de **format-high-temp-notification**détails. Si ce n'est pas le cas, ouvrez-le depuis la page des [Lambda**fonctions**](https://console.aws.amazon.com//lambda/home#/functions).

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

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

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

   1. Choisissez **Déployer**.

1. Dans une nouvelle fenêtre, recherchez l'Amazon Resource Name (ARN) de votre rubrique Amazon SNS [Tutoriel : envoi d'une notification Amazon SNS](iot-sns-rule.md)

   1. Dans une nouvelle fenêtre ouvrez la [Topics (Rubriques) de la console Amazon SNS](https://console.aws.amazon.com//sns/v3/home#/topics). 

   1. Sur la page **Rubriques**, recherchez la rubrique de notification **high\$1temp\$1notice** dans la liste des rubriques Amazon SNS.

   1. Trouvez l'**ARN** de la rubrique de notification **high\$1temp\$1notice** à utiliser à l'étape suivante.

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

   1. Sur la page [**Fonctions** Lambda](https://console.aws.amazon.com//lambda/home#/functions) de la console, sur la page de **format-high-temp-notification**dé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 choisissez **Configurer les événements de test**.

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

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

   1. Dans l'éditeur JSON sous **Nom de l'événement**, collez cet exemple de document JSON. 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"
      }
      ```

   1. Reportez-vous à la fenêtre contenant l'**ARN** de la rubrique de notification **high\$1temp\$1notice** et copiez la valeur de l'ARN.

   1. Remplacez la `notify_topic_arn` valeur dans l'éditeur JSON par l'ARN de votre objet de notification.

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

   1. Choisissez **Créer**.

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

   1. Sur la page de **format-high-temp-notification**détails, dans le coin supérieur droit de la page, vérifiez que cela **SampleRuleOutput**apparaî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.

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

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](https://console.aws.amazon.com//iot/home#/rulehub).

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

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

   1. Dans **Nom**, entrez le nom de la règle, **wx\$1friendly\$1text**.

      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**, 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. Dans l'**déclararionde requête règle** de **Create a rule** :

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

   1. 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 messages MQTT dont le objet correspond au filtre de `device/+/data` objet 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.

   1. Reportez-vous à la fenêtre contenant l'**ARN** de la rubrique de notification **high\$1temp\$1notice** et copiez la valeur de l'ARN.

   1. Remplacez la valeur ARN (*arn:aws:sns:us-east-1:57EXAMPLE833:high\$1temp\$1notice*) dans l'éditeur d'instructions de requête de règle par l'ARN de votre sujet de notification.

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

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

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

1. Sous **Configurer les actions** :

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

   1. Sélectionnez **format-high-temp-notification**.

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

   1. 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 IoT AWS Lambda règle et son action
<a name="iot-lambda-rule-test-rule"></a>

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

Ouvrez le [client MQTT dans la AWS IoT console](https://console.aws.amazon.com//iot/home#/test) dans une nouvelle fenêtre. Vous pouvez désormais modifier la règle sans perdre la configuration de votre client MQTT. Si vous quittez le client MQTT pour accéder à une autre page de la console, vous perdrez vos abonnements ou vos journaux de messages.

**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 aux rubriques d'entrée, dans ce cas, `device/+/data`.

   1. Dans le client MQTT, sous Souscriptions, choisissez Publish to topic.

   1. Dans **Sujet d'abonnement**, entrez le objet du filtre de objet d'entrée,**device/\$1/data**.

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

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

      Dans la colonne **Abonnements**, la section **Publier dans un objet** **device/\$1/data** apparaît. 

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

   1. Dans le client MQTT, sous **Souscriptions**, choisissez **Publier dans la rubrique**.

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

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

   1. Choisissez Publier dans la rubrique pour publier votre message dans .

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

   1. Dans le client MQTT, sous **Abonnements**, il y a un point vert à côté de l'objet auquel vous vous êtes abonné plus tôt.

      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.

   1. Sous **Abonnements**, choisissez **device/\$1/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
        }
      }
      ```

   1. Vérifiez le téléphone que vous avez utilisé pour vous abonner à la rubrique SNS 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.

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

   1. Dans le client MQTT, sous **Souscriptions**, choisissez **Publier dans la rubrique**.

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

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

   1. Pour envoyer votre message MQTT, choisissez **Publier dans le objet **.

   Vous devriez voir le message que vous avez envoyé dans l'**device/\$1/data**abonnement ; 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
<a name="iot-lambda-rule-troubleshoot"></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 l’`device/32/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. 
+ 

**Si vous ne recevez pas le message :**  
Pour que votre règle fonctionne, elle doit disposer de la politique appropriée l'autorisant à recevoir un message et à envoyer une notification SNS, et elle doit recevoir le message.

**À 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 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 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 la notification Amazon SNS**  
Dans[Étape 1 : créer une rubrique Amazon SNS qui envoie un message texte SMS](iot-sns-rule.md#iot-sns-rule-create-sns-topic), reportez-vous à l'étape 3 qui décrit comment tester la notification Amazon SNS 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](#iot-lambda-rule-create-lambda), 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
<a name="iot-lambda-rule-next-steps"></a>

**Dans ce tutoriel :**
+ Vous avez créé une AWS IoT règle pour appeler une fonction Lambda qui envoyait une notification Amazon SNS utilisant la charge utile de vos messages personnalisés.
+ Vous avez utilisé une requête SQL simple et des fonctions dans une déclararionde requête de règle pour créer une nouvelle charge utile de message pour votre fonction Lambda.
+ Vous avez utilisé le client MQTT 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.
+ Modifiez le *device\$1id* 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, consultez[Surveillance AWS IoT](monitoring_overview.md).