

# Agregación de un destino para el dispositivo final de Sidewalk
<a name="iot-sidewalk-qsg-destination"></a>

Use reglas de AWS IoT para procesar los datos y los mensajes del dispositivo y enrutarlos a otros servicios. También puede definir reglar para procesar los mensajes binarios recibidos desde un dispositivo y convertirlos a otros formatos que faciliten su uso por parte de otros servicios. Los destinos asocian el dispositivo final de Sidewalk a la regla que procesa los datos del dispositivo para enviarlos a otros Servicio de AWSs.

## Cómo crear y usar un destino
<a name="iot-sidewalk-destination-how"></a>

1. Cree una regla de AWS IoT y un rol de IAM para el destino. La regla de AWS IoT especifica las reglas que procesarán los datos del dispositivo y los enrutarán para que los utilicen otros Servicio de AWSs y las aplicaciones. El rol de IAM concede permiso para acceder a la regla.

1. Cree un destino para sus dispositivos de Sidewalk mediante la operación `CreateDestination` de la API. Especifique el nombre del destino, el nombre de la regla, el nombre del rol y cualquier parámetro opcional. La API devolverá un identificador único para el destino, que podrá especificar al añadir el dispositivo final a AWS IoT Core para Amazon Sidewalk.

A continuación, se muestra cómo crear un destino, una regla de AWS IoT y un rol de IAM para el destino.

**Topics**
+ [

## Cómo crear y usar un destino
](#iot-sidewalk-destination-how)
+ [

# Creación de un destino para el dispositivo de Sidewalk
](iot-sidewalk-destination-create.md)
+ [

# Creación de un rol de IAM y una regla de IoT para el destino
](sidewalk-destination-rule-role.md)

# Creación de un destino para el dispositivo de Sidewalk
<a name="iot-sidewalk-destination-create"></a>

Puede añadir un destino a la cuenta de AWS IoT Core para Amazon Sidewalk mediante el [Centro de destinos](https://console.aws.amazon.com/iot/home#/wireless/destinations) o utilizando `CreateDestination`. Al crear el destino, especifique:
+ Un nombre único para el destino que se utilizará en el dispositivo final de Sidewalk.
**nota**  
Si ya agregó el dispositivo con un nombre de destino, debe usar ese nombre al crear el destino. Para obtener más información, consulte [Paso 2: Agregación del dispositivo de Sidewalk](iot-sidewalk-add-device.md#iot-sidewalk-device-create). 
+ El nombre de la regla de AWS IoT que procesará los datos del dispositivo y el tema en el que se publicarán los mensajes.
+ Un rol de IAM que concede a los datos del dispositivo el permiso para acceder a la regla.

A continuación, se muestra cómo crear la regla de AWS IoT y el rol de IAM para el destino.

## Creación de un destino (consola)
<a name="iot-sidewalk-destination-create-console"></a>

Para crear un destino mediante la consola de AWS IoT, vaya al [Centro de destinos](https://console.aws.amazon.com/iot/home#/wireless/destinations) y elija **Agregar destino**.

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


Para procesar los datos de un dispositivo, especifique los siguientes campos al crear un destino y, a continuación, elija **Agregar destino**.
+ 

**Detalles de destino**  
Introduzca un **Nombre de destino** y una descripción opcional para su destino.
+ 

**Nombre de la regla**  
La regla de AWS IoT que se configura para evaluar los mensajes enviados por el dispositivo y procesar los datos del dispositivo. El nombre de la regla se asignará a su destino. El destino requiere que la regla procese los mensajes que recibe. Puede elegir que los mensajes se procesen invocando una regla de AWS IoT o publicándolos en el agente de mensajes de AWS IoT.
  + Si selecciona **Introducir un nombre de regla**, introduzca un nombre y, a continuación, elija **Copiar** para copiar el nombre de la regla que introducirá al crear la regla de AWS IoT. Puede elegir **Crear regla** para crear la regla ahora o ir al [Centro de reglas](https://console.aws.amazon.com/iot/home#/create/rule) de la consola de AWS IoT y crear una regla con ese nombre.

    También puede introducir una regla y usar la configuración **Avanzada** para especificar el nombre de un tema. El nombre del tema se proporciona durante la invocación de la regla y se accede a él mediante la expresión `topic` incluida en la regla. Para obtener más información sobre las reglas de AWS IoT, consulte [Reglas de AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules.html).
  + Si elige **Publicar en el agente de mensajes de AWS IoT**, introduzca el nombre del tema. A continuación, puede copiar el nombre del tema de MQTT y varios suscriptores podrán suscribirse a este tema para recibir los mensajes publicados sobre ese tema. Para obtener más información, consulte [Temas de MQTT](https://docs.aws.amazon.com/iot/latest/developerguide/topics.html).

  Para obtener más información sobre las reglas de AWS IoT para los destinos, consulte [Creación de reglas para procesar mensajes de dispositivos LoRaWAN](https://docs.aws.amazon.com/iot/latest/developerguide/connect-iot-lorawan-destination-rules.html).
+ 

**Nombre de rol**  
El rol de IAM que concede a los datos del dispositivo el permiso para acceder a la regla nombrada **Nombre de regla**. En la consola, elija un rol de servicio existente o cree uno nuevo. Si va a crear un nuevo rol de servicio, puede introducir un nombre de rol (por ejemplo, **SidewalkDestinationRole**) o dejarlo en blanco para que AWS IoT Core para LoRaWAN genere un nuevo nombre de rol. AWS IoT Core para LoRaWAN creará automáticamente el rol de IAM con los permisos adecuados en su nombre.

## Creación de un destino (CLI)
<a name="iot-sidewalk-destination-create-cli"></a>

Para crear un destino, utilice la operación [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) de la API o el comando [https://docs.aws.amazon.com/cli/latest/reference/create-destination.html](https://docs.aws.amazon.com/cli/latest/reference/create-destination.html) de la CLI. Por ejemplo, el comando siguiente crea un destino para su dispositivo final de Sidewalk:

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

La ejecución de este comando devuelve los detalles del destino, que incluyen el nombre de recurso de Amazon (ARN) y el nombre del destino.

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

Para obtener más información sobre crear un destino, consulte [Creación de reglas para procesar mensajes de dispositivos LoRaWAN](https://docs.aws.amazon.com/iot/latest/developerguide/connect-iot-lorawan-destination-rules.html).

# Creación de un rol de IAM y una regla de IoT para el destino
<a name="sidewalk-destination-rule-role"></a>

Las reglas de AWS IoT envían mensajes del dispositivo a otros servicios. Las reglas de AWS IoT también pueden procesar los mensajes binarios recibidos de un dispositivo final Sidewalk para que los utilicen otros servicios. Los destinos de AWS IoT Core para Amazon Sidewalk asocian un dispositivo inalámbrico a la regla que procesa los datos de los mensajes del dispositivo para enviarlos a otros servicios. La regla actúa sobre los datos del dispositivo en cuanto AWS IoT Core para Amazon Sidewalk los recibe. Para todos los dispositivos que envían sus datos al mismo servicio, puede crear un destino que puedan compartir todos los dispositivos. También debe crear un rol de IAM que conceda permiso para enviar datos a la regla.

## Creación de un rol de IAM para los destinos
<a name="iot-sidewalk-destination-role"></a>

Cree un rol de IAM que le conceda a AWS IoT Core para Amazon Sidewalk el permiso necesario para enviar datos a la regla de AWS IoT. Para crear el rol, utilice la operación [https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html) de la API o el comando [https://docs.aws.amazon.com/cli/latest/reference/iam/create-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role) de la CLI. Puede nombrar el rol como *`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"}]}'
```

También puede definir la política de confianza para el rol con un archivo JSON.

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

A continuación se muestra el contenido del archivo JSON.

**Contenido de trust-policy.json**

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

## Creación de una regla para el destino
<a name="iot-sidewalk-destination-rule"></a>

Para crear una regla, utilice la operación [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateTopicRule.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateTopicRule.html) de la API de AWS IoT Core o el comando [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) de la AWS CLI. El destino utilizará la regla del tema para enrutar los datos recibidos del dispositivo final de Sidewalk a otros Servicios de AWS. Por ejemplo, puede crear una acción de regla que envíe un mensaje a una función de Lambda. Puede definir la función de Lambda de manera que reciba los datos de la aplicación del dispositivo y utilice base64 para decodificar los datos de la carga para que puedan utilizarlos otras aplicaciones.

En los pasos siguientes se muestra cómo se crea la función de Lambda y, a continuación, una regla del tema que envía un mensaje a esta función.

1. 

**Creación de un rol y una política de ejecución**

   Cree el rol de IAM que concederá a su función permiso para obtener acceso a los recursos de AWS. También puede definir la política de confianza para el rol con un archivo JSON.

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

   A continuación se muestra el contenido del archivo JSON.

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

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

1. 

**Creación y prueba de la función de Lambda**

   Realice los siguientes pasos para crear una función de AWS Lambda que en base64 decodifique los datos de la carga.

   1. Escriba el código para decodificar los datos de la carga. Por ejemplo, puede usar el siguiente código Python de muestra. Especifique un nombre para el script, como *`base64_decode.py`*.

      **Contenido del archivo 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. Cree un paquete de implementación como un archivo zip que contenga el archivo Python y asígnele el nombre `base64_decode.zip`. Utilice la `CreateFunction` de la API o el comando `create-function` de la CLI para crear una función de Lambda para el código de ejemplo, *`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
      ```

      Debería ver la siguiente salida. Utilizará el valor del nombre de recurso de Amazon (ARN) de la salida, `FunctionArn`, al crear la regla del tema.

      ```
      {
          "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. Para obtener registros para una invocación desde la línea de comandos, utilice la opción `--log-type` con el comando `invoke`. La respuesta incluye un campo LogResult que contiene hasta 4 KB de registros con codificación base64 a partir de la invocación. 

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

      Debe recibir una respuesta con un `StatusCode` de 200. Para obtener más información acerca de la creación y el uso de las funciones de Lambda de la AWS CLI, consulte [Uso de Lambda con la AWS CLI](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-awscli.html).

1. Creación de una regla del tema

   Utilice la `CreateTopicRule` de la API o el comando `create-topic-rule` de la CLI para crear una regla del tema que envíe un mensaje a esta función de Lambda. También puede añadir una segunda acción de regla que vuelva a publicar en un tema de AWS IoT. Asigne a esta regla del tema el nombre `Sidewalkrule`.

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

   Puede usar el archivo `myrule.json` para especificar más detalles sobre la regla. Por ejemplo, el siguiente archivo JSON muestra cómo volver a publicar un tema de AWS IoT y enviar un mensaje a una función de 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"
                }
           }
       ],
   }
   ```