

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Tutorial: Instalación y configuración del cliente de AWS IoT dispositivos
<a name="iot-dc-install-dc"></a>

Este tutorial explica cómo instalar y configurar el AWS IoT Device Client y cómo crear los AWS IoT recursos que utilizará en esta y otras demostraciones.

**Para comenzar este tutorial:**
+ Tenga preparados su ordenador host local y la Raspberry Pi [del tutorial anterior](iot-dc-prepare-device.md).

Para completar este tutorial se necesitan aproximadamente 90 minutos.

**Cuando haya terminado con este tema:**
+ Su dispositivo IoT estará listo para usarse en otras demostraciones de AWS IoT Device Client.
+ Habrás aprovisionado tu dispositivo IoT. AWS IoT Core
+ Habrás descargado e instalado el AWS IoT Device Client en tu dispositivo.
+ Habrá guardado una imagen de la tarjeta microSD de su dispositivo que podrá usar en tutoriales posteriores.

**Equipo necesario:**
+ Su entorno local de desarrollo y pruebas de [la sección anterior](iot-dc-prepare-device-test.md)
+ La Raspberry Pi que utilizó en [la sección anterior](iot-dc-prepare-device-test.md)
+ La tarjeta de memoria microSD de la Raspberry Pi que utilizó [en la sección anterior](iot-dc-prepare-device-test.md)

**Topics**
+ [Descarga y guarda el cliente AWS IoT del dispositivo](iot-dc-install-download.md)
+ [Aprovisione su Raspberry Pi en AWS IoT](iot-dc-install-provision.md)
+ [Configura el cliente AWS IoT del dispositivo para probar la conectividad](iot-dc-install-configure.md)

# Descarga y guarda el cliente AWS IoT del dispositivo
<a name="iot-dc-install-download"></a>

Los procedimientos de esta sección descargan el AWS IoT Device Client, lo compilan y lo instalan en su Raspberry Pi. Después de probar la instalación, puede guardar la imagen de la tarjeta microSD de la Raspberry Pi para usarla más tarde cuando quiera volver a probar los tutoriales.

**Topics**
+ [Descarga y crea el cliente de AWS IoT dispositivo](#iot-dc-install-dc-download)
+ [Creación de los directorios utilizados en los tutoriales](#iot-dc-install-dc-files)
+ [(Opcional) Guardar la imagen de la tarjeta microSD](#iot-dc-install-dc-save)

## Descarga y crea el cliente de AWS IoT dispositivo
<a name="iot-dc-install-dc-download"></a>

Este procedimiento instala el cliente de AWS IoT dispositivo en su Raspberry Pi.

Ejecute estos comandos en la ventana del terminal de su ordenador host local que esté conectado a su Raspberry Pi.

**Para instalar el cliente de AWS IoT dispositivo en su Raspberry Pi**

1. Introduzca estos comandos para descargar y construir el cliente de AWS IoT dispositivo en su Raspberry Pi.

   ```
   cd ~
   git clone https://github.com/awslabs/aws-iot-device-client aws-iot-device-client
   mkdir ~/aws-iot-device-client/build && cd ~/aws-iot-device-client/build
   cmake ../
   ```

1. Ejecute este comando para crear el AWS IoT Device Client. Este comando puede tardar hasta 15 minutos en finalizar.

   ```
   cmake --build . --target aws-iot-device-client
   ```

   Se pueden ignorar los mensajes de advertencia que aparecen cuando el AWS IoT Device Client compila.

   Estos tutoriales se han probado con el AWS IoT Device Client integrado**gcc**, la versión 10.2.1 20210110 (Raspbian 10.2.1-6\$1rpi1), la versión 8.3.0 del 30 de octubre de 2021 del sistema operativo Raspberry Pi (bullseye) y la versión 8.3.0 del 7 de mayo **gcc** de 2021 del sistema operativo Raspberry Pi (buster).

1. Cuando el cliente del dispositivo termine de compilarse, pruébelo ejecutando este comando. AWS IoT 

   ```
   ./aws-iot-device-client --help
   ```

Si ve la ayuda de la línea de comandos del AWS IoT Device Client, significa que el AWS IoT Device Client se ha creado correctamente y está listo para su uso.

## Creación de los directorios utilizados en los tutoriales
<a name="iot-dc-install-dc-files"></a>

Este procedimiento crea los directorios en la Raspberry Pi que se utilizarán para almacenar los archivos utilizados en los tutoriales de esta ruta de aprendizaje.

**Para crear los directorios utilizados en los tutoriales de esta ruta de aprendizaje:**

1. Ejecute estos comandos para crear los directorios necesarios.

   ```
   mkdir ~/dc-configs
   mkdir ~/policies
   mkdir ~/messages
   mkdir ~/certs/testconn
   mkdir ~/certs/pubsub
   mkdir ~/certs/jobs
   ```

1. Ejecute estos comandos para establecer los permisos en los nuevos directorios.

   ```
   chmod 745 ~
   chmod 700 ~/certs/testconn
   chmod 700 ~/certs/pubsub
   chmod 700 ~/certs/jobs
   ```

Tras crear estos directorios y establecer sus permisos, continúe con [(Opcional) Guardar la imagen de la tarjeta microSD](#iot-dc-install-dc-save).

## (Opcional) Guardar la imagen de la tarjeta microSD
<a name="iot-dc-install-dc-save"></a>

En este punto, la tarjeta microSD de tu Raspberry Pi tiene un sistema operativo actualizado, el software de aplicación básico y el cliente del AWS IoT dispositivo. 

Si quiere volver a probar estos ejercicios y tutoriales, puede omitir los procedimientos anteriores y escribir la imagen de la tarjeta microSD que guarda con este procedimiento en una nueva tarjeta microSD desde la que continuar con los tutoriales de [Aprovisione su Raspberry Pi en AWS IoT](iot-dc-install-provision.md).

**Para guardar la imagen de la tarjeta microSD en un archivo:**

En la ventana del terminal de su ordenador host local que esté conectado a la Raspberry Pi:

1. Confirma que tus Cuenta de AWS credenciales no estén almacenadas.

   1. Ejecute la aplicación de AWS configuración con este comando:

      ```
      aws configure
      ```

   1. Si sus credenciales están almacenadas (si aparecen en el mensaje), introduzca la cadena **XYXYXYXYX** cuando se le pida, tal y como se muestra aquí. Deje en blanco el **nombre de la región** y el **formato de salida predeterminado**.

      ```
      AWS Access Key ID [****************YXYX]: XYXYXYXYX
      AWS Secret Access Key [****************YXYX]: XYXYXYXYX
      Default region name: 
      Default output format:
      ```

1. Escriba este comando para apagar la Raspberry Pi.

   ```
   sudo shutdown -h 0
   ```

1. Una vez apagada la Raspberry Pi por completo, desconecte su alimentación.

1. Extraiga la tarjeta microSD del dispositivo.

1. En el ordenador host local: 

   1. Inserte la tarjeta microSD.

   1. Con la herramienta de creación de imágenes de tarjetas SD, guarde la imagen de la tarjeta microSD en un archivo.

   1. Una vez guardada la imagen de la tarjeta microSD, extraiga la tarjeta del ordenador host local.

Puede continuar con esta tarjeta microSD en [Aprovisione su Raspberry Pi en AWS IoT](iot-dc-install-provision.md).

# Aprovisione su Raspberry Pi en AWS IoT
<a name="iot-dc-install-provision"></a>

Los procedimientos de esta sección comienzan con la imagen microSD guardada que tiene instalado el cliente AWS CLI and AWS IoT Device y crean los AWS IoT recursos y los certificados de dispositivo que aprovisionan tu Raspberry Pi. AWS IoT

## Instalación de la tarjeta microSD en la Raspberry Pi
<a name="iot-dc-install-dc-restore"></a>

Este procedimiento instala la tarjeta microSD con el software necesario cargado y configurado en la Raspberry Pi y la configura Cuenta de AWS para que pueda continuar con los tutoriales de esta ruta de aprendizaje.

Utilice una tarjeta microSD de [(Opcional) Guardar la imagen de la tarjeta microSD](iot-dc-install-download.md#iot-dc-install-dc-save) que tenga el software necesario para los ejercicios y tutoriales de esta ruta de aprendizaje.

**Para instalar la tarjeta microSD en la Raspberry Pi**

1. Con la alimentación desconectada de la Raspberry Pi, inserte la tarjeta microSD en la Raspberry Pi.

1. Alimente la Raspberry Pi.

1. Después de aproximadamente un minuto, en el ordenador host local, reinicie la sesión de la ventana del terminal e inicie sesión en la Raspberry Pi.

1. En su ordenador host local, en la ventana del terminal y con las credenciales **ID de clave de acceso** y **Clave de acceso secreta** de su Raspberry Pi:

   1. Ejecute la aplicación de AWS configuración con este comando:

      ```
      aws configure
      ```

   1. Introduzca sus Cuenta de AWS credenciales e información de configuración cuando se le solicite:

      ```
      AWS Access Key ID [****************YXYX]: your Access Key ID
      AWS Secret Access Key [****************YXYX]: your Secret Access Key
      Default region name [us-west-2]: your Región de AWS code
      Default output format [json]: json
      ```

Una vez que haya restaurado sus Cuenta de AWS credenciales, estará listo para continuar haciéndolo[Aprovisione su dispositivo en AWS IoT Core](#iot-dc-install-dc-provision).

## Aprovisione su dispositivo en AWS IoT Core
<a name="iot-dc-install-dc-provision"></a>

Los procedimientos de esta sección crean los AWS IoT recursos que aprovisionan tu Raspberry Pi AWS IoT. A medida que cree estos recursos, se le pedirá que registre varios datos. La configuración del cliente del AWS IoT dispositivo utilizará esta información en el siguiente procedimiento.

Para que su Raspberry Pi funcione AWS IoT, debe estar aprovisionada. El aprovisionamiento es el proceso de crear y configurar los AWS IoT recursos necesarios para respaldar su Raspberry Pi como dispositivo IoT.

Con la Raspberry Pi encendida y reiniciada, conecte la ventana del terminal del ordenador host local a la Raspberry Pi y siga estos procedimientos.

**Topics**
+ [Crear y descargar archivos de certificado del dispositivo](#iot-dc-install-dc-provision-certs)
+ [Crea recursos AWS IoT](#iot-dc-install-dc-provision-resources)

### Crear y descargar archivos de certificado del dispositivo
<a name="iot-dc-install-dc-provision-certs"></a>

Este procedimiento crea los archivos de certificado del dispositivo para esta demostración.

**Para crear y descargar los archivos de certificado del dispositivo para la Raspberry Pi**

1. En la ventana del terminal de su ordenador host local, introduzca estos comandos para crear los archivos de certificado para su dispositivo.

   ```
   mkdir ~/certs/testconn
   aws iot create-keys-and-certificate \
   --set-as-active \
   --certificate-pem-outfile "~/certs/testconn/device.pem.crt" \
   --public-key-outfile "~/certs/testconn/public.pem.key" \
   --private-key-outfile "~/certs/testconn/private.pem.key"
   ```

   El comando devuelve una respuesta similar a la siguiente: Anote el valor `certificateArn`: lo necesitará más adelante.

   ```
   {
       "certificateArn": "arn:aws:iot:us-west-2:57EXAMPLE833:cert/76e7e4edb3e52f52334be2f387a06145b2aa4c7fcd810f3aea2d92abc227d269",
       "certificateId": "76e7e4edb3e52f5233EXAMPLE7a06145b2aa4c7fcd810f3aea2d92abc227d269",
       "certificatePem": "-----BEGIN CERTIFICATE-----\nMIIDWTCCAkGgAwIBAgI_SHORTENED_FOR_EXAMPLE_Lgn4jfgtS\n-----END CERTIFICATE-----\n",
       "keyPair": {
           "PublicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BA_SHORTENED_FOR_EXAMPLE_ImwIDAQAB\n-----END PUBLIC KEY-----\n",
           "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQE_SHORTENED_FOR_EXAMPLE_T9RoDiukY\n-----END RSA PRIVATE KEY-----\n"
       }
   }
   ```

1. Introduzca los siguientes comandos para configurar los permisos en el directorio de certificados y sus archivos.

   ```
   chmod 745 ~
   chmod 700 ~/certs/testconn
   chmod 644 ~/certs/testconn/*
   chmod 600 ~/certs/testconn/private.pem.key
   ```

1. Ejecute este comando para revisar los permisos de sus directorios y archivos de certificados.

   ```
   ls -l ~/certs/testconn
   ```

   El resultado del comando debe ser el mismo que el que se muestra aquí, excepto que las fechas y horas de los archivos serán diferentes.

   ```
   -rw-r--r-- 1 pi pi 1220 Oct 28 13:02 device.pem.crt
   -rw------- 1 pi pi 1675 Oct 28 13:02 private.pem.key
   -rw-r--r-- 1 pi pi  451 Oct 28 13:02 public.pem.key
   ```

En este punto, ya tiene los archivos de certificado del dispositivo instalados en su Raspberry Pi y puede continuar con [Crea recursos AWS IoT](#iot-dc-install-dc-provision-resources).

### Crea recursos AWS IoT
<a name="iot-dc-install-dc-provision-resources"></a>

Este procedimiento aprovisiona el dispositivo AWS IoT mediante la creación de los recursos que el dispositivo necesita para acceder a las AWS IoT funciones y los servicios.

**Para aprovisionar su dispositivo en AWS IoT**

1. En la ventana del terminal de su ordenador host local, introduzca el siguiente comando para obtener la dirección del punto de conexión de datos de dispositivo correspondiente a su Cuenta de AWS.

   ```
   aws iot describe-endpoint --endpoint-type IoT:Data-ATS
   ```

   El comando de los pasos anteriores devuelve una respuesta similar a la siguiente. Anote el valor `endpointAddress`: lo necesitará más adelante.

   ```
   {
       "endpointAddress": "a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com"
   }
   ```

1. Ingresa este comando para crear un recurso AWS IoT para tu Raspberry Pi.

   ```
   aws iot create-thing --thing-name "DevCliTestThing"
   ```

   Si se AWS IoT creó tu recurso, el comando devuelve una respuesta como esta.

   ```
   {
       "thingName": "DevCliTestThing",
       "thingArn": "arn:aws:iot:us-west-2:57EXAMPLE833:thing/DevCliTestThing",
       "thingId": "8ea78707-32c3-4f8a-9232-14bEXAMPLEfd"
   }
   ```

1. En la ventana del terminal:

   1. Abra un editor de texto, como `nano`.

   1. Copie este documento de política de JSON y péguelo en el editor de texto abierto.  
****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Publish",
                      "iot:Subscribe",
                      "iot:Receive",
                      "iot:Connect"
                  ],
                  "Resource": [
                      "*"
                  ]
              }
          ]
      }
      ```
**nota**  
Este documento de política otorga generosamente a todos los permisos de recursos para conectarse, recibir, publicar y suscribirse. Normalmente, las políticas solo otorgan permiso a recursos específicos para realizar acciones específicas. Sin embargo, para la prueba inicial de conectividad del dispositivo, se utiliza esta política demasiado general y permisiva para minimizar la posibilidad de que se produzca un problema de acceso durante la prueba. En los siguientes tutoriales, se utilizarán documentos de políticas con un alcance más limitado para demostrar las prácticas recomendadas de diseño de políticas.

   1. Guarde el archivo en el editor de texto como **\$1/policies/dev\$1cli\$1test\$1thing\$1policy.json**. 

1. Ejecute este comando para usar el documento de política de los pasos anteriores para crear una AWS IoT política.

   ```
   aws iot create-policy \
   --policy-name "DevCliTestThingPolicy" \
   --policy-document "file://~/policies/dev_cli_test_thing_policy.json"
   ```

   Si se crea la política, el comando devuelve una respuesta como esta.

   ```
   {
       "policyName": "DevCliTestThingPolicy",
       "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/DevCliTestThingPolicy",
       "policyDocument": "{\n    \"Version\": \"2012-10-17\",		 	 	 \n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"iot:Publish\",\n                \"iot:Subscribe\",\n                \"iot:Receive\",\n                \"iot:Connect\"\n            ],\n            \"Resource\": [\n                \"*\"\n            ]\n        }\n    ]\n}\n",
       "policyVersionId": "1"
   }
   ```

1. Ejecute este comando para asociar la política al certificado del dispositivo. Reemplace `certificateArn` por el valor `certificateArn` que guardó anteriormente.

   ```
   aws iot attach-policy \
   --policy-name "DevCliTestThingPolicy" \
   --target "certificateArn"
   ```

   Si se ejecuta correctamente, este comando no devuelve nada.

1. Ejecute este comando para adjuntar el certificado del dispositivo al recurso AWS IoT del objeto. Reemplace `certificateArn` por el valor `certificateArn` que guardó anteriormente.

   ```
   aws iot attach-thing-principal \
   --thing-name "DevCliTestThing" \
   --principal "certificateArn"
   ```

   Si se ejecuta correctamente, este comando no devuelve nada.

Una vez que hayas aprovisionado correctamente el dispositivo AWS IoT, estarás listo para continuar [Configura el cliente AWS IoT del dispositivo para probar la conectividad](iot-dc-install-configure.md) haciéndolo.

# Configura el cliente AWS IoT del dispositivo para probar la conectividad
<a name="iot-dc-install-configure"></a>

Los procedimientos de esta sección configuran el cliente del AWS IoT dispositivo para publicar un mensaje MQTT desde su Raspberry Pi.

**Topics**
+ [Crear el archivo de configuración](#iot-dc-install-dc-configure-step1)
+ [Abrir el cliente de prueba de MQTT](#iot-dc-install-dc-configure-step2)
+ [Ejecute Device Client AWS IoT](#iot-dc-install-dc-configure-step3)

## Crear el archivo de configuración
<a name="iot-dc-install-dc-configure-step1"></a>

Este procedimiento crea el archivo de configuración para probar el cliente del AWS IoT dispositivo.

**Para crear el archivo de configuración para probar el AWS IoT Device Client**
+ En la ventana del terminal de su ordenador host local que esté conectado a la Raspberry Pi:

  1. Introduzca estos comandos para crear un directorio para los archivos de configuración y establecer el permiso en el directorio:

     ```
     mkdir ~/dc-configs
     chmod 745 ~/dc-configs
     ```

  1. Abra un editor de texto, como `nano`.

  1. Copie este documento JSON y péguelo en el editor de texto abierto.

     ```
     {
       "endpoint": "a3qEXAMPLEaffp-ats.iot.us-west-2.amazonaws.com",
       "cert": "~/certs/testconn/device.pem.crt",
       "key": "~/certs/testconn/private.pem.key",
       "root-ca": "~/certs/AmazonRootCA1.pem",
       "thing-name": "DevCliTestThing",
       "logging": {
         "enable-sdk-logging": true,
         "level": "DEBUG",
         "type": "STDOUT",
         "file": ""
       },
       "jobs": {
         "enabled": false,
         "handler-directory": ""
       },
       "tunneling": {
         "enabled": false
       },
       "device-defender": {
         "enabled": false,
         "interval": 300
       },
       "fleet-provisioning": {
         "enabled": false,
         "template-name": "",
         "template-parameters": "",
         "csr-file": "",
         "device-key": ""
       },
       "samples": {
         "pub-sub": {
           "enabled": true,
           "publish-topic": "test/dc/pubtopic",
           "publish-file": "",
           "subscribe-topic": "test/dc/subtopic",
           "subscribe-file": ""
         }
       },
       "config-shadow": {
         "enabled": false
       },
       "sample-shadow": {
         "enabled": false,
         "shadow-name": "",
         "shadow-input-file": "",
         "shadow-output-file": ""
       }
     }
     ```

  1. Sustituya el *endpoint* valor por el punto final de datos del dispositivo Cuenta de AWS que encontró en[Aprovisione su dispositivo en AWS IoT Core](iot-dc-install-provision.md#iot-dc-install-dc-provision).

  1. Guarde el archivo en el editor de texto como **\$1/dc-configs/dc-testconn-config.json**.

  1. Ejecute este comando para establecer los permisos en el nuevo archivo de configuración.

     ```
     chmod 644 ~/dc-configs/dc-testconn-config.json
     ```

Después de guardar el archivo, estará listo para continuar con [Abrir el cliente de prueba de MQTT](#iot-dc-install-dc-configure-step2).

## Abrir el cliente de prueba de MQTT
<a name="iot-dc-install-dc-configure-step2"></a>

Este procedimiento prepara al **cliente de prueba de MQTT** de la AWS IoT consola para suscribirse al mensaje de MQTT que el cliente del AWS IoT dispositivo publica cuando se ejecuta.

**Para preparar el **cliente de prueba de MQTT** para que se suscriba a todos los mensajes de MQTT**

1. En el ordenador host local, en la [consola de AWS IoT](https://console.aws.amazon.com//iot/home#/test), elija **Cliente de prueba de MQTT**.

1. En la pestaña **Suscribirse a un tema**, en **Filtro de temas**, introduzca **\$1** (un solo signo de almohadilla) y elija **Suscribirse** para suscribirse a todos los temas de MQTT.

1. Debajo de la etiqueta **Suscripciones**, confirme que aparece **\$1** (un solo signo de almohadilla).

Deje abierta la ventana con el **cliente de prueba de MQTT** mientras continúa con [Ejecute Device Client AWS IoT](#iot-dc-install-dc-configure-step3).

## Ejecute Device Client AWS IoT
<a name="iot-dc-install-dc-configure-step3"></a>

Este procedimiento ejecuta el cliente de AWS IoT dispositivo de forma que publique un único mensaje MQTT que reciba y muestre el **cliente de prueba de MQTT**.

**Para enviar un mensaje MQTT desde el cliente del dispositivo AWS IoT**

1. Asegúrese de que tanto la ventana del terminal que está conectada a su Raspberry Pi como la ventana con el **cliente de prueba de MQTT** estén visibles mientras realiza este procedimiento.

1. En la ventana del terminal, introduzca estos comandos para ejecutar el AWS IoT Device Client mediante el archivo de configuración creado en[Crear el archivo de configuración](#iot-dc-install-dc-configure-step1).

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-testconn-config.json
   ```

   En la ventana del terminal, el cliente del AWS IoT dispositivo muestra los mensajes de información y cualquier error que se produzca durante su ejecución.

   Si no se muestra ningún error en la ventana del terminal, revise el **cliente de prueba de MQTT**.

1. En el **cliente de prueba de MQTT**, en la ventana Suscripciones, consulte el mensaje *Hello World\$1* enviado al tema del mensaje `test/dc/pubtopic`.

1. Si el cliente del AWS IoT dispositivo no muestra ningún error y aparece *Hello World\$1* enviado al `test/dc/pubtopic` mensaje en el **cliente de prueba de MQTT**, ha demostrado que la conexión se ha realizado correctamente.

1. En la ventana del terminal, introduzca **^C** (Ctrl-C) para detener el cliente del AWS IoT dispositivo.

Una vez que hayas demostrado que el cliente del AWS IoT dispositivo funciona correctamente en tu Raspberry Pi y con el que se puede comunicar AWS IoT, puedes continuar con. [Tutorial: Demuestre la comunicación de mensajes MQTT con el cliente del AWS IoT dispositivo](iot-dc-testconn.md)