

# Ajoutez une destination pour votre terminal Sidewalk
<a name="iot-sidewalk-qsg-destination"></a>

Utilisez des règles AWS IoT pour traiter les données et les messages de l’appareil et les acheminer vers d’autres services. Vous pouvez également définir des règles pour traiter les messages binaires reçus d’un appareil et les convertir dans d’autres formats afin de faciliter leur utilisation par d’autres services. Les destinations associent votre terminal Sidewalk à la règle qui traite les données de l’appareil pour les envoyer à d’autres Service AWS.

## Comment créer et utiliser une destination
<a name="iot-sidewalk-destination-how"></a>

1. Créez une règle AWS IoT et un rôle IAM pour la destination. La règle AWS IoT spécifie les règles qui traiteront les données de l’appareil et les achemineront pour qu’elles soient utilisées par d’autres Service AWS et par vos applications. Le rôle IAM accorde l’autorisation d’accéder à la règle.

1. Créez une destination pour vos appareils Sidewalk à l’aide de l’opération de l’API `CreateDestination`. Spécifiez le nom de la destination, le nom de la règle, le nom du rôle et tous les paramètres facultatifs. L’API renvoie un identifiant unique pour la destination, que vous pouvez spécifier lors de l’ajout de votre terminal à AWS IoT Core pour Amazon Sidewalk.

Ce qui suit montre comment créer une destination, ainsi qu’une règle AWS IoT et un rôle IAM pour la destination.

**Topics**
+ [Comment créer et utiliser une destination](#iot-sidewalk-destination-how)
+ [Créez une destination pour votre appareil Sidewalk](iot-sidewalk-destination-create.md)
+ [Créer un rôle IAM et une règle IoT pour votre destination](sidewalk-destination-rule-role.md)

# Créez une destination pour votre appareil Sidewalk
<a name="iot-sidewalk-destination-create"></a>

Vous pouvez ajouter une destination à votre compte pour AWS IoT Core pour Amazon Sidewalk soit à l’aide du [hub Destinations](https://console.aws.amazon.com/iot/home#/wireless/destinations), soit à l’aide de `CreateDestination`. Lors de la création de votre destination, spécifiez :
+ Un nom unique pour la destination à utiliser pour votre terminal Sidewalk.
**Note**  
Si vous avez déjà ajouté votre appareil en utilisant un nom de destination, vous devez utiliser ce nom lors de la création de votre destination. Pour en savoir plus, consultez [Étape 2 : Ajouter votre appareil Sidewalk](iot-sidewalk-add-device.md#iot-sidewalk-device-create). 
+ Le nom de la règle AWS IoT qui traitera les données de l’appareil et le sujet dans lequel les messages sont publiés.
+ Rôle IAM qui accorde aux données de l’appareil l’autorisation d’accéder à la règle.

Les sections suivantes décrivent comment créer la règle AWS IoT et le rôle IAM pour votre destination.

## Créer une destination (console)
<a name="iot-sidewalk-destination-create-console"></a>

Pour créer une destination à l’aide de la console AWS IoT, accédez au [centre Destinations](https://console.aws.amazon.com/iot/home#/wireless/destinations) et choisissez **Ajouter une destination**.

![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/iot-wireless/latest/developerguide/images/iot-sidewalk-add-destination.PNG)


Pour traiter les données d’un appareil, spécifiez les champs suivants lors de la création d’une destination, puis choisissez **Ajouter une destination**.
+ 

**Détails de la destination**  
Entrez un **nom de destination** et une description facultative pour votre destination.
+ 

**Nom de la règle**  
La règle AWS IoT configurée pour évaluer les messages envoyés par votre appareil et traiter les données de celui-ci. Le nom de la règle sera mappé à votre destination. La destination a besoin de la règle pour traiter les messages qu’elle reçoit. Vous pouvez choisir de traiter les messages en invoquant une règle AWS IoT ou en les publiant sur l’agent de messages AWS IoT.
  + Si vous choisissez **Entrez un nom de règle**, entrez un nom, puis choisissez **Copier** pour copier le nom de règle que vous allez entrer lors de la création de la règle AWS IoT. Vous pouvez soit choisir **Créer une règle** pour créer la règle maintenant, soit accéder au centre de [règles](https://console.aws.amazon.com/iot/home#/create/rule) de la AWS IoT console et créer une règle portant ce nom.

    Vous pouvez également entrer une règle et utiliser le paramètre **Avancé** pour spécifier un nom de rubrique. Le nom du sujet est fourni lors de l’invocation de la règle et est accessible à l’aide de l’expression `topic` contenue dans la règle. Pour plus d’informations sur les règles AWS IoT, consultez [AWS IoT Règles](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules.html).
  + Si vous choisissez **Publier sur AWS IoT l’agent de messages**, entrez le nom du sujet. Vous pouvez ensuite copier le nom du sujet MQTT et plusieurs abonnés peuvent s’abonner à ce sujet pour recevoir les messages publiés sur ce sujet. Pour plus d’informations, consultez [les rubriques MQTT](https://docs.aws.amazon.com/iot/latest/developerguide/topics.html).

  Pour plus d’informations sur les règles AWS IoT relatives aux destinations, voir [Créer des règles pour traiter les messages des appareils LoRaWAN](https://docs.aws.amazon.com/iot/latest/developerguide/connect-iot-lorawan-destination-rules.html).
+ 

**Nom du rôle**  
Le rôle IAM qui autorise les données de l’appareil à accéder à la règle nommée dans **Nom de la règle**. Dans la console, vous pouvez créer une nouvelle fonction du service ou sélectionner une fonction du service existant. Si vous créez un nouvelle fonction du service, vous pouvez soit entrer un nom de rôle (par exemple,**SidewalkDestinationRole**), soit le laisser vide AWS IoT Core for LoRaWAN pour générer un nouveau nom de rôle. AWS IoT Core for LoRaWAN créera ensuite automatiquement le rôle IAM avec les autorisations appropriées en votre nom.

## Créer une destination (CLI)
<a name="iot-sidewalk-destination-create-cli"></a>

Pour créer une destination, utilisez l’opération de l’API [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_CreateDestination.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_CreateDestination.html) ou la commande CLI [https://docs.aws.amazon.com/cli/latest/reference/create-destination.html](https://docs.aws.amazon.com/cli/latest/reference/create-destination.html). Par exemple, la commande suivante crée une destination pour votre terminal Sidewalk :

```
aws iotwireless create-destination --name SidewalkDestination \
    --expression-type RuleName --expression SidewalkRule \
    --role-arn arn:aws:iam::123456789012:role/SidewalkRole
```

L’exécution de cette commande renvoie les détails de destination, notamment l’Amazon Resource Name (ARN) et le nom de destination.

```
{
    "Arn": "arn:aws:iotwireless:us-east-1:123456789012:Destination/SidewalkDestination",
    "Name": "SidewalkDestination"
}
```

Pour plus d’informations sur la création d’une destination, consultez [Création de règles pour traiter les messages des appareils LoRaWAN](https://docs.aws.amazon.com/iot/latest/developerguide/connect-iot-lorawan-destination-rules.html).

# Créer un rôle IAM et une règle IoT pour votre destination
<a name="sidewalk-destination-rule-role"></a>

Les règles AWS IoT envoient des messages de l’appareil à d’autres services. Les règles AWS IoT peuvent également traiter les messages binaires reçus d’un terminal Sidewalk pour que d’autres services puissent les utiliser. Les destinations AWS IoT Core pour Amazon Sidewalk associent un appareil sans fil à la règle qui traite les données des messages de l’appareil pour les envoyer à d’autres services. La règle agit sur les données de l’appareil dès qu’AWS IoT Core pour Amazon Sidewalk les reçoit. Pour tous les appareils qui envoient leurs données au même service, vous pouvez créer une destination qui peut être partagée par tous les appareils. Vous devez également créer un rôle IAM qui autorise l’envoi de données à la règle.

## Créer un rôle IAM pour votre destination
<a name="iot-sidewalk-destination-role"></a>

Créez un rôle IAM qui autorise AWS IoT Core pour Amazon Sidewalk à envoyer des données à la règle AWS IoT. Pour créer le rôle, utilisez l’opération d’API [https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html) ou la commande CLI [https://docs.aws.amazon.com/cli/latest/reference/iam/create-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role). Vous pouvez nommer le rôle comme *`SidewalkRole`*.

```
aws iam create-role --role-name SidewalkRole \ 
    --assume-role-policy-document '{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}'
```

Vous pouvez également définir la politique d’approbation pour le rôle à l’aide d’un fichier JSON.

```
aws iam create-role --role-name SidewalkRole \ 
    --assume-role-policy-document file://trust-policy.json
```

L’exemple suivant affiche le contenu du fichier JSON.

**Contenu de trust-policy.json**

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

## Créez une règle pour votre destination
<a name="iot-sidewalk-destination-rule"></a>

Utilisez l’opération de l’API, AWS IoT Core [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateTopicRule.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateTopicRule.html), ou la commande AWS CLI, [https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html](https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html), pour créer une règle. La règle du sujet sera utilisée par votre destination pour acheminer les données reçues de votre terminal Sidewalk vers un autre Services AWS. Par exemple, vous pouvez créer une action de règle qui envoie un message à une fonction Lambda. Vous pouvez définir la fonction Lambda de telle sorte qu’elle reçoive les données d’application de votre appareil et utilise le base64 pour décoder les données de charge utile afin qu’elles puissent être utilisées par d’autres applications.

Les étapes suivantes montrent comment créer la fonction Lambda, puis une règle de rubrique qui envoie un message à cette fonction.

1. 

**Créer un rôle et une stratégie d’exécution**

   Créez un rôle IAM qui accorde à votre fonction la permission d'accéder aux ressources AWS. Vous pouvez également définir la politique d’approbation pour le rôle à l’aide d’un fichier JSON.

   ```
   aws iam create-role --role-name lambda-ex \ 
       --assume-role-policy-document file://lambda-trust-policy.json
   ```

   L’exemple suivant affiche le contenu du fichier JSON.

   **Contenu de lambda-trust-policy.json**

   ```
   {
     "Version": "2012-10-17",
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "lambda.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

1. 

**Créer et tester la fonction Lambda.**

   Procédez comme suit pour créer une fonction AWS Lambda qui décode les données de charge utile en base64.

   1. Écrivez le code pour décoder les données de charge utile. Par exemple, vous pouvez utiliser l’exemple de code Python suivant. Spécifiez un nom pour le script, par exemple *`base64_decode.py`*.

      **Contenu du fichier base64\$1decode.py**

      ```
      // -----------------------------------------------------------
      // ----- Python script to decode incoming binary payload -----
      // -----------------------------------------------------------
      import json
      import base64
      
      def lambda_handler(event, context):
      
          message = json.dumps(event)
          print (message)
      
          payload_data = base64.b64decode(event["PayloadData"])
          print(payload_data)
          print(int(payload_data,16))
      ```

   1. Créez un package de déploiement sous la forme d’un fichier zip contenant le fichier Python et nommez-le comme `base64_decode.zip`. Utilisez l’API `CreateFunction` ou la commande CLI `create-function` pour créer une fonction Lambda pour l’exemple de code, *`base64_decode.py`*.

   1. 

      ```
      aws lambda create-function --function-name my-function \
      --zip-file fileb://base64_decode.zip --handler index.handler \ 
      --runtime python3.9 --role arn:aws:iam::123456789012:role/lambda-ex
      ```

      Le résultat suivant doit s'afficher. Vous utiliserez la valeur Amazon Resource Name (ARN) de la sortie, `FunctionArn`, lors de la création de la règle de sujet.

      ```
      {
          "FunctionName": "my-function",
          "FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function",
          "Runtime": "python3.9",
          "Role": "arn:aws:iam::123456789012:role/lambda-ex",
          "Handler": "index.handler",
          "CodeSha256": "FpFMvUhayLkOoVBpNuNiIVML/tuGv2iJQ7t0yWVTU8c=",
          "Version": "$LATEST",
          "TracingConfig": {
              "Mode": "PassThrough"
          },
          "RevisionId": "88ebe1e1-bfdf-4dc3-84de-3017268fa1ff",
          ...
      }
      ```

   1. Pour obtenir les journaux d’une invocation à partir de la ligne de commande, utilisez l’option `--log-type` avec la commande `invoke`. La réponse inclut un champ LogResult qui contient jusqu’à 4 Ko de journaux codés en base64 provenant de l’invocation. 

      ```
      aws lambda invoke --function-name my-function out --log-type Tail
      ```

      Vous devez recevoir une réponse avec un `StatusCode` de 200. Pour plus d’informations sur la création et l’utilisation de fonction Lambda à partir de AWS CLI, consultez [Utiliser une fonction Lambda avec AWS CLI](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-awscli.html).

1. Créer une règle de rubrique 

   Utilisez l’API `CreateTopicRule` ou la commande CLI `create-topic-rule` pour créer une règle de rubrique qui envoie un message à cette fonction Lambda. Vous pouvez également ajouter une deuxième action de règle qui republie dans une rubrique AWS IoT. Donnez à cette règle de rubrique le nom `Sidewalkrule`.

   ```
   aws iot create-topic-rule --rule-name Sidewalkrule \ 
       --topic-rule-payload file://myrule.json
   ```

   Vous pouvez utiliser le fichier `myrule.json` pour spécifier plus de détails sur la règle. Par exemple, le fichier JSON suivant montre comment republier dans une rubrique AWS IoT et envoyer un message à une fonction Lambda.

   ```
   {
       "sql": "SELECT * ",
       "actions": [
          {
               // You obtained this functionArn when creating the Lambda function using the 
               // create-function command.
               "lambda": {
                   "functionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function"
                }
           },
           {
               // This topic can be used to observe messages exchanged between the device and 
               // AWS IoT Core for Amazon Sidewalk after the device is connected.
                "republish": {
                    "roleArn": "arn:aws:iam::123456789012:role/service-role/SidewalkRepublishRole",
                    "topic": "project/sensor/observed"
                }
           }
       ],
   }
   ```