

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.

# Creación de demostraciones con el cliente de AWS IoT dispositivos
<a name="iot-tutorials-dc-intro"></a>

Los tutoriales de esta ruta de aprendizaje explican los pasos necesarios para desarrollar un software de demostración mediante el AWS IoT Device Client. El AWS IoT Device Client proporciona un software que se ejecuta en su dispositivo de IoT para probar y demostrar aspectos de una solución de IoT basada en ella AWS IoT.

El objetivo de estos tutoriales es facilitar la exploración y la experimentación para que pueda estar seguro de que es AWS IoT compatible con su solución antes de desarrollar el software de su dispositivo.

**Lo que aprenderá en estos tutoriales:**
+ Cómo preparar una Raspberry Pi para usarla como dispositivo IoT con AWS IoT
+ ¿Cómo demostrar AWS IoT las funciones mediante el AWS IoT Device Client de su dispositivo

En esta ruta de aprendizaje, instalará el AWS IoT Device Client en su propia Raspberry Pi y creará los AWS IoT recursos en la nube para demostrar ideas de soluciones de IoT. Si bien los tutoriales de esta ruta de aprendizaje muestran las características que se utilizan con una Raspberry Pi, en ellos se explican los objetivos y los procedimientos para ayudarlo a adaptarlas a otros dispositivos.

## Requisitos previos para crear demostraciones con el AWS IoT Device Client
<a name="iot-dc-tutorial-overview"></a>

En esta sección se describe lo que necesitará antes de comenzar los tutoriales de esta ruta de aprendizaje.

**Para completar los tutoriales de esta ruta de aprendizaje, necesitará lo siguiente:**
+ 

**¿Un Cuenta de AWS**  
Puedes usar los existentes Cuenta de AWS, si los tienes, pero es posible que necesites agregar roles o permisos adicionales para usar las AWS IoT funciones que utilizan estos tutoriales.

  Si necesita crear uno nuevo Cuenta de AWS, consulte[Configurar Cuenta de AWS](setting-up.md).
+ 

**Una Raspberry Pi o un dispositivo de IoT compatible**  
Los tutoriales usan una [Raspberry Pi](https://www.raspberrypi.org/) porque viene en diferentes formatos y es un dispositivo de demostración de uso común y relativamente económico. Los tutoriales se han probado en la [Raspberry Pi 3 Modelo B\$1](https://www.raspberrypi.com/products/raspberry-pi-3-model-b-plus/), la [Raspberry Pi 4 Modelo B](https://www.raspberrypi.com/products/raspberry-pi-4-model-b/) y en una instancia de Amazon EC2 que ejecuta Ubuntu Server 20.04 LTS (HVM). Para utilizar los comandos AWS CLI y ejecutarlos, le recomendamos que utilice la última versión del sistema operativo Raspberry Pi (sistema operativo [Raspberry Pi (64 bits)](https://www.raspberrypi.com/software/operating-systems/) o OS Lite). Este tutorial puede funcionar en versiones anteriores del sistema operativo, pero no lo hemos probado.
**nota**  
Los tutoriales explican los objetivos de cada paso para ayudarlo a adaptarlos al hardware de IoT en el que no los hemos probado; sin embargo, no describen específicamente cómo adaptarlos a otros dispositivos.
+ 

**Familiaridad con el sistema operativo del dispositivo de IoT**  
En los pasos de estos tutoriales se supone que está familiarizado con el uso de los comandos y operaciones básicos de Linux desde la interfaz de línea de comandos compatible con una Raspberry Pi. Si no está familiarizado con estas operaciones, quizás desee darse más tiempo para completar los tutoriales.

  Para completar estos tutoriales, ya debe saber cómo:
  + Realizar de forma segura las operaciones básicas del dispositivo, como ensamblar y conectar los componentes, conectar el dispositivo a las fuentes de alimentación necesarias e instalar y extraer las tarjetas de memoria.
  + Cargar y descargar el software y los archivos del sistema en el dispositivo. Si el dispositivo no utiliza un dispositivo de almacenamiento extraíble, como una tarjeta microSD, tendrá que saber cómo conectarse al dispositivo y cómo cargar y descargar el software del sistema y los archivos en el dispositivo.
  + Conectar el dispositivo a las redes en las que piensa usarlo.
  + Conectarse al dispositivo desde otro equipo mediante un terminal SSH o un programa similar.
  + Usar una interfaz de línea de comandos para crear, copiar, mover, cambiar el nombre y configurar los permisos de los archivos y directorios del dispositivo.
  + Instalar nuevos programas en el dispositivo.
  + Transferir archivos desde y hacia el dispositivo mediante herramientas como FTP o SCP.
+ 

**Un entorno de desarrollo y pruebas para la solución de IoT**  
En los tutoriales se describe el software y el hardware necesarios; sin embargo, se supone que podrá realizar operaciones que tal vez no estén descritas de forma explícita. Algunos ejemplos de este tipo de hardware y operaciones son:
  + 

**Un equipo host local para descargar y almacenar archivos**  
Para la Raspberry Pi, suele ser una computadora personal o portátil que puede leer y escribir en tarjetas de memoria microSD. La equipo host local debe:
    + Estar conectado a Internet.
    + Tener instalada y configurada la [AWS CLI](https://aws.amazon.com//cli/).
    + Disponga de un navegador web compatible con la AWS consola.
  + 

**Una forma de conectar el equipo host local al dispositivo para comunicarse con él, introducir comandos y transferir archivos**  
En la Raspberry Pi, esto suele hacerse mediante SSH y SCP desde el equipo host local.
  + 

**Un monitor y teclado para conectarse al dispositivo de IoT**  
Estos pueden ser útiles, pero no son obligatorios para completar los tutoriales.
  + 

**Una forma de que su equipo host local y sus dispositivos de IoT se conecten a Internet**  
Puede ser una conexión de red cableada o inalámbrica a un router o puerta de enlace que estén conectados a Internet. El host local también debe poder conectarse a la Raspberry Pi. Esto puede requerir que estén en la misma red de área local. Los tutoriales no muestran cómo configurar esto para el dispositivo o configuración de dispositivo en particular, pero sí cómo puede probar esta conectividad.
  + 

**Acceder al router de la red de área local para ver los dispositivos conectados**  
Para completar los tutoriales de esta ruta de aprendizaje, tendrá que poder encontrar la dirección IP del dispositivo de IoT.

    En una red de área local, esto se puede hacer accediendo a la interfaz de administración del router de red al que se conectan los dispositivos. Si puede asignar una dirección IP fija al dispositivo en el router, puede simplificar la reconexión cada vez que se reinicie el dispositivo.

    Si tiene un teclado y un monitor conectados al dispositivo, **ifconfig** puede mostrar la dirección IP del dispositivo.

    Si ninguna de estas opciones es posible, tendrá que encontrar una forma de identificar la dirección IP del dispositivo cada vez que se reinicie. 

Una vez que tenga todos los materiales, pase a [Tutorial: Preparación de los dispositivos para el cliente de AWS IoT dispositivos](iot-dc-prepare-device.md). 

**Topics**
+ [Requisitos previos para crear demostraciones con el AWS IoT Device Client](#iot-dc-tutorial-overview)
+ [Tutorial: Preparación de los dispositivos para el cliente de AWS IoT dispositivos](iot-dc-prepare-device.md)
+ [Tutorial: Instalación y configuración del cliente de AWS IoT dispositivos](iot-dc-install-dc.md)
+ [Tutorial: Demuestre la comunicación de mensajes MQTT con el cliente del AWS IoT dispositivo](iot-dc-testconn.md)
+ [Tutorial: Demuestre acciones remotas (trabajos) con el cliente del AWS IoT dispositivo](iot-dc-runjobs.md)
+ [Tutorial: Limpiar después de ejecutar los tutoriales de AWS IoT Device Client](iot-dc-cleanup.md)

# Tutorial: Preparación de los dispositivos para el cliente de AWS IoT dispositivos
<a name="iot-dc-prepare-device"></a>

En este tutorial se explica cómo inicializar la Raspberry Pi para prepararla para los siguientes tutoriales de esta ruta de aprendizaje.

El objetivo de este tutorial es instalar la versión actual del sistema operativo del dispositivo y asegurarse de que puede comunicarse con él en el contexto de su entorno de desarrollo.

**Requisitos previos**  
Antes de empezar este tutorial, asegúrese de que dispone de los elementos enumerados en [Requisitos previos para crear demostraciones con el AWS IoT Device Client](iot-tutorials-dc-intro.md#iot-dc-tutorial-overview) y que se puedan usar.

Para completar este tutorial se necesitan aproximadamente 90 minutos.

**En este tutorial, podrá:**
+ Instale y actualice el sistema operativo del dispositivo.
+ Instale y verifique cualquier software adicional necesario para ejecutar los tutoriales.
+ Pruebe la conectividad del dispositivo e instale los certificados necesarios.

Tras completar este tutorial, el siguiente prepara el dispositivo para las demostraciones que utilizan el AWS IoT Device Client.

**Topics**
+ [Instalación y actualización del sistema operativo del dispositivo](iot-dc-prepare-device-sys.md)
+ [Instalación y verificación del software necesario en el dispositivo](iot-dc-prepare-device-sw.md)
+ [Prueba del dispositivo y almacenamiento del certificado de CA de Amazon](iot-dc-prepare-device-test.md)

# Instalación y actualización del sistema operativo del dispositivo
<a name="iot-dc-prepare-device-sys"></a>

En los procedimientos de esta sección, se describe cómo inicializar la tarjeta microSD que la Raspberry Pi utiliza como unidad de sistema. La tarjeta microSD de la Raspberry Pi contiene el software de su sistema operativo (SO), así como espacio para el almacenamiento de los archivos de la aplicación. Si no utiliza una Raspberry Pi, siga las instrucciones del dispositivo para instalar y actualizar el software del sistema operativo del dispositivo.

Después de completar esta sección, debería poder iniciar el dispositivo IoT y conectarse a él desde el programa del terminal de su ordenador host local.

**Equipo necesario:**
+ Su entorno local de desarrollo y pruebas
+ Una Raspberry Pi o su dispositivo IoT (que se pueda conectar a Internet)
+ Una tarjeta de memoria microSD con una capacidad mínima de 8 GB o suficiente espacio de almacenamiento para el sistema operativo y el software necesario.
**nota**  
Al seleccionar una tarjeta microSD para estos ejercicios, elija una que sea tan grande como sea necesario pero lo más pequeña posible.  
Será más rápido realizar copias de seguridad y actualizar una tarjeta SD pequeña. En la Raspberry Pi, no necesitará más que una tarjeta microSD de 8 GB para estos tutoriales. Si necesita más espacio para su aplicación específica, los archivos de imagen más pequeños que guarde en estos tutoriales pueden cambiar el tamaño del sistema de archivos de una tarjeta más grande para ocupar todo el espacio compatible de la tarjeta que elija.

**Equipamiento opcional:**
+ Un teclado USB conectado a la Raspberry Pi
+ Un monitor HDMI y un cable para conectar el monitor a la Raspberry Pi

**Topics**
+ [Cargue el sistema operativo del dispositivo en la tarjeta microSD](#iot-dc-prepare-device-sys-step1)
+ [Iniciar el dispositivo IoT con el nuevo sistema operativo](#iot-dc-prepare-device-sys-step2)
+ [Conectar el ordenador host local al dispositivo](#iot-dc-prepare-device-sys-step3)

## Cargue el sistema operativo del dispositivo en la tarjeta microSD
<a name="iot-dc-prepare-device-sys-step1"></a>

Este procedimiento utiliza el ordenador host local para cargar el sistema operativo del dispositivo en una tarjeta microSD.

**nota**  
Si el dispositivo no utiliza un medio de almacenamiento extraíble para su sistema operativo, instale el sistema operativo siguiendo el procedimiento de ese dispositivo y continúe con [Iniciar el dispositivo IoT con el nuevo sistema operativo](#iot-dc-prepare-device-sys-step2).

**Para instalar el sistema operativo en su Raspberry Pi**

1. En el ordenador host local, descargue y descomprima la imagen del sistema operativo Raspberry Pi que desee usar. Las versiones más recientes están disponibles en [ https://www.raspberrypi.com/software/operating-systems/](https://www.raspberrypi.com/software/operating-systems/) 

**Elección de una versión del sistema operativo Raspberry Pi**  
Este tutorial usa la versión **Raspberry Pi OS Lite** porque es la versión más pequeña que admite los tutoriales de esta ruta de aprendizaje. Esta versión del sistema operativo Raspberry Pi solo tiene una interfaz de línea de comandos y no tiene una interfaz gráfica de usuario. Con estos tutoriales también funcionará una versión del sistema operativo Raspberry Pi más reciente con una interfaz gráfica de usuario; sin embargo, los procedimientos descritos en esta ruta de aprendizaje utilizan únicamente la interfaz de línea de comandos para realizar operaciones en la Raspberry Pi.

1. Inserte su tarjeta microSD en el ordenador host local.

1. Con una herramienta de creación de imágenes de tarjetas SD, escriba el archivo de imagen del sistema operativo descomprimido en la tarjeta microSD.

1. Después de escribir la imagen del sistema operativo Raspberry Pi en la tarjeta microSD:

   1. Abra la partición BOOT de la tarjeta microSD en una ventana de línea de comandos o en una ventana del explorador de archivos. 

   1. En la partición BOOT de la tarjeta microSD, en el directorio raíz, cree un archivo vacío denominado `ssh` sin extensión de archivo ni contenido. Esto le indica a la Raspberry Pi que habilite las comunicaciones SSH la primera vez que se inicie.

1. Extraiga la tarjeta microSD y extráigala de forma segura del ordenador host local.

La tarjeta microSD está lista para [Iniciar el dispositivo IoT con el nuevo sistema operativo](#iot-dc-prepare-device-sys-step2).

## Iniciar el dispositivo IoT con el nuevo sistema operativo
<a name="iot-dc-prepare-device-sys-step2"></a>

Este procedimiento instala la tarjeta microSD e inicia la Raspberry Pi por primera vez con el sistema operativo descargado.

**Para poner en marcha su dispositivo IoT con el nuevo sistema operativo**

1. Con la alimentación desconectada del dispositivo, insert la tarjeta microSD del paso anterior, [Cargue el sistema operativo del dispositivo en la tarjeta microSD](#iot-dc-prepare-device-sys-step1), en la Raspberry Pi.

1. Conecte el dispositivo a una red cableada.

1. Estos tutoriales interactuarán con su Raspberry Pi desde el ordenador host local mediante un terminal SSH.

   Si también quiere interactuar directamente con el dispositivo, puede:

   1. Conectar un monitor HDMI para ver los mensajes de la consola de la Raspberry Pi antes de poder conectar la ventana del terminal del ordenador host local a la Raspberry Pi.

   1. Conectar un teclado USB si quiere interactuar directamente con la Raspberry Pi.

1. Conectar la Raspberry Pi a la alimentación y esperar aproximadamente un minuto a que se inicialice.

   Si tiene un monitor conectado a la Raspberry Pi, puede usarlo para ver el proceso de arranque.

1. 

   Encuentre la dirección IP de su dispositivo:
   + Si ha conectado un monitor HDMI a la Raspberry Pi, la dirección IP aparece en los mensajes del monitor 
   + Si tiene acceso al router al que está conectada la Raspberry Pi, puede ver su dirección en la interfaz de administración del router.

Una vez que tenga la dirección IP de la Raspberry Pi, estará listo para [Conectar el ordenador host local al dispositivo](#iot-dc-prepare-device-sys-step3).

## Conectar el ordenador host local al dispositivo
<a name="iot-dc-prepare-device-sys-step3"></a>

Este procedimiento utiliza el programa del terminal del ordenador host local para conectarse a su Raspberry Pi y cambiar la contraseña predeterminada.

**Para conectar el ordenador host local al dispositivo**

1. 

   En el ordenador host local, abra el programa del terminal SSH:
   + Windows: `PuTTY`
   + Linux/macOS: `Terminal`
**nota**  
PuTTY no se instala automáticamente en Windows. Si no está en su ordenador, es posible que tenga que descargarlo e instalarlo.

1. Conecte el programa del terminal a la dirección IP de la Raspberry Pi e inicie sesión con sus credenciales predeterminadas.

   ```
   username: pi
   password: raspberry
   ```

1. Después de iniciar sesión en la Raspberry Pi, cambie la contraseña del usuario `pi`.

   ```
   passwd
   ```

   Siga las instrucciones para cambiar la contraseña.

   ```
   Changing password for pi.
   Current password: raspberry
   New password: YourNewPassword
   Retype new password: YourNewPassword
   passwd: password updated successfully
   ```

Una vez que aparezca la línea de comandos de la Raspberry Pi en la ventana del terminal y hayas cambiado la contraseña, estará listo para continuar con [Instalación y verificación del software necesario en el dispositivo](iot-dc-prepare-device-sw.md).

# Instalación y verificación del software necesario en el dispositivo
<a name="iot-dc-prepare-device-sw"></a>

Los procedimientos de esta sección son la continuación de [los de la sección anterior](iot-dc-prepare-device-sys.md) para actualizar el sistema operativo de su Raspberry Pi e instalar el software en la Raspberry Pi que se utilizará en la siguiente sección para crear e instalar el Device Client. AWS IoT 

Después de completar esta sección, tu Raspberry Pi tendrá un sistema up-to-date operativo, el software requerido en los tutoriales de esta ruta de aprendizaje, y se configurará para tu ubicación.

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

**nota**  
La Raspberry Pi Model 3\$1 y la Raspberry Pi Model 4 pueden ejecutar todos los comandos descritos en esta ruta de aprendizaje. Si tu dispositivo de IoT no puede compilar software ni ejecutarlo AWS Command Line Interface, es posible que tengas que instalar los compiladores necesarios en tu ordenador host local para crear el software y, a continuación, transferirlo a tu dispositivo de IoT. Para obtener más información acerca de cómo instalar y crear software para su dispositivo, consulte la documentación del software de su dispositivo.

**Topics**
+ [Actualización del software del sistema operativo](#iot-dc-prepare-device-sw-step1)
+ [Instalación de las aplicaciones y las bibliotecas necesarias](#iot-dc-prepare-device-sw-step2)
+ [(Opcional) Guardar la imagen de la tarjeta microSD](#iot-dc-prepare-device-sw-step3)

## Actualización del software del sistema operativo
<a name="iot-dc-prepare-device-sw-step1"></a>

Este procedimiento actualiza el software del sistema operativo.

**Para actualizar el software del sistema operativo de la Raspberry Pi**

Realice estos pasos en la ventana del terminal de su ordenador host local.

1. Escriba estos comandos para actualizar el software del sistema de la Raspberry Pi.

   ```
   sudo apt-get -y update
   sudo apt-get -y upgrade
   sudo apt-get -y autoremove
   ```

1. Actualice la configuración regional y de zona horaria de la Raspberry Pi (opcional).

   Escriba este comando para actualizar la configuración regional y de zona horaria del dispositivo.

   ```
   sudo raspi-config
   ```

   1. Para establecer la configuración regional del dispositivo:

      1. En la pantalla **Raspberry Pi Software Configuration Tool (raspi-config)**, elija la opción **5**.

         **`5 Localisation Options Configure language and regional settings`**

         Utilice la tecla Tab para desplazarse a **<Select> y, a continuación,** presione la space bar.

      1. En el menú de opciones de localización, elija la opción **L1**.

         **`L1 Locale Configure language and regional settings`**

         Utilice la tecla Tab para desplazarse a **<Select> y, a continuación,** presione la space bar.

      1. En la lista de opciones de configuración regional, elija las configuraciones regionales que desee instalar en la Raspberry Pi utilizando las teclas de flecha para desplazarse y space bar para marcar las que quiera. 

         En Estados Unidos, **`en_US.UTF-8`** es una buena opción para elegir.

      1. Tras seleccionar las configuraciones regionales del dispositivo, utilice la tecla Tab para ir a **<OK>** y, a continuación, presione la space bar para que aparezca la página de confirmación de **configuración regional**.

   1. Para configurar la zona horaria del dispositivo:

      1. En la pantalla **raspi-config**, seleccione la opción **5**.

         **`5 Localisation Options Configure language and regional settings`**

         Utilice la tecla Tab para desplazarse a **<Select>** y, a continuación, presione la space bar.

      1. En el menú de opciones de localización, utilice la tecla de flecha para elegir la opción **L2**:

         **`L2 time zone Configure time zone`**

         Utilice la tecla Tab para desplazarse a **<Select>** y, a continuación, presione la space bar.

      1. En el menú **Configuración de tzdata**, seleccione su área geográfica de la lista. 

         Utilice la tecla Tab para desplazarse a **<OK>** y, a continuación, presione la space bar.

      1. En la lista de ciudades, use las teclas de flecha para elegir una ciudad de su zona horaria.

         Para configurar la zona horaria, utilice la tecla Tab para ir a **<OK>** y, a continuación, presione la space bar.

   1. Cuando termine de actualizar la configuración, usa la tecla Tab para ir a **<Finish>** y, a continuación, presione la space bar para cerrar la aplicación **raspi-config**.

1. Escriba este comando para reiniciar la Raspberry Pi.

   ```
   sudo shutdown -r 0
   ```

1. Espere a que la Raspberry Pi se reinicie.

1. Una vez reiniciada la Raspberry Pi, vuelva a conectar la ventana del terminal del ordenador host local a la Raspberry Pi.

El software del sistema de la Raspberry Pi ya está configurado y está listo para continuar con [Instalación de las aplicaciones y las bibliotecas necesarias](#iot-dc-prepare-device-sw-step2).

## Instalación de las aplicaciones y las bibliotecas necesarias
<a name="iot-dc-prepare-device-sw-step2"></a>

Este procedimiento instala el software de la aplicación y las bibliotecas que se utilizan en los tutoriales siguientes.

Si utiliza una Raspberry Pi o si puede compilar el software necesario en el dispositivo IoT, realice estos pasos en la ventana del terminal del ordenador host local. Si debe compilar software para su dispositivo IoT en el ordenador host local, consulte la documentación del software del dispositivo IoT para obtener información sobre cómo realizar estos pasos en el dispositivo.

**Instalación de la aplicación, el software y las bibliotecas en la Raspberry Pi**

1. Escriba este comando para instalar el software y las bibliotecas de la aplicación.

   ```
   sudo apt-get -y install build-essential libssl-dev cmake unzip git python3-pip
   ```

1. Escriba estos comandos para confirmar que se instaló la versión correcta del software.

   ```
   gcc --version
   cmake --version
   openssl version
   git --version
   ```

1. 

   Confirme que estén instaladas las siguientes versiones del software de la aplicación:
   + `gcc`: 9.3.0 o versiones posteriores
   + `cmake`: 3.10.x o versiones posteriores
   + `OpenSSL`: 1.1.1 o versiones posteriores
   + `git`: 2.20.1 o versiones posteriores

Si la Raspberry Pi tiene versiones aceptables del software de aplicación requerido, está listo para continuar con [(Opcional) Guardar la imagen de la tarjeta microSD](#iot-dc-prepare-device-sw-step3).

## (Opcional) Guardar la imagen de la tarjeta microSD
<a name="iot-dc-prepare-device-sw-step3"></a>

A lo largo de los tutoriales de esta ruta de aprendizaje, encontrará estos procedimientos para guardar una copia de la imagen de la tarjeta microSD de la Raspberry Pi en un archivo de su ordenador host local. Si bien se recomiendan, no son tareas obligatorias. Al guardar la imagen de la tarjeta microSD donde se sugiere, puede saltarte los procedimientos que preceden al punto de guardado en esta ruta de aprendizaje, lo que puede ahorrar tiempo si necesita volver a intentar algo. La consecuencia de no guardar la imagen de la tarjeta microSD periódicamente es que puede que tenga que reiniciar los tutoriales de la ruta de aprendizaje desde el principio si la tarjeta microSD está dañada si accidentalmente configura una aplicación o sus ajustes de forma incorrecta.

En este punto, la tarjeta microSD de la Raspberry Pi tiene un sistema operativo actualizado y el software de aplicación básico cargado. Puede ahorrar el tiempo que le llevó completar los pasos anteriores guardando ahora el contenido de la tarjeta microSD en un archivo. Tener la imagen actual de la imagen de la tarjeta microSD de su dispositivo le permite empezar desde este punto para continuar o volver a intentar un tutorial o procedimiento sin necesidad de instalar y actualizar el software desde cero.

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

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 de la Raspberry Pi.

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.

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

1. Alimente la Raspberry Pi.

1. Tras esperar aproximadamente un minuto, en el ordenador host local, vuelva a conectar la ventana del terminal del computadora host local que estaba conectada a la Raspberry Pi, y luego inicie sesión en la Raspberry Pi.

# Prueba del dispositivo y almacenamiento del certificado de CA de Amazon
<a name="iot-dc-prepare-device-test"></a>

Los procedimientos de esta sección son los mismos que los de [la sección anterior](iot-dc-prepare-device-sw.md) para instalar el certificado de la autoridad de certificación utilizado para autenticar las conexiones AWS Command Line Interface y el certificado con el que se autentican las conexiones. AWS IoT Core

Después de completar esta sección, sabrás que tu Raspberry Pi tiene el software de sistema necesario para instalar el cliente del AWS IoT dispositivo y que tiene una conexión a Internet que funciona.

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

**Topics**
+ [Instala el AWS Command Line Interface](#iot-dc-prepare-device-test-step1)
+ [Configura tus Cuenta de AWS credenciales](#iot-dc-prepare-device-test-step2)
+ [Descargar el certificado de entidad de certificación raíz de Amazon](#iot-dc-prepare-device-test-step3)
+ [(Opcional) Guardar la imagen de la tarjeta microSD](#iot-dc-prepare-device-test-step4)

## Instala el AWS Command Line Interface
<a name="iot-dc-prepare-device-test-step1"></a>

Este procedimiento lo instala AWS CLI en su Raspberry Pi.

Si utiliza una Raspberry Pi o si puede compilar el software en el dispositivo IoT, realice estos pasos en la ventana del terminal del ordenador host local. Si debe compilar software para su dispositivo IoT en el ordenador host local, consulte la documentación del software del dispositivo IoT para obtener información sobre las bibliotecas necesarias.

**Para instalarlo AWS CLI en tu Raspberry Pi**

1. Ejecute estos comandos para descargar e instalar la AWS CLI.

   ```
   export PATH=$PATH:~/.local/bin # configures the path to include the directory with the AWS CLI
   git clone https://github.com/aws/aws-cli.git # download the AWS CLI code from GitHub
   cd aws-cli && git checkout v2 # go to the directory with the repo and checkout version 2
   pip3 install -r requirements.txt # install the prerequisite software
   ```

1. Ejecute este comando para instalar el AWS CLI. Este comando puede tardar hasta 15 minutos en finalizar.

   ```
   pip3 install . # install the AWS CLI 
   ```

1. Ejecute este comando para confirmar que se AWS CLI ha instalado la versión correcta de.

   ```
   aws --version
   ```

   La versión de AWS CLI debe ser 2.2 o posterior.

Si AWS CLI se muestra la versión actual, estás listo para continuar con ella[Configura tus Cuenta de AWS credenciales](#iot-dc-prepare-device-test-step2).

## Configura tus Cuenta de AWS credenciales
<a name="iot-dc-prepare-device-test-step2"></a>

En este procedimiento, obtendrá Cuenta de AWS las credenciales y las agregará para usarlas en su Raspberry Pi.

**Para añadir tus Cuenta de AWS credenciales a tu dispositivo**

1. Obtenga un **identificador de clave** de **acceso y una clave de acceso secreta** Cuenta de AWS para autenticarlos AWS CLI en su dispositivo. 

   Si es la primera vez que utiliza AWS IAM, [ https://aws.amazon.com/premiumsupport/knowledge-center/create-access-key/](https://aws.amazon.com/premiumsupport/knowledge-center/create-access-key/)describe el proceso que debe ejecutarse en la AWS consola para crear las credenciales de AWS IAM y utilizarlas en su dispositivo. 

1. En la ventana del terminal del ordenador host local que esté conectado a la Raspberry Pi y con las credenciales de **clave de acceso** y **clave de acceso secreta** del dispositivo:

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

      ```
      aws configure
      ```

   1. Introduzca las credenciales y la información de configuración cuando se le pida:

      ```
      AWS Access Key ID: your Access Key ID
      AWS Secret Access Key: your Secret Access Key
      Default region name: your Región de AWS code
      Default output format: json
      ```

1. Ejecute este comando para probar el acceso del dispositivo a su AWS IoT Core terminal Cuenta de AWS y al terminal.

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

   Debería devolver tu punto final Cuenta de AWS de AWS IoT datos específico, como en este ejemplo:

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

Si ves tu punto final Cuenta de AWS de AWS IoT datos específico, tu Raspberry Pi tiene la conectividad y los permisos necesarios para seguir accediendo a él. [Descargar el certificado de entidad de certificación raíz de Amazon](#iot-dc-prepare-device-test-step3) 

**importante**  
Sus Cuenta de AWS credenciales ahora están almacenadas en la tarjeta microSD de su Raspberry Pi. Si bien esto facilita tus futuras interacciones con el software que crearás en estos tutoriales, también se guardarán y duplicarán en cualquier imagen de tarjeta microSD que hagas después de este paso de AWS forma predeterminada.  
Para proteger la seguridad de sus Cuenta de AWS credenciales, antes de guardar más imágenes de tarjetas microSD, considere la posibilidad de borrar las credenciales ejecutándolas `aws configure` nuevamente e ingresando caracteres aleatorios para el **ID de la clave de acceso y la clave de acceso** **secreta** para evitar que sus Cuenta de AWS credenciales se vean comprometidas.  
Si descubre que ha guardado sus Cuenta de AWS credenciales sin darse cuenta, puede desactivarlas en la consola de IAM. AWS 

## Descargar el certificado de entidad de certificación raíz de Amazon
<a name="iot-dc-prepare-device-test-step3"></a>

Este procedimiento descarga y guarda una copia de un certificado de la entidad de certificación (CA) raíz de Amazon. Al descargar este certificado, se guarda para usarlo en los siguientes tutoriales y, además, se comprueba la conectividad del dispositivo con los servicios de AWS .

**Para descargar y guardar el certificado de entidad de certificación raíz de Amazon**

1. Ejecute este comando para crear un directorio para el certificado.

   ```
   mkdir ~/certs
   ```

1. Ejecute este comando para descargar el certificado de entidad de certificación raíz de Amazon.

   ```
   curl -o ~/certs/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

1. Ejecute estos comandos para configurar el acceso al directorio del certificado y a su archivo.

   ```
   chmod 745 ~
   chmod 700 ~/certs
   chmod 644 ~/certs/AmazonRootCA1.pem
   ```

1. Ejecute este comando para ver el archivo de certificado de entidad de certificación en el nuevo directorio.

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

   Debería ver una entrada como esta. La fecha y la hora serán diferentes; sin embargo, el tamaño del archivo y el resto de la información deben ser los mismos que se muestran aquí.

   ```
   -rw-r--r-- 1 pi pi 1188 Oct 28 13:02 AmazonRootCA1.pem
   ```

   Si el tamaño del archivo no es `1188`, compruebe los parámetros del comando **curl**. Puede que haya descargado un archivo incorrecto.

## (Opcional) Guardar la imagen de la tarjeta microSD
<a name="iot-dc-prepare-device-test-step4"></a>

En este punto, la tarjeta microSD de la Raspberry Pi tiene un sistema operativo actualizado y el software de aplicación básico cargado. 

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

1. En la ventana del terminal del ordenador host local, borre sus credenciales de AWS .

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

      ```
      aws configure
      ```

   1. Reemplace las credenciales cuando se le solicite. Puede dejar el **nombre de región predeterminado** y el **formato de salida predeterminado** tal como están presionando **Intro**.

      ```
      AWS Access Key ID [****************YT2H]: XYXYXYXYX
      AWS Secret Access Key [****************9plH]: XYXYXYXYX
      Default region name [us-west-2]: 
      Default output format [json]:
      ```

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.

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

1. Alimente el dispositivo.

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 el dispositivo.

   **No vuelvas a introducir tus Cuenta de AWS credenciales todavía.**

Una vez que haya reiniciado la Raspberry Pi e iniciado sesión de nuevo, estará listo para continuar con [Tutorial: Instalación y configuración del cliente de AWS IoT dispositivos](iot-dc-install-dc.md).

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

# Tutorial: Demuestre la comunicación de mensajes MQTT con el cliente del AWS IoT dispositivo
<a name="iot-dc-testconn"></a>

En este tutorial, se muestra cómo el cliente del AWS IoT dispositivo puede suscribirse y publicar mensajes MQTT, que se utilizan habitualmente en las soluciones de IoT.

**Para comenzar este tutorial:**
+ Configure su ordenador host local y una Raspberry Pi, tal como se utilizó en [la sección anterior](iot-dc-install-dc.md).

  Si guardaste la imagen de la tarjeta microSD después de instalar el AWS IoT Device Client, puedes usar una tarjeta microSD con esa imagen con tu Raspberry Pi.
+ Si ya has realizado esta demostración anteriormente, procura [Paso 2: Limpiar las demostraciones Cuenta de AWS después de crear con el cliente del AWS IoT dispositivo](iot-dc-cleanup.md#iot-dc-cleanup-cloud) eliminar todos los AWS IoT recursos que creaste en ejecuciones anteriores para evitar errores de recursos duplicados.

Para completar este tutorial se necesitan aproximadamente 45 minutos.

**Cuando haya terminado con este tema:**
+ Habrás demostrado diferentes maneras en las que tu dispositivo IoT puede suscribirse a los mensajes MQTT AWS IoT y publicarlos en ellos. AWS IoT

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

**Topics**
+ [Preparación de Raspberry Pi para demostrar la comunicación de mensajes de MQTT](iot-dc-testconn-provision.md)
+ [Demuestre la publicación de mensajes con el cliente AWS IoT del dispositivo](iot-dc-testconn-publish.md)
+ [Demuestre la suscripción a los mensajes con el cliente del dispositivo AWS IoT](iot-dc-testconn-subscribe.md)

# Preparación de Raspberry Pi para demostrar la comunicación de mensajes de MQTT
<a name="iot-dc-testconn-provision"></a>

Este procedimiento crea los recursos en AWS IoT y dentro de la Raspberry Pi para demostrar la comunicación de los mensajes MQTT mediante el AWS IoT Device Client.

**Topics**
+ [Crear los archivos de certificado para demostrar la comunicación MQTT](#iot-dc-testconn-provision-certs)
+ [Aprovisionar su dispositivo para demostrar la comunicación MQTT](#iot-dc-testconn-provision-aws)
+ [Configure el archivo de configuración del cliente del AWS IoT dispositivo y el cliente de prueba de MQTT para demostrar la comunicación con MQTT](#iot-dc-testconn-provision-dc-config)

## Crear los archivos de certificado para demostrar la comunicación MQTT
<a name="iot-dc-testconn-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 el siguiente comando para crear los archivos de certificado para su dispositivo.

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

   El comando devuelve una respuesta similar a la siguiente. Guarde el valor de `certificateArn` para utilizarlo más tarde.

   ```
   {
   "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 700 ~/certs/pubsub
   chmod 644 ~/certs/pubsub/*
   chmod 600 ~/certs/pubsub/private.pem.key
   ```

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

   ```
   ls -l ~/certs/pubsub
   ```

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

1. Introduzca estos comandos para crear los directorios de los archivos de registro.

   ```
   mkdir ~/.aws-iot-device-client
   mkdir ~/.aws-iot-device-client/log
   chmod 745 ~/.aws-iot-device-client/log
   echo " " > ~/.aws-iot-device-client/log/aws-iot-device-client.log
   echo " " > ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
   chmod 600 ~/.aws-iot-device-client/log/*
   ```

## Aprovisionar su dispositivo para demostrar la comunicación MQTT
<a name="iot-dc-testconn-provision-aws"></a>

Esta sección crea los AWS IoT recursos que aprovisionan tu Raspberry Pi. AWS IoT

**Para aprovisionar el 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 valor del punto de conexión no ha cambiado desde el momento en que ejecutó este comando para el tutorial anterior. Al volver a ejecutar el comando aquí, será más fácil buscar y pegar el valor del punto de conexión de datos en el archivo de configuración utilizado en este tutorial.

   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 nuevo recurso AWS IoT para tu Raspberry Pi.

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

   Como un AWS IoT recurso es una representación *virtual* de su dispositivo en la nube, podemos crear varios recursos AWS IoT para usarlos con diferentes propósitos. Todos pueden ser utilizados por el mismo dispositivo físico IoT para representar diferentes aspectos del dispositivo.

   Estos tutoriales solo utilizarán un recurso a la vez para representar la Raspberry Pi. De esta forma, en estos tutoriales, se representan las diferentes demostraciones para que, después de crear los AWS IoT recursos para una demostración, pueda volver atrás y repetir la demostración utilizando los recursos que ha creado específicamente para cada una de ellas.

   Si AWS IoT se ha creado el recurso deseado, el comando devuelve una respuesta como esta.

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

1. En la ventana del terminal:

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

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

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Connect"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:client/PubSubTestThing"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Publish"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topic/test/dc/pubtopic"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Subscribe"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topicfilter/test/dc/subtopic"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Receive"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topic/test/dc/subtopic"
                  ]
              }
          ]
      }
      ```

   1. En el editor, en cada `Resource` sección del documento de política, *us-west-2:57EXAMPLE833* sustitúyalo por el tuyo Región de AWS, dos puntos (:)) y tu Cuenta de AWS número de 12 dígitos.

   1. Guarde el archivo en el editor de texto como **\$1/policies/pubsub\$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 "PubSubTestThingPolicy" \
   --policy-document "file://~/policies/pubsub_test_thing_policy.json"
   ```

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

   ```
   {
                                       "policyName": "PubSubTestThingPolicy",
                                       "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/PubSubTestThingPolicy",
                                       "policyDocument": "{\n\"Version\": \"2012-10-17\",		 	 	 \n\"Statement\": [\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Connect\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Publish\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Subscribe\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Receive\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*\"\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 en esta sección.

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

   Si se ejecuta correctamente, este comando no devuelve nada.

1. Ejecute este comando para asociar el certificado del dispositivo al recurso de objeto de AWS IoT . Reemplace `certificateArn` por el valor `certificateArn` que guardó anteriormente en esta sección.

   ```
   aws iot attach-thing-principal \
   --thing-name "PubSubTestThing" \
   --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 con él[Configure el archivo de configuración del cliente del AWS IoT dispositivo y el cliente de prueba de MQTT para demostrar la comunicación con MQTT](#iot-dc-testconn-provision-dc-config).

## Configure el archivo de configuración del cliente del AWS IoT dispositivo y el cliente de prueba de MQTT para demostrar la comunicación con MQTT
<a name="iot-dc-testconn-provision-dc-config"></a>

Este procedimiento crea un archivo de configuración para probar el AWS IoT Device Client.

**Para crear el archivo de configuración para probar el AWS IoT Device Client**

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

   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/pubsub/device.pem.crt",
        "key": "~/certs/pubsub/private.pem.key",
        "root-ca": "~/certs/AmazonRootCA1.pem",
        "thing-name": "PubSubTestThing",
        "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": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
          }
        },
        "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-pubsub-config.json**.

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

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

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

   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 este tutorial.

Después de guardar el archivo y configurar el **cliente de prueba de MQTT**, estará listo para continuar con [Demuestre la publicación de mensajes con el cliente AWS IoT del dispositivo](iot-dc-testconn-publish.md).

# Demuestre la publicación de mensajes con el cliente AWS IoT del dispositivo
<a name="iot-dc-testconn-publish"></a>

Los procedimientos de esta sección muestran cómo el cliente del AWS IoT dispositivo puede enviar mensajes MQTT predeterminados y personalizados.

Estas declaraciones en la política que ha creado en el paso anterior para estos ejercicios dan permiso a la Raspberry Pi para realizar estas acciones:
+ 

**`iot:Connect`**  
Proporciona el nombre del cliente`PubSubTestThing`, su Raspberry Pi que ejecuta el AWS IoT Device Client, para conectarse.

  ```
      {
        "Effect": "Allow",
        "Action": [
          "iot:Connect"
        ],
        "Resource": [
          "arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing"
        ]
      }
  ```
+ 

**`iot:Publish`**  
Dar permiso a la Raspberry Pi para publicar mensajes con un tema de MQTT de `test/dc/pubtopic`.

  ```
      {
        "Effect": "Allow",
        "Action": [
          "iot:Publish"
        ],
        "Resource": [
          "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic"
        ]
      }
  ```

  La acción `iot:Publish` da permiso para publicar en los temas de MQTT que figuran en la matriz de recursos. El *contenido* de esos mensajes no está controlado por la declaración de política.

## Publica el mensaje predeterminado mediante el AWS IoT Device Client
<a name="iot-dc-testconn-publish-default"></a>

Este procedimiento ejecuta el cliente del AWS IoT dispositivo para publicar un único mensaje MQTT predeterminado que el **cliente de prueba MQTT** recibe y muestra.

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

1. Asegúrese de que tanto la ventana del terminal de su ordenador host local 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-configure.md#iot-dc-install-dc-configure-step1).

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-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 la opción **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 haya demostrado que el cliente del AWS IoT dispositivo publicó el mensaje MQTT predeterminado, puede continuar con el. [Publique un mensaje personalizado mediante el AWS IoT Device Client](#iot-dc-testconn-publish-custom)

## Publique un mensaje personalizado mediante el AWS IoT Device Client
<a name="iot-dc-testconn-publish-custom"></a>

Los procedimientos de esta sección crean un mensaje de MQTT personalizado y, a continuación, ejecutan AWS IoT Device Client para publicar el mensaje de MQTT personalizado una vez para que el **cliente de prueba de MQTT** lo reciba y lo muestre.

### Cree un mensaje MQTT personalizado para el cliente del AWS IoT dispositivo
<a name="iot-dc-testconn-publish-custom-create"></a>

Realice estos pasos en la ventana del terminal del ordenador host local que está conectado a su Raspberry Pi.

**Para crear un mensaje personalizado para que el cliente del AWS IoT dispositivo lo publique**

1. En la ventana del terminal, abra un editor de texto, por ejemplo, `nano`.

1. En el editor de texto, copie y pegue el siguiente documento JSON. Esta será la carga útil de mensajes MQTT que publique el cliente del AWS IoT dispositivo.

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

1. Guarde el contenido del editor de texto como **\$1/messages/sample-ws-message.json**. 

1. Introduzca el siguiente comando para configurar los permisos del archivo de mensaje que acaba de crear.

   ```
   chmod 600 ~/messages/*
   ```

**Crear un archivo de configuración para que el cliente del AWS IoT dispositivo lo utilice para enviar el mensaje personalizado**

1. En la ventana del terminal, en un editor de texto como`nano`, por ejemplo, abra el archivo de configuración de AWS IoT Device Client existente:**\$1/dc-configs/dc-pubsub-config.json**. 

1. Edita el objeto de `samples` para que tenga este aspecto. No es necesario cambiar ninguna otra parte de este archivo.

   ```
     "samples": {
       "pub-sub": {
         "enabled": true,
         "publish-topic": "test/dc/pubtopic",
         "publish-file": "~/messages/sample-ws-message.json",
         "subscribe-topic": "test/dc/subtopic",
         "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
   ```

1. Guarde el contenido del editor de texto como **\$1/dc-configs/dc-pubsub-custom-config.json**. 

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

   ```
   chmod 644 ~/dc-configs/dc-pubsub-custom-config.json
   ```

### Publique el mensaje MQTT personalizado mediante el AWS IoT Device Client
<a name="iot-dc-testconn-publish-custom-publish"></a>

Este cambio afecta únicamente al *contenido* de la carga del mensaje de MQTT, por lo que la política actual seguirá funcionando. Sin embargo, si se cambiara el *tema de MQTT* (tal como lo define el valor `publish-topic` en `~/dc-configs/dc-pubsub-custom-config.json`), también habría que modificar la declaración de política de `iot::Publish` para permitir que la Raspberry Pi publique en el nuevo tema de MQTT.

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

1. Asegúrese de que tanto la ventana del terminal como la ventana con el **cliente de prueba de MQTT** estén visibles mientras realiza este procedimiento. Además, verifique que su **cliente de prueba de MQTT** siga suscrito al filtro de temas **\$1**. Si no lo está, vuelva a suscribirse al filtro de temas **\$1**.

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

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-custom-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**, observe la carga del mensaje personalizado enviado al tema del mensaje `test/dc/pubtopic`.

1. Si el cliente del AWS IoT dispositivo no muestra ningún error y usted ve la carga útil del mensaje personalizado que publicó en el `test/dc/pubtopic` mensaje en el **cliente de prueba de MQTT**, significa que ha publicado el mensaje personalizado correctamente.

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

Una vez que hayas demostrado que el cliente del AWS IoT dispositivo publicó una carga de mensajes personalizada, puedes continuar haciéndolo. [Demuestre la suscripción a los mensajes con el cliente del dispositivo AWS IoT](iot-dc-testconn-subscribe.md)

# Demuestre la suscripción a los mensajes con el cliente del dispositivo AWS IoT
<a name="iot-dc-testconn-subscribe"></a>

En esta sección, mostrará dos tipos de suscripciones de mensajes:
+ Suscripción a un solo tema
+ Suscripción a un tema comodín

Estas declaraciones en la política creadas para estos ejercicios dan permiso a la Raspberry Pi para realizar estas acciones:
+ 

**`iot:Receive`**  
Otorga al cliente del AWS IoT dispositivo permiso para recibir temas de MQTT que coincidan con los nombrados en el `Resource` objeto.

  ```
      {
        "Effect": "Allow",
        "Action": [
          "iot:Receive"
        ],
        "Resource": [
          "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/subtopic"
        ]
      }
  ```
+ 

**`iot:Subscribe`**  
Otorga al cliente del AWS IoT dispositivo permiso para suscribirse a los filtros de temas de MQTT que coincidan con los nombres del `Resource` objeto.

  ```
      {
        "Effect": "Allow",
        "Action": [
          "iot:Subscribe"
        ],
        "Resource": [
          "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic"
        ]
      }
  ```

## Suscripción a un solo tema de mensaje de MQTT
<a name="iot-dc-testconn-subscribe-simple-topic"></a>

Este procedimiento demuestra cómo el cliente del AWS IoT dispositivo puede suscribirse a los mensajes MQTT y registrarlos.

En la ventana del terminal de un ordenador host local que esté conectado a su Raspberry Pi, enumere el contenido de **\$1/dc-configs/dc-pubsub-custom-config.json** o abra el archivo en un editor de texto para revisarlo. Localice el objeto `samples`. Debería tener este aspecto.

```
  "samples": {
    "pub-sub": {
      "enabled": true,
      "publish-topic": "test/dc/pubtopic",
      "publish-file": "~/messages/sample-ws-message.json",
      "subscribe-topic": "test/dc/subtopic",
      "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
```

Observe que el valor `subscribe-topic` es el tema de MQTT al que AWS IoT Device Client se suscribirá cuando se ejecute. El cliente del AWS IoT dispositivo escribe las cargas útiles de mensajes que recibe de esta suscripción en el archivo mencionado en el `subscribe-file` valor.

**Para suscribirse a un tema de mensajes MQTT desde el AWS IoT Device Client**

1. Asegúrese de que tanto la ventana del terminal como la ventana con el cliente de prueba de MQTT estén visibles mientras realiza este procedimiento. Además, verifique que su **cliente de prueba de MQTT** siga suscrito al filtro de temas **\$1**. Si no lo está, vuelva a suscribirse al filtro de temas **\$1**.

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-configure.md#iot-dc-install-dc-configure-step1).

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-custom-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, continúe en la consola de AWS IoT .

1. En la AWS IoT consola, en el **cliente de pruebas de MQTT**, seleccione la pestaña **Publicar en un tema**.

1. En **Nombre del tema**, introduzca **test/dc/subtopic**

1. En **Carga útil del mensaje**, revise el contenido del mensaje.

1. Elija **Publicar** para publicar el mensaje de MQTT.

1. En la ventana del terminal, busque la entrada de *mensaje recibida* del cliente del AWS IoT dispositivo que tiene este aspecto.

   ```
   2021-11-10T16:02:20.890Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 45 bytes
   ```

1. Cuando veas la entrada del *mensaje recibido* que indica que se ha recibido el mensaje, ingresa **^C** (Ctrl-C) para detener el cliente del AWS IoT dispositivo.

1. Introduzca este comando para ver el final del archivo de registro de mensajes y ver el mensaje que publicó desde el **cliente de prueba de MQTT**.

   ```
   tail ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
   ```

Al ver el mensaje en el archivo de registro, ha demostrado que AWS IoT Device Client recibió el mensaje que usted publicó desde el cliente de prueba de MQTT.

## Suscribirse a varios temas de mensajes de MQTT utilizando caracteres comodín
<a name="iot-dc-testconn-subscribe-wild-topic"></a>

Estos procedimientos demuestran cómo el cliente del AWS IoT dispositivo puede suscribirse a los mensajes MQTT y registrarlos mediante caracteres comodín. Para ello, deberá:

1. Actualice el filtro de temas que el cliente del AWS IoT dispositivo utiliza para suscribirse a los temas de MQTT.

1. Actualizar la política utilizada por el dispositivo para permitir las nuevas suscripciones.

1. Ejecute el cliente del AWS IoT dispositivo y publique los mensajes desde la consola de pruebas de MQTT.

**Para crear un archivo de configuración y suscribirse a varios temas de mensajes de MQTT mediante un filtro de temas de MQTT con caracteres comodín**

1. En la ventana del terminal de su ordenador host local conectado a la Raspberry Pi, abra para **\$1/dc-configs/dc-pubsub-custom-config.json** para editar y localice el objeto `samples`.

1. En el editor de texto, localice el objeto `samples` y actualice el valor `subscribe-topic` para que tenga este aspecto. 

   ```
     "samples": {
       "pub-sub": {
         "enabled": true,
         "publish-topic": "test/dc/pubtopic",
         "publish-file": "~/messages/sample-ws-message.json",
         "subscribe-topic": "test/dc/#",
         "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
   ```

   El nuevo valor `subscribe-topic` es un [filtro de temas de MQTT](topics.md#topicfilters) con un carácter comodín de MQTT al final. Esto describe una suscripción a todos los temas de MQTT que comiencen con `test/dc/`. El cliente del AWS IoT dispositivo escribe las cargas útiles de mensajes que recibe de esta suscripción en el archivo mencionado. `subscribe-file`

1. Guarde el archivo de configuración modificado como **\$1/dc-configs/dc-pubsub-wild-config.json** y salga del editor de texto.

**Para modificar la política utilizada por su Raspberry Pi y permitir la suscripción y la recepción de varios temas de mensajes de MQTT**

1. En la ventana del terminal de su ordenador host local que esté conectado a la Raspberry Pi, en el editor de texto que prefiera, abra **\$1/policies/pubsub\$1test\$1thing\$1policy.json** para su edición y luego busque las declaraciones de política de `iot::Subscribe` y `iot::Receive` en el archivo.

1. En la declaración de política `iot::Subscribe`, actualice la cadena del objeto Resource para reemplazar `subtopic` por `*`, de forma que tenga el siguiente aspecto.

   ```
       {
         "Effect": "Allow",
         "Action": [
           "iot:Subscribe"
         ],
         "Resource": [
           "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/*"
         ]
       }
   ```
**nota**  
Los [caracteres comodín del filtro de temas de MQTT](topics.md#topicfilters) son `+` (signo más) y `#` (signo de almohadilla). Una solicitud de suscripción con un símbolo `#` al final suscribe todos los temas que comiencen por la cadena que precede al carácter `#` (por ejemplo, `test/dc/` en este caso).   
Sin embargo, el valor del recurso de la declaración de política que autoriza esta suscripción debe usar `*` (un asterisco) en lugar de `#` (signo de almohadilla) en el ARN del filtro de temas. Esto se debe a que el procesador de políticas utiliza un carácter comodín diferente al que utiliza MQTT.  
Para obtener más información sobre el uso de caracteres comodín en los temas y los filtros de temas en las políticas, consulte [Uso de caracteres comodín en MQTT y en las políticas AWS IoT Core](pub-sub-policy.md#pub-sub-policy-cert).

1. En la declaración de política `iot::Receive`, actualice la cadena del objeto Resource para reemplazar `subtopic` por `*`, de forma que tenga el siguiente aspecto.

   ```
       {
         "Effect": "Allow",
         "Action": [
           "iot:Receive"
         ],
         "Resource": [
           "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*"
         ]
       }
   ```

1. Guarde el documento de política actualizado como **\$1/policies/pubsub\$1wild\$1test\$1thing\$1policy.json** y salga del editor.

1. Introduzca este comando para actualizar la política de este tutorial con el fin de utilizar las nuevas definiciones de recursos.

   ```
   aws iot create-policy-version \
   --set-as-default \
   --policy-name "PubSubTestThingPolicy" \
   --policy-document "file://~/policies/pubsub_wild_test_thing_policy.json"
   ```

   Si el comando se ejecuta correctamente, devuelve una respuesta como esta. Observe que `policyVersionId` ahora es `2`, lo que indica que esta es la segunda versión de esta política. 

   Si ha actualizado correctamente la política, puede continuar con el siguiente procedimiento.

   ```
   {
       "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/PubSubTestThingPolicy",
       "policyDocument": "{\n  \"Version\": \"2012-10-17\",		 	 	 \n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"iot:Connect\"\n      ],\n      \"Resource\": [\n        \"arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing\"\n      ]\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"iot:Publish\"\n      ],\n      \"Resource\": [\n        \"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic\"\n      ]\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"iot:Subscribe\"\n      ],\n      \"Resource\": [\n        \"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/*\"\n      ]\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"iot:Receive\"\n      ],\n      \"Resource\": [\n        \"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*\"\n      ]\n    }\n  ]\n}\n",
       "policyVersionId": "2",
       "isDefaultVersion": true
   }
   ```

   Si aparece un error que indica que hay demasiadas versiones de la política como para guardar una nueva, introduzca este comando para ver una lista de las versiones actuales de la política. Revise la lista que devuelve este comando para buscar una versión de la política que pueda eliminar.

   ```
   aws iot list-policy-versions --policy-name "PubSubTestThingPolicy"
   ```

   Introduzca este comando para eliminar una versión que ya no necesite. Tenga en cuenta que no puede eliminar la versión de política predeterminada. La versión de política predeterminada es la que tiene un valor `isDefaultVersion` de `true`.

   ```
   aws iot delete-policy-version \
   --policy-name "PubSubTestThingPolicy" \
   --policy-version-id policyId
   ```

   Tras eliminar una versión de la política, vuelva a intentar este paso.

Con el archivo de configuración y la política actualizados, estará listo para hacer una demostración de las suscripciones estándar con el AWS IoT Device Client.

**Para demostrar cómo el cliente del AWS IoT dispositivo se suscribe y recibe varios temas de mensajes de MQTT**

1. En el **cliente de prueba de MQTT**, compruebe las suscripciones. Si el **cliente de pruebas de MQTT** está suscrito al filtro incluido en el tema **\$1**, continúe con el siguiente paso. De lo contrario, en la opción **Cliente de prueba de MQTT**, en la pestaña **Suscribirse a un tema**, en **Filtro de temas**, introduzca **\$1** (un carácter de almohadilla) y, a continuación, seleccione **Suscribirse** para suscribirse.

1. En la ventana del terminal de su ordenador host local conectado a su Raspberry Pi, introduzca estos comandos para iniciar AWS IoT Device Client.

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

1. Mientras observa el resultado del AWS IoT Device Client en la ventana del terminal del ordenador host local, vuelva al cliente de prueba de **MQTT**. En la pestaña **Publicar en un tema**, en **Nombre del tema**, introduzca **test/dc/subtopic** y, a continuación, seleccione **Publicar**. 

1. En la ventana del terminal, confirme que el mensaje se ha recibido buscando un mensaje como:

   ```
   2021-11-10T16:34:20.101Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 76 bytes
   ```

1. Mientras observa el resultado del AWS IoT Device Client en la ventana del terminal del ordenador host local, vuelva al cliente de **prueba de MQTT**. En la pestaña **Publicar en un tema**, en **Nombre del tema**, introduzca **test/dc/subtopic2** y, a continuación, seleccione **Publicar**. 

1. En la ventana del terminal, confirme que el mensaje se ha recibido buscando un mensaje como:

   ```
   2021-11-10T16:34:32.078Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 77 bytes
   ```

1. Cuando vea los mensajes que confirman la recepción de ambos mensajes, introduzca **^C** (Ctrl-C) para detener el AWS IoT Device Client.

1. Introduzca este comando para ver el final del archivo de registro de mensajes y ver el mensaje que publicó desde el **cliente de prueba de MQTT**.

   ```
   tail -n 20 ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
   ```
**nota**  
El archivo de registro contiene solo cargas de mensajes. Los temas de los mensajes no se registran en el archivo de registro de mensajes recibidos.  
Es posible que también vea el mensaje publicado por el cliente del AWS IoT dispositivo en el registro recibido. Esto se debe a que el filtro de temas comodín incluye ese tema del mensaje y, en ocasiones, el agente de mensajes puede procesar la solicitud de suscripción antes de enviar el mensaje publicado a los suscriptores.

Las entradas del archivo de registro demuestran que se recibieron los mensajes. Puede repetir este procedimiento utilizando otros nombres de temas. Se deben recibir y registrar todos los mensajes que tengan un nombre de tema que comience por `test/dc/`. Se ignoran los mensajes con nombres de temas que comiencen por cualquier otro texto.

Tras demostrar cómo el cliente del AWS IoT dispositivo puede publicar y suscribirse a los mensajes MQTT, continúe [Tutorial: Demuestre acciones remotas (trabajos) con el cliente del AWS IoT dispositivo](iot-dc-runjobs.md) haciéndolo.

# Tutorial: Demuestre acciones remotas (trabajos) con el cliente del AWS IoT dispositivo
<a name="iot-dc-runjobs"></a>

En estos tutoriales, configurará e implementará trabajos en su Raspberry Pi para demostrar cómo puede enviar operaciones remotas a sus dispositivos IoT.

**Para comenzar este tutorial:**
+ Configure su ordenador host local, una Raspberry Pi, tal como se utilizó en [la sección anterior](iot-dc-testconn.md). 
+ Si no has completado el tutorial de la sección anterior, puedes probar este tutorial utilizando la Raspberry Pi con una tarjeta microSD que contenga la imagen que guardaste después de instalar el AWS IoT Device Client. [(Opcional) Guardar la imagen de la tarjeta microSD](iot-dc-install-download.md#iot-dc-install-dc-save)
+ Si ya ha realizado esta demostración anteriormente, procure [Paso 2: Limpiar las demostraciones Cuenta de AWS después de crear con el cliente del AWS IoT dispositivo](iot-dc-cleanup.md#iot-dc-cleanup-cloud) eliminar todos los AWS IoT recursos que haya creado en ejecuciones anteriores para evitar errores de recursos duplicados.

Para completar este tutorial se necesitan aproximadamente 45 minutos.

**Cuando haya terminado con este tema:**
+ Habrás demostrado las diferentes formas en que tu dispositivo de IoT puede AWS IoT Core utilizarlos para ejecutar operaciones remotas gestionadas por AWS IoT .

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

**Topics**
+ [Preparación de Raspberry Pi para ejecutar trabajos](iot-dc-runjobs-prepare.md)
+ [Crea y ejecuta el trabajo AWS IoT con AWS IoT Device Client](iot-dc-runjobs-prepare-define.md)

# Preparación de Raspberry Pi para ejecutar trabajos
<a name="iot-dc-runjobs-prepare"></a>

Los procedimientos de esta sección describen cómo preparar la Raspberry Pi para ejecutar tareas mediante el AWS IoT Device Client.

**nota**  
Estos procedimientos son específicos del dispositivo. Si desea realizar los procedimientos de esta sección con más de un dispositivo al mismo tiempo, cada dispositivo necesitará su propia política y un certificado y un nombre únicos y específicos del dispositivo. Para asignar a cada dispositivo sus recursos exclusivos, realice este procedimiento una vez para cada dispositivo y, al mismo tiempo, cambie los elementos específicos del dispositivo, tal como se describe en los procedimientos.

**Topics**
+ [Aprovisionar la Raspberry Pi para demostrar trabajos](#iot-dc-runjobs-prepare-provision)
+ [Configure el cliente del AWS IoT dispositivo para ejecutar el agente de trabajos](#iot-dc-runjobs-prepare-config)

## Aprovisionar la Raspberry Pi para demostrar trabajos
<a name="iot-dc-runjobs-prepare-provision"></a>

Los procedimientos de esta sección aprovisionan tu Raspberry Pi AWS IoT mediante la creación de AWS IoT recursos y certificados de dispositivo para ella. 

**Topics**
+ [Cree y descargue archivos de certificados de dispositivos para demostrar los AWS IoT trabajos](#iot-dc-runjobs-prepare-cert)
+ [Cree AWS IoT recursos para demostrar los AWS IoT trabajos](#iot-dc-runjobs-prepare-iot)

### Cree y descargue archivos de certificados de dispositivos para demostrar los AWS IoT trabajos
<a name="iot-dc-runjobs-prepare-cert"></a>

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

Si está preparando más de un dispositivo, este procedimiento debe realizarse en cada uno de ellos.

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

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

1. Escriba el siguiente comando para crear los archivos de certificado del dispositivo.

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

   El comando devuelve una respuesta similar a la siguiente: Guarde el valor de `certificateArn` para utilizarlo más tarde.

   ```
   {
   "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 700 ~/certs/jobs
   chmod 644 ~/certs/jobs/*
   chmod 600 ~/certs/jobs/private.pem.key
   ```

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

   ```
   ls -l ~/certs/jobs
   ```

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

Una vez descargados los archivos de certificado del dispositivo en la Raspberry Pi, estará listo para continuar con [Aprovisionar la Raspberry Pi para demostrar trabajos](#iot-dc-runjobs-prepare-provision).

### Cree AWS IoT recursos para demostrar los AWS IoT trabajos
<a name="iot-dc-runjobs-prepare-iot"></a>

Cree los AWS IoT recursos para este dispositivo.

Si está preparando más de un dispositivo, este procedimiento debe realizarse en cada uno de ellos.



**Para aprovisionar el dispositivo en AWS IoT:**

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

1. Introduzca el siguiente comando para obtener la dirección del punto de conexión de datos del dispositivo de su Cuenta de AWS.

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

   El valor del punto de conexión no ha cambiado desde la última vez que ejecutó este comando. Al volver a ejecutar el comando aquí, será más fácil buscar y pegar el valor del punto de conexión de datos en el archivo de configuración utilizado en este tutorial.

   El comando **describe-endpoint** 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. *uniqueThingName*Sustitúyalos por un nombre único para el dispositivo. Si desea realizar este tutorial con varios dispositivos, asigne a cada dispositivo su propio nombre. Por ejemplo, **TestDevice01**, **TestDevice02**, etc.

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

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

   Como un AWS IoT recurso es una representación *virtual* de su dispositivo en la nube, podemos crear varios recursos AWS IoT para usarlos con diferentes propósitos. Todos pueden ser utilizados por el mismo dispositivo físico IoT para representar diferentes aspectos del dispositivo.
**nota**  
Cuando desee proteger la política para varios dispositivos, puede utilizar `${iot:Thing.ThingName}` en lugar del nombre del objeto estático, `uniqueThingName`.

   Estos tutoriales solo utilizarán un recurso a la vez por dispositivo. De esta forma, en estos tutoriales, se representan las diferentes demostraciones para que, después de crear los AWS IoT recursos para una demostración, pueda volver atrás y repetir las demostraciones utilizando los recursos que ha creado específicamente para cada una de ellas.

   Si AWS IoT se ha creado el recurso deseado, el comando devuelve una respuesta como esta. Registre el valor `thingArn` para usarlo más adelante cuando cree el trabajo para ejecutarlo en este dispositivo.

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

1. En la ventana del terminal:

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

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

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Connect"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:client/uniqueThingName"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Publish"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topic/test/dc/pubtopic",
                      "arn:aws:iot:us-west-2:123456789012:topic/$aws/events/job/*",
                      "arn:aws:iot:us-west-2:123456789012:topic/$aws/events/jobExecution/*",
                      "arn:aws:iot:us-west-2:123456789012:topic/$aws/things/uniqueThingName/jobs/*"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Subscribe"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topicfilter/test/dc/subtopic",
                      "arn:aws:iot:us-west-2:123456789012:topic/$aws/events/jobExecution/*",
                      "arn:aws:iot:us-west-2:123456789012:topicfilter/$aws/things/uniqueThingName/jobs/*"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Receive"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topic/test/dc/subtopic",
                      "arn:aws:iot:us-west-2:123456789012:topic/$aws/things/uniqueThingName/jobs/*"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:DescribeJobExecution",
                      "iot:GetPendingJobExecutions",
                      "iot:StartNextPendingJobExecution",
                      "iot:UpdateJobExecution"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topic/$aws/things/uniqueThingName"
                  ]
              }
          ]
      }
      ```

   1. En el editor, en la `Resource` sección de cada declaración de política, *us-west-2:57EXAMPLE833* sustitúyalo por el tuyo Región de AWS, dos puntos (:)) y tu Cuenta de AWS número de 12 dígitos.

   1. En el editor, en cada declaración de política, *uniqueThingName* sustitúyala por el nombre que le diste al recurso.

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

      Si ejecuta este procedimiento para varios dispositivos, guarde el archivo con este nombre de archivo en cada dispositivo.

1. *uniqueThingName*Reemplácelo por el nombre del dispositivo y, a continuación, ejecute este comando para crear una AWS IoT política que se adapte a ese dispositivo.

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

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

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

1. *uniqueThingName*Sustitúyalo por el nombre del dispositivo y `certificateArn` por el `certificateArn` valor que guardó anteriormente en esta sección para este dispositivo y, a continuación, ejecute este comando para adjuntar la política al certificado del dispositivo. 

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

   Si se ejecuta correctamente, este comando no devuelve nada.

1.  *uniqueThingName*Sustitúyalo por el nombre del dispositivo, `certificateArn` sustitúyalo por el `certificateArn` valor que guardó anteriormente en esta sección y, a continuación, ejecute este comando para adjuntar el certificado del dispositivo al AWS IoT recurso del elemento.

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

   Si se ejecuta correctamente, este comando no devuelve nada.

Una vez aprovisionada correctamente la Raspberry Pi, podrá repetir esta sección con otra Raspberry Pi de la prueba o, si ya se han aprovisionado todos los dispositivos, podrá continuar con [Configure el cliente del AWS IoT dispositivo para ejecutar el agente de trabajos](#iot-dc-runjobs-prepare-config).

## Configure el cliente del AWS IoT dispositivo para ejecutar el agente de trabajos
<a name="iot-dc-runjobs-prepare-config"></a>

Este procedimiento crea un archivo de configuración para que el cliente del AWS IoT dispositivo ejecute el agente de trabajos:.

Nota: Si está preparando más de un dispositivo, este procedimiento debe realizarse en cada uno de ellos.

**Para crear el archivo de configuración para probar el cliente del AWS IoT dispositivo:**

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

   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/jobs/device.pem.crt",
        "key": "~/certs/jobs/private.pem.key",
        "root-ca": "~/certs/AmazonRootCA1.pem",
        "thing-name": "uniqueThingName",
        "logging": {
          "enable-sdk-logging": true,
          "level": "DEBUG",
          "type": "STDOUT",
          "file": ""
        },
        "jobs": {
          "enabled": true,
          "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": false,
            "publish-topic": "",
            "publish-file": "",
            "subscribe-topic": "",
            "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 valor del punto final de los 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. *uniqueThingName*Sustitúyalo por el nombre del objeto que utilizaste para este dispositivo.

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

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

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

No utilizará el **cliente de prueba de MQTT** para esta prueba. Si bien el dispositivo intercambiará mensajes MQTT relacionados con las tareas AWS IoT, los mensajes de progreso de las tareas solo se intercambiarán con el dispositivo que las esté ejecutando. Como los mensajes de progreso del trabajo solo se intercambian con el dispositivo que ejecuta el trabajo, no puedes suscribirte a ellos desde otro dispositivo, como la consola. AWS IoT 

Después de guardar el archivo de configuración, estará listo para continuar con [Crea y ejecuta el trabajo AWS IoT con AWS IoT Device Client](iot-dc-runjobs-prepare-define.md).

# Crea y ejecuta el trabajo AWS IoT con AWS IoT Device Client
<a name="iot-dc-runjobs-prepare-define"></a>

Los procedimientos de esta sección crean un documento de trabajo y un recurso de AWS IoT trabajo. Tras crear el recurso de trabajo, AWS IoT envía el documento de trabajo a los destinos de trabajo especificados, a los que un agente de trabajos aplica el documento de trabajo al dispositivo o cliente.

**Topics**
+ [Creación y almacenamiento del documento de trabajo de IoT](#iot-dc-runjobs-prepare-define-jobdoc)
+ [Ejecute un trabajo AWS IoT para un dispositivo de IoT](#iot-dc-runjobs-prepare-define-job)

## Creación y almacenamiento del documento de trabajo de IoT
<a name="iot-dc-runjobs-prepare-define-jobdoc"></a>

Este procedimiento crea un documento de trabajo sencillo para incluirlo en un recurso de AWS IoT trabajo. Este documento de trabajo muestra el mensaje «¡Hola mundo\$1» en el destino del trabajo.

**Para crear y almacenar un documento de trabajo:**

1. Seleccione el bucket de Amazon S3 en el que guardará el documento de trabajo. Si no dispone de un bucket de Amazon S3 existente, deberá crear uno. Para obtener información sobre cómo crear buckets de Amazon S3, consulte los temas de [Introducción a Amazon S3](https://docs.aws.amazon.com//AmazonS3/latest/userguide/GetStartedWithS3.html).

1. Crear y guardar el documento de trabajo para este trabajo

   1. En el ordenador host local, abra un editor de texto.

   1. Copie y pegue este texto en el editor.

      ```
      {
          "operation": "echo",
          "args": ["Hello world!"]
      }
      ```

   1. En el equipo host local, guarde el contenido del editor en un archivo denominado **hello-world-job.json**.

   1. Confirme que el archivo se haya guardado correctamente. Algunos editores de texto agregan `.txt` automáticamente el nombre del archivo al guardar un archivo de texto. Si el editor lo ha agregado `.txt` al nombre del archivo, corrija el nombre del archivo antes de continuar.

1. Sustituya la *path\$1to\$1file* ruta por la ruta a**hello-world-job.json**, si no está en su directorio actual, *s3\$1bucket\$1name* sustitúyala por la ruta del bucket de Amazon S3 al bucket que ha seleccionado y, a continuación, ejecute este comando para colocar el documento de trabajo en el bucket de Amazon S3.

   ```
   aws s3api put-object \
   --key hello-world-job.json \
   --body path_to_file/hello-world-job.json --bucket s3_bucket_name
   ```

   La URL del documento de trabajo que identifica el documento de trabajo que ha almacenado en Amazon S3 se determina sustituyendo *s3\$1bucket\$1name* y *AWS\$1region* en la siguiente URL. Registre la URL resultante para utilizarla más adelante como *job\$1document\$1path*

   ```
   https://s3_bucket_name.s3.AWS_Region.amazonaws.com/hello-world-job.json
   ```
**nota**  
AWS la seguridad le impide abrir esta URL fuera de la suya Cuenta de AWS, por ejemplo, mediante un navegador. El motor de AWS IoT trabajos, que tiene acceso al archivo, utiliza la URL de forma predeterminada. En un entorno de producción, tendrá que asegurarse de que sus servicios de AWS IoT tengan permiso para acceder a los documentos de trabajo almacenados en Amazon S3.

Una vez que haya guardado la URL del documento de trabajo, continúe con [Ejecute un trabajo AWS IoT para un dispositivo de IoT](#iot-dc-runjobs-prepare-define-job).

## Ejecute un trabajo AWS IoT para un dispositivo de IoT
<a name="iot-dc-runjobs-prepare-define-job"></a>

Los procedimientos de esta sección inician el cliente del AWS IoT dispositivo en su Raspberry Pi para ejecutar el agente de tareas en el dispositivo y esperar a que se ejecuten las tareas. También crea un recurso de trabajo en AWS IoT, que enviará el trabajo a tu dispositivo IoT y se ejecutará en él.

**nota**  
Este procedimiento ejecuta un trabajo en un solo dispositivo.

**Para iniciar el agente de trabajos en su Raspberry Pi:**

1. En la ventana de terminal de tu ordenador host local que está conectado a tu Raspberry Pi, ejecuta este comando para iniciar el cliente del AWS IoT dispositivo.

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

1. En la ventana del terminal, confirma que el AWS IoT dispositivo es cliente y muestra estos mensajes

   ```
   2021-11-15T18:45:56.708Z [INFO]  {Main.cpp}: Jobs is enabled
                         .
                         .
                         .
   2021-11-15T18:45:56.708Z [INFO]  {Main.cpp}: Client base has been notified that Jobs has started
   2021-11-15T18:45:56.708Z [INFO]  {JobsFeature.cpp}: Running Jobs!
   2021-11-15T18:45:56.708Z [DEBUG] {JobsFeature.cpp}: Attempting to subscribe to startNextPendingJobExecution accepted and rejected
   2021-11-15T18:45:56.708Z [DEBUG] {JobsFeature.cpp}: Attempting to subscribe to nextJobChanged events
   2021-11-15T18:45:56.708Z [DEBUG] {JobsFeature.cpp}: Attempting to subscribe to updateJobExecutionStatusAccepted for jobId +
   2021-11-15T18:45:56.738Z [DEBUG] {JobsFeature.cpp}: Ack received for SubscribeToUpdateJobExecutionAccepted with code {0}
   2021-11-15T18:45:56.739Z [DEBUG] {JobsFeature.cpp}: Attempting to subscribe to updateJobExecutionStatusRejected for jobId +
   2021-11-15T18:45:56.753Z [DEBUG] {JobsFeature.cpp}: Ack received for SubscribeToNextJobChanged with code {0}
   2021-11-15T18:45:56.760Z [DEBUG] {JobsFeature.cpp}: Ack received for SubscribeToStartNextJobRejected with code {0}
   2021-11-15T18:45:56.776Z [DEBUG] {JobsFeature.cpp}: Ack received for SubscribeToStartNextJobAccepted with code {0}
   2021-11-15T18:45:56.776Z [DEBUG] {JobsFeature.cpp}: Ack received for SubscribeToUpdateJobExecutionRejected with code {0}
   2021-11-15T18:45:56.777Z [DEBUG] {JobsFeature.cpp}: Publishing startNextPendingJobExecutionRequest
   2021-11-15T18:45:56.785Z [DEBUG] {JobsFeature.cpp}: Ack received for StartNextPendingJobPub with code {0}
   2021-11-15T18:45:56.785Z [INFO]  {JobsFeature.cpp}: No pending jobs are scheduled, waiting for the next incoming job
   ```

1. En la ventana del terminal, cuando vea este mensaje, continúe con el siguiente procedimiento y cree el recurso de trabajo. Tenga en cuenta que puede que no sea la última entrada de la lista.

   ```
   2021-11-15T18:45:56.785Z [INFO]  {JobsFeature.cpp}: No pending jobs are scheduled, waiting for the next incoming job
   ```

**Para crear un recurso de AWS IoT trabajo**

1. En el ordenador host local:

   1. *job\$1document\$1url*Sustitúyalo por la URL del documento de trabajo de[Creación y almacenamiento del documento de trabajo de IoT](#iot-dc-runjobs-prepare-define-jobdoc).

   1. *thing\$1arn*Reemplácelo por el ARN del recurso que creó para su dispositivo y, a continuación, ejecute este comando.

      ```
      aws iot create-job \
      --job-id hello-world-job-1 \
      --document-source "job_document_url" \
      --targets "thing_arn" \
      --target-selection SNAPSHOT
      ```

      Si se ejecuta correctamente, el comando devuelve un resultado como este.

      ```
      {
        "jobArn": "arn:aws:iot:us-west-2:57EXAMPLE833:job/hello-world-job-1",
        "jobId": "hello-world-job-1"
      }
      ```

1. En la ventana del terminal, deberías ver un resultado del cliente del AWS IoT dispositivo como este.

   ```
   2021-11-15T18:02:26.688Z [INFO]  {JobsFeature.cpp}: No pending jobs are scheduled, waiting for the next incoming job
   2021-11-15T18:10:24.890Z [DEBUG] {JobsFeature.cpp}: Job ids differ
   2021-11-15T18:10:24.890Z [INFO]  {JobsFeature.cpp}: Executing job: hello-world-job-1
   2021-11-15T18:10:24.890Z [DEBUG] {JobsFeature.cpp}: Attempting to update job execution status!
   2021-11-15T18:10:24.890Z [DEBUG] {JobsFeature.cpp}: Not including stdout with the status details
   2021-11-15T18:10:24.890Z [DEBUG] {JobsFeature.cpp}: Not including stderr with the status details
   2021-11-15T18:10:24.890Z [DEBUG] {JobsFeature.cpp}: Assuming executable is in PATH
   2021-11-15T18:10:24.890Z [INFO]  {JobsFeature.cpp}: About to execute: echo Hello world!
   2021-11-15T18:10:24.890Z [DEBUG] {Retry.cpp}: Retryable function starting, it will retry until success
   2021-11-15T18:10:24.890Z [DEBUG] {JobsFeature.cpp}: Created EphermalPromise for ClientToken 3TEWba9Xj6 in the updateJobExecution promises map
   2021-11-15T18:10:24.890Z [DEBUG] {JobEngine.cpp}: Child process now running
   2021-11-15T18:10:24.890Z [DEBUG] {JobEngine.cpp}: Child process about to call execvp
   2021-11-15T18:10:24.890Z [DEBUG] {JobEngine.cpp}: Parent process now running, child PID is 16737
   2021-11-15T18:10:24.891Z [DEBUG] {16737}: Hello world!
   2021-11-15T18:10:24.891Z [DEBUG] {JobEngine.cpp}: JobEngine finished waiting for child process, returning 0
   2021-11-15T18:10:24.891Z [INFO]  {JobsFeature.cpp}: Job exited with status: 0
   2021-11-15T18:10:24.891Z [INFO]  {JobsFeature.cpp}: Job executed successfully!
   2021-11-15T18:10:24.891Z [DEBUG] {JobsFeature.cpp}: Attempting to update job execution status!
   2021-11-15T18:10:24.891Z [DEBUG] {JobsFeature.cpp}: Not including stdout with the status details
   2021-11-15T18:10:24.891Z [DEBUG] {JobsFeature.cpp}: Not including stderr with the status details
   2021-11-15T18:10:24.892Z [DEBUG] {Retry.cpp}: Retryable function starting, it will retry until success
   2021-11-15T18:10:24.892Z [DEBUG] {JobsFeature.cpp}: Created EphermalPromise for ClientToken GmQ0HTzWGg in the updateJobExecution promises map
   2021-11-15T18:10:24.905Z [DEBUG] {JobsFeature.cpp}: Ack received for PublishUpdateJobExecutionStatus with code {0}
   2021-11-15T18:10:24.905Z [DEBUG] {JobsFeature.cpp}: Removing ClientToken 3TEWba9Xj6 from the updateJobExecution promises map
   2021-11-15T18:10:24.905Z [DEBUG] {JobsFeature.cpp}: Success response after UpdateJobExecution for job hello-world-job-1
   2021-11-15T18:10:24.917Z [DEBUG] {JobsFeature.cpp}: Ack received for PublishUpdateJobExecutionStatus with code {0}
   2021-11-15T18:10:24.918Z [DEBUG] {JobsFeature.cpp}: Removing ClientToken GmQ0HTzWGg from the updateJobExecution promises map
   2021-11-15T18:10:24.918Z [DEBUG] {JobsFeature.cpp}: Success response after UpdateJobExecution for job hello-world-job-1
   2021-11-15T18:10:25.861Z [INFO]  {JobsFeature.cpp}: No pending jobs are scheduled, waiting for the next incoming job
   ```

1. Mientras el cliente del AWS IoT dispositivo está en ejecución y esperando un trabajo, puede enviar otro trabajo cambiando el `job-id` valor y volviendo a ejecutar el **create-job** del paso 1.

Cuando termines de ejecutar las tareas, en la ventana del terminal, ingresa ^C (Control-C) para detener el cliente del AWS IoT dispositivo.

# Tutorial: Limpiar después de ejecutar los tutoriales de AWS IoT Device Client
<a name="iot-dc-cleanup"></a>

Los procedimientos de este tutorial le explican cómo eliminar los archivos y recursos que ha creado mientras completa los tutoriales de esta ruta de aprendizaje.

**Topics**
+ [Paso 1: Limpiar sus dispositivos después de crear demostraciones con el cliente de AWS IoT dispositivos](#iot-dc-cleanup-devices)
+ [Paso 2: Limpiar las demostraciones Cuenta de AWS después de crear con el cliente del AWS IoT dispositivo](#iot-dc-cleanup-cloud)

## Paso 1: Limpiar sus dispositivos después de crear demostraciones con el cliente de AWS IoT dispositivos
<a name="iot-dc-cleanup-devices"></a>

Este tutorial describe dos opciones para limpiar la tarjeta microSD después de crear las demostraciones de esta ruta de aprendizaje. Elija la opción que ofrezca el nivel de seguridad que necesita.

Ten en cuenta que al limpiar la tarjeta microSD del dispositivo no se elimina ningún AWS IoT recurso que hayas creado. Para limpiar los AWS IoT recursos después de limpiar la tarjeta microSD del dispositivo, consulte el tutorial en. [Paso 2: Limpiar las demostraciones Cuenta de AWS después de crear con el cliente del AWS IoT dispositivo](#iot-dc-cleanup-cloud)

### Opción 1: Limpiar sobrescribiendo la tarjeta microSD
<a name="iot-dc-cleanup-devices-flash"></a>

La forma más fácil y completa de limpiar la tarjeta microSD después de completar los tutoriales de esta ruta de aprendizaje es sobrescribir la tarjeta microSD con un archivo de imagen guardado que creó al preparar el dispositivo por primera vez.

Este procedimiento utiliza el ordenador host local para escribir una imagen de tarjeta microSD guardada en una tarjeta microSD.

**nota**  
Si el dispositivo no utiliza un medio de almacenamiento extraíble para su sistema operativo, consulte el procedimiento correspondiente a ese dispositivo.

**Para escribir una nueva imagen en la tarjeta microSD**

1. En el ordenador host local, localice la imagen de la tarjeta microSD guardada que desee escribir en la tarjeta microSD. 

1. Inserte su tarjeta microSD en el ordenador host local.

1. Utilizando una herramienta de creación de imágenes de tarjetas SD, escriba el archivo de imagen seleccionado en la tarjeta microSD.

1. Después de escribir la imagen de Raspberry Pi SO en la tarjeta microSD, extraiga la tarjeta microSD y extráigala de forma segura del ordenador host local.

La tarjeta microSD está lista para usar.

### Opción 2: Limpiar eliminando los directorios de usuario
<a name="iot-dc-cleanup-devices-dirs"></a>

Para limpiar la tarjeta microSD después de completar los tutoriales sin volver sobrescribir la imagen de la tarjeta microSD, puede eliminar los directorios de usuario individualmente. Esto no es tan exhaustivo como volver a escribir la tarjeta microSD a partir de una imagen guardada porque no elimina ningún archivo del sistema que pueda haberse instalado.

Si la eliminación de los directorios de usuario es lo suficientemente exhaustiva para sus necesidades, puede seguir este procedimiento.

**Para eliminar los directorios de usuario de esta ruta de aprendizaje del dispositivo**

1. Para eliminar los directorios y subdirectorios de los usuarios y todos sus archivos que se crearon en esta ruta de aprendizaje, ejecute estos comandos en la ventana del terminal conectada a su dispositivo.
**nota**  
Tras eliminar estos directorios y archivos, no podrá ejecutar las demostraciones sin volver a completar los tutoriales.

   ```
   rm -Rf ~/dc-configs
   rm -Rf ~/policies
   rm -Rf ~/messages
   rm -Rf ~/certs
   rm -Rf ~/.aws-iot-device-client
   ```

1. Ejecute estos comandos para eliminar los directorios y archivos de origen de la aplicación en la ventana del terminal conectada a su dispositivo.
**nota**  
Estos comandos no desinstalan ningún programa. Solo eliminan los archivos de origen utilizados para crearlos e instalarlos. Después de eliminar estos archivos, es posible que el cliente del AWS IoT dispositivo AWS CLI y el dispositivo no funcionen.

   ```
   rm -Rf ~/aws-cli
   rm -Rf ~/aws
   rm -Rf ~/aws-iot-device-client
   ```

## Paso 2: Limpiar las demostraciones Cuenta de AWS después de crear con el cliente del AWS IoT dispositivo
<a name="iot-dc-cleanup-cloud"></a>

Estos procedimientos le ayudan a identificar y eliminar los AWS recursos que ha creado al completar los tutoriales de esta ruta de aprendizaje.

### Limpie AWS IoT los recursos
<a name="iot-dc-cleanup-cloud-iot"></a>

Este procedimiento le ayuda a identificar y eliminar los AWS IoT recursos que creó al completar los tutoriales de esta ruta de aprendizaje.


**AWS IoT recursos creados en esta ruta de aprendizaje**  

| Tutorial | Recurso de objetos | Recurso de políticas | 
| --- | --- | --- | 
|  [Tutorial: Instalación y configuración del cliente de AWS IoT dispositivos](iot-dc-install-dc.md)  |  **DevCliTestThing**  | DevCliTestThingPolicy | 
|  [Tutorial: Demuestre la comunicación de mensajes MQTT con el cliente del AWS IoT dispositivo](iot-dc-testconn.md)  |  **PubSubTestThing**  | PubSubTestThingPolicy | 
|  [Tutorial: Demuestre acciones remotas (trabajos) con el cliente del AWS IoT dispositivo](iot-dc-runjobs.md)  | definido por el usuario (puede haber más de uno) |  *definido por el usuario* (puede haber más de uno)  | 

**Para eliminar los AWS IoT recursos, siga este procedimiento para cada recurso que haya creado**

1. Reemplace `thing_name` por el nombre del recurso objeto que quiera eliminar y, a continuación, ejecute este comando para enumerar los certificados asociados al recurso objeto desde el equipo host local.

   ```
   aws iot list-thing-principals --thing-name thing_name
   ```

   Este comando devuelve una respuesta como esta, en la que se enumeran los certificados asociados a `thing_name`. En la mayoría de los casos, solo habrá un certificado en la lista.

   ```
   {
       "principals": [
           "arn:aws:iot:us-west-2:57EXAMPLE833:cert/23853eea3cf0edc7f8a69c74abeafa27b2b52823cab5b3e156295e94b26ae8ac"
       ]
   }
   ```

1. Para cada certificado enumerado en el comando anterior:

   1. Reemplace `certificate_ID` por el ID de certificado del comando anterior. El identificador del certificado son los caracteres alfanuméricos que siguen a `cert/` en el ARN devuelto por el comando anterior. A continuación, ejecute este comando para inactivar el certificado.

      ```
      aws iot update-certificate --new-status INACTIVE --certificate-id certificate_ID
      ```

      Si se ejecuta correctamente, el comando no devolverá nada.

   1. Reemplace `certificate_ARN` por el ARN del certificado de la lista de certificados devuelta anteriormente y, a continuación, ejecute este comando para enumerar las políticas asociadas a este certificado.

      ```
      aws iot list-attached-policies --target certificate_ARN
      ```

      Este comando devuelve una respuesta como esta que enumera las políticas asociadas al certificado. En la mayoría de los casos, solo habrá una política en la lista.

      ```
      {
          "policies": [
              {
                  "policyName": "DevCliTestThingPolicy",
                  "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/DevCliTestThingPolicy"
              }
          ]
      }
      ```

   1. Para cada política asociada al certificado:

      1. Reemplace `policy_name` por el valor `policyName` del comando anterior, reemplace `certificate_ARN` por el ARN del certificado y, a continuación, ejecute este comando para desasociar la política del certificado.

         ```
         aws iot detach-policy --policy-name policy_name --target certificate_ARN
         ```

         Si se ejecuta correctamente, el comando no devolverá nada.

      1. Reemplace `policy_name` por el valor `policyName` y, a continuación, ejecute este comando para comprobar si la política está asociada a más certificados.

         ```
         aws iot list-targets-for-policy --policy-name policy_name
         ```

         Si el comando devuelve una lista vacía como esta, la política no se asocia a ningún certificado y se seguirán enumerando las versiones de la política. Si aún hay certificados asociados a la política, continúe con el paso **detach-thing-principal**.

         ```
         {
             "targets": []
         }
         ```

      1. Reemplace `policy_name` por el valor `policyName` y, a continuación, ejecute este comando para comprobar las versiones de la política. Para eliminar la política, solo debe tener una versión.

         ```
         aws iot list-policy-versions --policy-name policy_name
         ```

         Si la política solo tiene una versión, como en este ejemplo, puede saltar al paso **delete-policy** y eliminar la política ahora.

         ```
         {
             "policyVersions": [
                 {
                     "versionId": "1",
                     "isDefaultVersion": true,
                     "createDate": "2021-11-18T01:02:46.778000+00:00"
                 }
             ]
         }
         ```

         Si la política tiene más de una versión, como en este ejemplo, se deben eliminar las versiones de la política con un valor `isDefaultVersion` de `false` antes de poder eliminar la política.

         ```
         {
             "policyVersions": [
                 {
                     "versionId": "2",
                     "isDefaultVersion": true,
                     "createDate": "2021-11-18T01:52:04.423000+00:00"
                 },
                 {
                     "versionId": "1",
                     "isDefaultVersion": false,
                     "createDate": "2021-11-18T01:30:18.083000+00:00"
                 }
             ]
         }
         ```

         Si necesita eliminar una versión de la política, reemplace `policy_name` por el valor `policyName`, reemplace `version_ID` por el valor `versionId` del comando anterior y, a continuación, ejecute este comando para eliminar una versión de la política.

         ```
         aws iot delete-policy-version --policy-name policy_name --policy-version-id version_ID
         ```

         Si se ejecuta correctamente, el comando no devolverá nada.

         Después de eliminar una versión de la política, repita este paso hasta que la política tenga solo una versión de política.

      1. Reemplace `policy_name` por el valor `policyName` y, a continuación, ejecute este comando para eliminar la política.

         ```
         aws iot delete-policy --policy-name policy_name
         ```

   1. Reemplace `thing_name` por el nombre del objeto, reemplace `certificate_ARN` por el ARN del certificado y, a continuación, ejecute este comando para desasociar el certificado del recurso de objeto.

      ```
      aws iot detach-thing-principal --thing-name thing_name --principal certificate_ARN
      ```

      Si se ejecuta correctamente, el comando no devolverá nada.

   1. Reemplace `certificate_ID` por el ID de certificado del comando anterior. El identificador del certificado son los caracteres alfanuméricos que siguen a `cert/` en el ARN devuelto por el comando anterior. A continuación, ejecute este comando para eliminar el recurso del certificado.

      ```
      aws iot delete-certificate --certificate-id certificate_ID
      ```

      Si se ejecuta correctamente, el comando no devolverá nada.

1. Reemplace `thing_name` por el nombre del objeto y, a continuación, ejecute este comando para eliminarlo.

   ```
   aws iot delete-thing --thing-name thing_name
   ```

   Si se ejecuta correctamente, el comando no devolverá nada. 

### Limpie AWS los recursos
<a name="iot-dc-cleanup-cloud-aws"></a>

Este procedimiento le ayuda a identificar y eliminar otros AWS recursos que haya creado al completar los tutoriales de esta ruta de aprendizaje.


**Otros AWS recursos creados en esta ruta de aprendizaje**  

| Tutorial | Tipo de recurso | Nombre o ID del recurso | 
| --- | --- | --- | 
|  [Tutorial: Demuestre acciones remotas (trabajos) con el cliente del AWS IoT dispositivo](iot-dc-runjobs.md)  | Objeto de Amazon S3 | hello-world-job.json | 
|  [Tutorial: Demuestre acciones remotas (trabajos) con el cliente del AWS IoT dispositivo](iot-dc-runjobs.md)  |  AWS IoT recursos laborales  | definido por el usuario | 

**Para eliminar los AWS recursos creados en esta ruta de aprendizaje**

1. Para eliminar otros trabajos creados en esta ruta de aprendizaje

   1. Ejecute este comando para enumerar los trabajos de su Cuenta de AWS.

      ```
      aws iot list-jobs
      ```

      El comando devuelve una lista de los AWS IoT trabajos que tiene Cuenta de AWS y Región de AWS que tiene el siguiente aspecto.

      ```
      {
          "jobs": [
              {
                  "jobArn": "arn:aws:iot:us-west-2:57EXAMPLE833:job/hello-world-job-2",
                  "jobId": "hello-world-job-2",
                  "targetSelection": "SNAPSHOT",
                  "status": "COMPLETED",
                  "createdAt": "2021-11-16T23:40:36.825000+00:00",
                  "lastUpdatedAt": "2021-11-16T23:40:41.375000+00:00",
                  "completedAt": "2021-11-16T23:40:41.375000+00:00"
              },
              {
                  "jobArn": "arn:aws:iot:us-west-2:57EXAMPLE833:job/hello-world-job-1",
                  "jobId": "hello-world-job-1",
                  "targetSelection": "SNAPSHOT",
                  "status": "COMPLETED",
                  "createdAt": "2021-11-16T23:35:26.381000+00:00",
                  "lastUpdatedAt": "2021-11-16T23:35:29.239000+00:00",
                  "completedAt": "2021-11-16T23:35:29.239000+00:00"
              }
          ]
      }
      ```

   1. Para cada trabajo que reconozca de la lista como un trabajo que creó en esta ruta de aprendizaje, `jobId` sustitúyalo por el `jobId` valor del trabajo que desea eliminar y, a continuación, ejecute este comando para eliminar un AWS IoT trabajo.

      ```
      aws iot delete-job --job-id jobId
      ```

      Si se ejecuta correctamente, el comando no devuelve nada.

1. Para eliminar los documentos de trabajo que guardó en un bucket de Amazon S3 en esta ruta de aprendizaje.

   1. Reemplace `bucket` por el nombre del bucket que utilizó y, a continuación, ejecute este comando para enumerar los objetos del bucket de Amazon S3 que utilizó.

      ```
      aws s3api list-objects --bucket bucket
      ```

      El comando devuelve una lista de los objetos de Amazon S3 en un bucket con el siguiente aspecto.

      ```
      {
          "Contents": [
              {
                  "Key": "hello-world-job.json",
                  "LastModified": "2021-11-18T03:02:12+00:00",
                  "ETag": "\"868c8bc3f56b5787964764d4b18ed5ef\"",
                  "Size": 54,
                  "StorageClass": "STANDARD",
                  "Owner": {
                      "DisplayName": "EXAMPLE",
                      "ID": "e9e3d6ec1EXAMPLEf5bfb5e6bd0a2b6ed03884d1ed392a82ad011c144736a4ee"
                  }
              },
              {
                  "Key": "iot_job_firmware_update.json",
                  "LastModified": "2021-04-13T21:57:07+00:00",
                  "ETag": "\"7c68c591949391791ecf625253658c61\"",
                  "Size": 66,
                  "StorageClass": "STANDARD",
                  "Owner": {
                      "DisplayName": "EXAMPLE",
                      "ID": "e9e3d6ec1EXAMPLEf5bfb5e6bd0a2b6ed03884d1ed392a82ad011c144736a4ee"
                  }
              },
              {
                  "Key": "order66.json",
                  "LastModified": "2021-04-13T21:57:07+00:00",
                  "ETag": "\"bca60d5380b88e1a70cc27d321caba72\"",
                  "Size": 29,
                  "StorageClass": "STANDARD",
                  "Owner": {
                      "DisplayName": "EXAMPLE",
                      "ID": "e9e3d6ec1EXAMPLEf5bfb5e6bd0a2b6ed03884d1ed392a82ad011c144736a4ee"
                  }
              }
          ]
      }
      ```

   1. Para cada objeto que reconozca de la lista como un objeto creado en esta ruta de aprendizaje, reemplace `bucket` por el nombre del bucket y `key` por el valor clave del objeto que quiera eliminar. A continuación, ejecute este comando para eliminar un objeto de Amazon S3.

      ```
       aws s3api delete-object --bucket bucket --key key
      ```

      Si se ejecuta correctamente, el comando no devuelve nada.

Después de eliminar todos los AWS recursos y objetos que creó al completar esta ruta de aprendizaje, puede empezar de nuevo y repetir los tutoriales.