

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Criando demonstrações com o AWS IoT Device Client
<a name="iot-tutorials-dc-intro"></a>

Os tutoriais neste plano de aprendizado orientam você pelas etapas para desenvolver um software de demonstração usando o AWS IoT Device Client. O AWS IoT Device Client fornece software que é executado em seu dispositivo de IoT para testar e demonstrar aspectos de uma solução de IoT baseada em. AWS IoT

O objetivo desses tutoriais é facilitar a exploração e a experimentação para que você tenha certeza de que a solução é AWS IoT compatível com sua solução antes de desenvolver o software do seu dispositivo.

**O que você aprenderá nesses tutoriais:**
+ Como preparar um Raspberry Pi para uso como um dispositivo de IoT com AWS IoT
+ Como demonstrar AWS IoT recursos usando o AWS IoT Device Client em seu dispositivo

Neste plano de aprendizado, você instalará o AWS IoT Device Client em seu próprio Raspberry Pi e criará os AWS IoT recursos na nuvem para demonstrar ideias de soluções de IoT. Embora os tutoriais desse plano de aprendizado demonstrem atributos usando um Raspberry Pi, eles explicam as metas e os procedimentos para ajudar você a adaptá-los a outros dispositivos.

## Pré-requisitos para criar demonstrações com o Device Client AWS IoT
<a name="iot-dc-tutorial-overview"></a>

Esta seção descreve o que você precisará ter antes de iniciar os tutoriais neste plano de aprendizado.

**Para fazer os tutoriais desse plano de aprendizado, você precisará:**
+ 

**Um Conta da AWS**  
Você pode usar o existente Conta da AWS, se tiver um, mas talvez seja necessário adicionar funções ou permissões adicionais para usar os AWS IoT recursos que esses tutoriais usam.

  Se você precisar criar um novo Conta da AWS, consulte[Configurar Conta da AWS](setting-up.md).
+ 

**Um Raspberry Pi ou dispositivo IoT compatível**  
Os tutoriais usam o [Raspberry Pi](https://www.raspberrypi.org/) porque, além de seus diferentes formatos, ele é amplamente usado e um dispositivo de demonstração relativamente barato. Os tutoriais foram testados no [Raspberry Pi 3 Modelo B\$1](https://www.raspberrypi.com/products/raspberry-pi-3-model-b-plus/), no [Raspberry Pi 4 Modelo B](https://www.raspberrypi.com/products/raspberry-pi-4-model-b/) e em uma instância do Amazon EC2 executando o Ubuntu Server 20.04 LTS (HVM). Para usar AWS CLI e executar os comandos, recomendamos que você use a versão mais recente do sistema operacional Raspberry Pi ([Raspberry Pi OS (64 bits)](https://www.raspberrypi.com/software/operating-systems/) ou OS Lite). Versões anteriores do SO podem funcionar, mas nós não as testamos.
**nota**  
Os tutoriais explicam os objetivos de cada etapa para ajudar você a adaptá-los ao hardware de IoT que ainda não testamos. No entanto, eles não descrevem especificamente como adaptá-los a outros dispositivos.
+ 

**Familiaridade com o sistema operacional do dispositivo de IoT**  
As etapas desses tutoriais pressupõem que você esteja familiarizado com o uso de comandos e operações básicas do Linux na interface de linha de comando suportada por um Raspberry Pi. Se você não estiver familiarizado com essas operações, talvez queira dedicar mais tempo para concluir os tutoriais.

  Para concluir esses tutoriais, você já deve entender como:
  + Executar com segurança as operações básicas do dispositivo, como montar e conectar componentes, conectar o dispositivo às fontes de alimentação necessárias e instalar e remover cartões de memória.
  + Carregar e baixar o software e os arquivos do sistema para o dispositivo. Se o dispositivo não usar um dispositivo de armazenamento removível, como um cartão microSD, você precisará saber como se conectar ao dispositivo e fazer o upload e o download do software e dos arquivos do sistema para o dispositivo.
  + Conecte seu dispositivo às redes nas quais você planeja usá-lo.
  + Conecte-se ao seu dispositivo a partir de outro computador usando um terminal SSH ou programa similar.
  + Use uma interface de linha de comando para criar, copiar, mover, renomear e definir as permissões de arquivos e diretórios no dispositivo.
  + Instale novos programas no dispositivo.
  + Transfira arquivos de e para o seu dispositivo usando ferramentas como FTP ou SCP.
+ 

**Um ambiente de desenvolvimento e teste para sua solução de IoT**  
Os tutoriais descrevem o software e o hardware necessários; no entanto, presumem que você poderá realizar operações que talvez não estejam descritas explicitamente. Exemplos desse hardware e dessas operações incluem:
  + 

**Um computador host local para baixar e armazenar arquivos**  
Para o Raspberry Pi, geralmente é um computador pessoal ou laptop que pode ler e gravar em cartões de memória microSD. O computador host local deve:
    + Estar conectado à Internet.
    + Ter a [AWS CLI](https://aws.amazon.com//cli/) instalada e configurada.
    + Tenha um navegador da Web compatível com o AWS console.
  + 

**Uma forma de conectar seu computador host local ao seu dispositivo para se comunicar com ele, inserir comandos e transferir arquivos**  
No Raspberry Pi, isso geralmente é feito usando SSH e SCP do computador host local.
  + 

**Um monitor, mouse e teclado para se conectar ao dispositivo de IoT**  
Eles podem ser úteis, mas não são necessários para concluir os tutoriais.
  + 

**Uma forma de seu computador host local e seus dispositivos de IoT se conectarem à Internet**  
Pode ser uma conexão de rede com fio ou sem fio a um roteador ou gateway conectado à Internet. O host local também deve ser capaz de se conectar ao Raspberry Pi. Isso pode exigir que eles estejam na mesma rede local. Os tutoriais não mostram como configurar isso para seu dispositivo específico ou configuração de dispositivo, mas mostram como você pode testar essa conectividade.
  + 

**Acesso ao roteador da sua rede local para visualizar os dispositivos conectados**  
Para concluir os tutoriais desse plano de aprendizado, você precisará encontrar o endereço IP do seu dispositivo de IoT.

    Em uma rede local, isso pode ser feito acessando a interface administrativa do roteador de rede ao qual seus dispositivos se conectam. Se você puder atribuir um endereço IP fixo ao seu dispositivo no roteador, poderá simplificar a reconexão após cada reinicialização do dispositivo.

    Se você tiver um teclado e um monitor conectados ao dispositivo, **ifconfig** poderá exibir o endereço IP do dispositivo.

    Se nada disso for uma opção, você precisará encontrar uma maneira de identificar o endereço IP do dispositivo após cada reinicialização. 

Depois de ter todos os seus materiais, continue para [Tutorial: Preparando seus dispositivos para o AWS IoT Device Client](iot-dc-prepare-device.md). 

**Topics**
+ [Pré-requisitos para criar demonstrações com o Device Client AWS IoT](#iot-dc-tutorial-overview)
+ [Tutorial: Preparando seus dispositivos para o AWS IoT Device Client](iot-dc-prepare-device.md)
+ [Tutorial: Instalando e configurando o AWS IoT Device Client](iot-dc-install-dc.md)
+ [Tutorial: Demonstre a comunicação de mensagens MQTT com o AWS IoT Device Client](iot-dc-testconn.md)
+ [Tutorial: Demonstre ações remotas (trabalhos) com o AWS IoT Device Client](iot-dc-runjobs.md)
+ [Tutorial: Limpando depois de executar os tutoriais do AWS IoT Device Client](iot-dc-cleanup.md)

# Tutorial: Preparando seus dispositivos para o AWS IoT Device Client
<a name="iot-dc-prepare-device"></a>

Este tutorial orienta você na inicialização do Raspberry Pi para prepará-lo para os tutoriais subsequentes neste percurso de aprendizado.

O objetivo desse tutorial é instalar a versão atual do sistema operacional do dispositivo e garantir que você possa se comunicar com o dispositivo no contexto do ambiente de desenvolvimento.

**Pré-requisitos**  
Antes de começar este tutorial, verifique se você tem os itens listados em [Pré-requisitos para criar demonstrações com o Device Client AWS IoT](iot-tutorials-dc-intro.md#iot-dc-tutorial-overview) disponíveis e prontos para uso.

A conclusão desse tutorial requer cerca de 90 minutos.

**Neste tutorial, você vai:**
+ Instalar e atualizar o sistema operacional do dispositivo.
+ Instalar e verificar qualquer software adicional necessário para executar os tutoriais.
+ Testar a conectividade do dispositivo e instalar os certificados necessários.

Depois de concluir este tutorial, o próximo tutorial prepara seu dispositivo para as demonstrações que usam o AWS IoT Device Client.

**Topics**
+ [Instalar e atualizar o sistema operacional do dispositivo](iot-dc-prepare-device-sys.md)
+ [Instalar e verificar o software necessário no seu dispositivo](iot-dc-prepare-device-sw.md)
+ [Testar o dispositivo e salvar o certificado de CA da Amazon](iot-dc-prepare-device-test.md)

# Instalar e atualizar o sistema operacional do dispositivo
<a name="iot-dc-prepare-device-sys"></a>

Os procedimentos nesta seção descrevem como inicializar o cartão microSD que o Raspberry Pi usa como unidade do sistema. O cartão microSD do Raspberry Pi contém o software do sistema operacional (OS), bem como espaço para o armazenamento de arquivos da aplicação. Se você não estiver usando um Raspberry Pi, siga as instruções do dispositivo para instalar e atualizar o software do sistema operacional do dispositivo.

Depois de concluir esta seção, você poderá iniciar o dispositivo de IoT e conectar-se a ele por meio do programa de terminal no computador host local.

**Equipamentos necessários:**
+ O ambiente local de desenvolvimento e testes
+ Um Raspberry Pi, ou dispositivo de IoT, que pode se conectar à Internet
+ Um cartão de memória microSD com capacidade de pelo menos 8 GB ou armazenamento suficiente para o sistema operacional e o software necessário.
**nota**  
Ao selecionar um cartão microSD para esses exercícios, escolha um que seja tão grande quanto necessário, mas tão pequeno quanto possível.  
Um cartão SD pequeno será mais rápido de fazer backup e atualizar. No Raspberry Pi, você não precisará de mais do que um cartão microSD de 8 GB para esses tutoriais. Se você precisar de mais espaço para a aplicação específica, os arquivos de imagem menores salvos nesses tutoriais poderão redimensionar o sistema de arquivos em um cartão maior para usar todo o espaço compatível do cartão que você escolher.

**Equipamento opcional:**
+ Um teclado USB conectado ao Raspberry Pi
+ Um monitor HDMI e um cabo para conectar o monitor ao Raspberry Pi

**Topics**
+ [Carregue o sistema operacional do dispositivo no cartão microSD](#iot-dc-prepare-device-sys-step1)
+ [Inicie o dispositivo de IoT com o novo sistema operacional](#iot-dc-prepare-device-sys-step2)
+ [Conectar o computador host local ao dispositivo](#iot-dc-prepare-device-sys-step3)

## Carregue o sistema operacional do dispositivo no cartão microSD
<a name="iot-dc-prepare-device-sys-step1"></a>

Esse procedimento usa o computador host local para carregar o sistema operacional do dispositivo em um cartão microSD.

**nota**  
Se o dispositivo não usar uma mídia de armazenamento removível para o sistema operacional, instale o sistema operacional usando o procedimento para esse dispositivo e continue na [Inicie o dispositivo de IoT com o novo sistema operacional](#iot-dc-prepare-device-sys-step2).

**Para instalar o sistema operacional no Raspberry Pi**

1. No computador host local, baixe e descompacte a imagem do sistema operacional Raspberry Pi que você deseja usar. As versões mais recentes estão disponíveis em [ https://www.raspberrypi.com/software/sistemas operacionais/](https://www.raspberrypi.com/software/operating-systems/) 

**Como escolher uma versão do sistema operacional Raspberry Pi**  
Este tutorial usa a versão **Raspberry Pi OS Lite** porque é a menor versão compatível com esses tutoriais neste percurso de aprendizado. Essa versão do sistema operacional Raspberry Pi tem apenas uma interface de linha de comando e não tem uma interface gráfica de usuário. Uma versão do sistema operacional Raspberry Pi mais recente com uma interface gráfica de usuário também funcionará com esses tutoriais; no entanto, os procedimentos descritos neste percurso de aprendizado usam somente a interface da linha de comando para realizar operações no Raspberry Pi.

1. Insira o cartão microSD no computador host local.

1. Usando uma ferramenta de imagem de cartão SD, grave o arquivo de imagem do sistema operacional descompactado no cartão microSD.

1. Depois de gravar a imagem do sistema operacional Raspberry Pi no cartão microSD:

   1. Abra a partição BOOT no cartão microSD em uma janela da linha de comando ou janela do explorador de arquivos. 

   1. Na partição BOOT do cartão microSD, no diretório raiz, crie um arquivo vazio chamado `ssh` sem extensão de arquivo e sem conteúdo. Isso faz com que o Raspberry Pi ative as comunicações SSH na primeira vez em que for iniciado.

1. Ejete o cartão microSD e remova-o com segurança do computador host local.

O cartão microSD está pronto para [Inicie o dispositivo de IoT com o novo sistema operacional](#iot-dc-prepare-device-sys-step2).

## Inicie o dispositivo de IoT com o novo sistema operacional
<a name="iot-dc-prepare-device-sys-step2"></a>

Este procedimento instala o cartão microSD e inicia o Raspberry Pi pela primeira vez usando o sistema operacional baixado.

**Para iniciar o dispositivo de IoT com o novo sistema operacional**

1. Com a alimentação desconectada do dispositivo, insira o cartão microSD da etapa anterior, [Carregue o sistema operacional do dispositivo no cartão microSD](#iot-dc-prepare-device-sys-step1), no Raspberry Pi.

1. Conecte o dispositivo a uma rede com fios.

1. Esses tutoriais interagirão com o Raspberry Pi por meio do computador host local usando um terminal SSH.

   Se você também quiser interagir diretamente com o dispositivo, você pode:

   1. Conectar um monitor HDMI a ele para assistir às mensagens do console do Raspberry Pi antes de conectar a janela do terminal do computador host local ao Raspberry Pi.

   1. Conectar um teclado USB a ele se quiser interagir diretamente com o Raspberry Pi.

1. Conectar a alimentação ao Raspberry Pi e esperar cerca de um minuto para que ele seja inicializado.

   Se você tiver um monitor conectado ao Raspberry Pi, poderá ver processo de inicialização nele.

1. 

   Descubra o endereço IP do dispositivo:
   + Se você conectou um monitor HDMI ao Raspberry Pi, o endereço IP aparecerá nas mensagens exibidas no monitor 
   + Se você tiver acesso ao roteador ao qual o Raspberry Pi está conectado, poderá ver o endereço na interface de administração do roteador.

Depois de ter o endereço IP do Raspberry Pi, você estará pronto para [Conectar o computador host local ao dispositivo](#iot-dc-prepare-device-sys-step3).

## Conectar o computador host local ao dispositivo
<a name="iot-dc-prepare-device-sys-step3"></a>

Este procedimento usa o programa de terminal no computador host local para se conectar ao Raspberry Pi e alterar a senha padrão.

**Para conectar o computador host local ao dispositivo**

1. 

   No computador host local, abra o programa do terminal SSH:
   + Windows: `PuTTY`
   + Linux/macOS: `Terminal`
**nota**  
O PuTTY não é instalado automaticamente no Windows. Se não estiver no computador, talvez seja necessário baixá-lo e instalá-lo.

1. Conecte o programa do terminal ao endereço IP do Raspberry Pi e faça login usando as credenciais padrão.

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

1. Depois de fazer login no Raspberry Pi, altere a senha do usuário `pi`.

   ```
   passwd
   ```

   Siga os prompts para alterar a senha.

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

Depois de inserir o prompt da linha de comando do Raspberry Pi na janela do terminal e alterar a senha, você estará pronto para continuar em [Instalar e verificar o software necessário no seu dispositivo](iot-dc-prepare-device-sw.md).

# Instalar e verificar o software necessário no seu dispositivo
<a name="iot-dc-prepare-device-sw"></a>

Os procedimentos nesta seção continuam com [a seção anterior](iot-dc-prepare-device-sys.md) para atualizar o sistema operacional do Raspberry Pi e instalar o software no Raspberry Pi que será usado na próxima seção para criar e instalar o AWS IoT Device Client.

Depois de concluir esta seção, seu Raspberry Pi terá um sistema up-to-date operacional, o software exigido pelos tutoriais neste plano de aprendizado, e será configurado para sua localização.

**Equipamentos necessários:**
+ O ambiente local de desenvolvimento e teste da [seção anterior](iot-dc-prepare-device-sys.md)
+ O Raspberry Pi usado na [seção anterior](iot-dc-prepare-device-sys.md)
+ O cartão de memória microSD da [seção anterior](iot-dc-prepare-device-sys.md)

**nota**  
O Raspberry Pi Model 3\$1 e o Raspberry Pi Model 4 podem executar todos os comandos descritos neste percurso de aprendizado. Se seu dispositivo de IoT não conseguir compilar o software ou executar o AWS Command Line Interface, talvez seja necessário instalar os compiladores necessários no computador host local para criar o software e depois transferi-lo para o dispositivo de IoT. Para obter mais informações sobre como instalar e compilar software para o dispositivo, consulte a documentação do software do dispositivo.

**Topics**
+ [Atualizar o software do sistema operacional](#iot-dc-prepare-device-sw-step1)
+ [Instale as aplicações e bibliotecas obrigatórias](#iot-dc-prepare-device-sw-step2)
+ [(Opcional) Salve a imagem do cartão microSD](#iot-dc-prepare-device-sw-step3)

## Atualizar o software do sistema operacional
<a name="iot-dc-prepare-device-sw-step1"></a>

Esse procedimento atualiza o software do sistema operacional.

**Para atualizar o software do sistema operacional no Raspberry Pi**

Execute essas etapas na janela do terminal do computador host local.

1. Digite esses comandos para atualizar o software do sistema no Raspberry Pi.

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

1. Atualize as configurações de localidade e fuso horário do Raspberry Pi (opcional).

   Digite esse comando para atualizar as configurações de localidade e fuso horário do dispositivo.

   ```
   sudo raspi-config
   ```

   1. Para definir a localidade do dispositivo:

      1. Na tela **Ferramenta de Configuração do Software Raspberry Pi (raspi-config)**, escolha a opção **5**.

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

         Use a tecla Tab para ir para **<Select>** e, em seguida, pressione a space bar.

      1. No menu de opções de localização, escolha a opção **L1**.

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

         Use a tecla Tab para ir para **<Select>** e, em seguida, pressione a space bar.

      1. Na lista de opções de localidade, escolha as localidades que você deseja instalar no Raspberry Pi usando as teclas de seta para rolar e space bar para marcar as que deseja. 

         Nos Estados Unidos, **`en_US.UTF-8`** é uma boa opção.

      1. Depois de selecionar as localidades para o dispositivo, use a tecla Tab para escolher **<OK>** e pressione a space bar para exibir a página de confirmação de **Configuração de localidades**.

   1. Para definir o fuso horário do dispositivo:

      1. Na tela **raspi-config**, escolha a opção **5**.

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

         Use a tecla Tab para ir para **<Select>** e, em seguida, pressione a space bar.

      1. No menu de opções de localização, use a tecla de seta para escolher a opção **L2**:

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

         Use a tecla Tab para ir para **<Select>** e, em seguida, pressione a space bar.

      1. No menu **Configuração de tzdata**, escolha a área geográfica na lista. 

         Use a tecla Tab para ir para **<OK>** e, em seguida, pressione a space bar.

      1. Na lista de cidades, use as teclas de seta para escolher uma cidade no fuso horário.

         Para definir o fuso horário, use a tecla Tab para ir para **<OK>** e, em seguida, pressione a space bar.

   1. Quando terminar de atualizar as configurações, use a tecla Tab para acessar **<Finish>** e pressione a space bar para fechar a aplicação **raspi-config**.

1. Digite este comando para reiniciar o Raspberry Pi.

   ```
   sudo shutdown -r 0
   ```

1. Aguarde a reinicialização do Raspberry Pi.

1. Depois que o Raspberry Pi for reiniciado, reconecte a janela do terminal no computador host local ao Raspberry Pi.

O software do sistema Raspberry Pi agora está configurado e você está pronto para continuar na [Instale as aplicações e bibliotecas obrigatórias](#iot-dc-prepare-device-sw-step2).

## Instale as aplicações e bibliotecas obrigatórias
<a name="iot-dc-prepare-device-sw-step2"></a>

Esse procedimento instala o software da aplicação e as bibliotecas que os tutoriais subsequentes usam.

Se você estiver usando um Raspberry Pi ou se puder compilar o software necessário no dispositivo de IoT, execute essas etapas na janela do terminal no computador host local. Se você precisar compilar software para o dispositivo de IoT no computador host local, analise a documentação do software do dispositivo de IoT para obter informações sobre como executar essas etapas no dispositivo.

**Para instalar o software da aplicação e as bibliotecas no Raspberry Pi**

1. Digite esse comando para instalar o software da aplicação e as bibliotecas.

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

1. Insira esses comandos para confirmar que a versão correta do software foi instalada.

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

1. 

   Confirme se essas versões do software da aplicação estão instaladas:
   + `gcc` 9.3.0 ou posterior
   + `cmake` 3.10.x ou posterior
   + `OpenSSL`: 1.1.1 ou posterior
   + `git`: 2.20.1 ou posterior

Se o Raspberry Pi tiver versões aceitáveis do software da aplicação necessário, você está pronto para continuar na [(Opcional) Salve a imagem do cartão microSD](#iot-dc-prepare-device-sw-step3).

## (Opcional) Salve a imagem do cartão microSD
<a name="iot-dc-prepare-device-sw-step3"></a>

Ao longo dos tutoriais deste percurso de aprendizado, você encontrará esses procedimentos para salvar uma cópia da imagem do cartão microSD do Raspberry Pi em um arquivo no computador host local. Embora incentivadas, elas não são tarefas obrigatórias. Ao salvar a imagem do cartão microSD onde sugerido, você pode pular os procedimentos que precedem o ponto de salvamento neste percurso de aprendizado, o que pode economizar tempo se você precisar tentar algo novamente. A consequência de não salvar a imagem do cartão microSD periodicamente é que talvez você precise reiniciar os tutoriais do percurso de aprendizado desde o início se o cartão microSD estiver danificado ou se você acidentalmente definir uma aplicação ou as configurações incorretamente.

Neste ponto, o cartão microSD do Raspberry Pi tem um sistema operacional atualizado e o software básico da aplicação carregado. Você pode economizar o tempo necessário para concluir as etapas anteriores salvando o conteúdo do cartão microSD em um arquivo agora. Ter a imagem atual da imagem do cartão microSD do dispositivo permite que você comece a partir deste ponto para continuar ou repetir um tutorial ou procedimento sem a necessidade de instalar e atualizar o software do zero.

**Para salvar a imagem do cartão microSD em um arquivo**

1. Digite este comando para desligar o Raspberry Pi.

   ```
   sudo shutdown -h 0
   ```

1. Depois que o Raspberry Pi for desligado completamente, desligue a energia.

1. Remova o cartão microSD do Raspberry Pi.

1. No computador host local: 

   1. Insira o cartão microSD.

   1. Usando uma ferramenta de imagem de cartão SD, grave a imagem do cartão microSD em um arquivo.

   1. Depois que a imagem do cartão microSD for salva, ejete o cartão do computador host local.

1. Com a alimentação desconectada do Raspberry Pi, insira o cartão microSD no Raspberry Pi.

1. Ligue o Raspberry Pi.

1. Depois de esperar cerca de um minuto, no computador host local, reconecte a janela do terminal no computador host local que estava conectado ao Raspberry Pi. e, em seguida, faça login no Raspberry Pi.

# Testar o dispositivo e salvar o certificado de CA da Amazon
<a name="iot-dc-prepare-device-test"></a>

Os procedimentos nesta seção continuam com a [seção anterior para instalar o](iot-dc-prepare-device-sw.md) AWS Command Line Interface e o certificado da Autoridade de Certificação usado para autenticar suas conexões com AWS IoT Core.

Depois de concluir esta seção, você saberá que seu Raspberry Pi tem o software de sistema necessário para instalar o AWS IoT Device Client e que ele tem uma conexão ativa com a Internet.

**Equipamentos necessários:**
+ O ambiente local de desenvolvimento e teste da [seção anterior](iot-dc-prepare-device-sw.md)
+ O Raspberry Pi usado na [seção anterior](iot-dc-prepare-device-sw.md)
+ O cartão de memória microSD da [seção anterior](iot-dc-prepare-device-sw.md)

**Topics**
+ [Instale o AWS Command Line Interface](#iot-dc-prepare-device-test-step1)
+ [Configure suas Conta da AWS credenciais](#iot-dc-prepare-device-test-step2)
+ [Fazer download do certificado da CA raiz da Amazon](#iot-dc-prepare-device-test-step3)
+ [(Opcional) Salve a imagem do cartão microSD](#iot-dc-prepare-device-test-step4)

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

Este procedimento instala o AWS CLI em seu Raspberry Pi.

Se você estiver usando um Raspberry Pi ou se puder compilar o software no dispositivo de IoT, execute essas etapas na janela do terminal no computador host local. Se você precisar compilar software para o dispositivo de IoT no computador host local, analise a documentação do software do dispositivo de IoT para obter informações sobre as bibliotecas que ele requer.

**Para instalar o AWS CLI em seu Raspberry Pi**

1. Use esses comandos para baixar e instalar a 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. Execute este comando para instalar AWS CLI o. Este comando pode levar até 15 minutos para ser concluído.

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

1. Execute esse comando para confirmar se a versão correta do AWS CLI foi instalada.

   ```
   aws --version
   ```

   A versão do AWS CLI deve ser 2.2 ou posterior.

Se AWS CLI exibiu sua versão atual, você está pronto para continuar[Configure suas Conta da AWS credenciais](#iot-dc-prepare-device-test-step2).

## Configure suas Conta da AWS credenciais
<a name="iot-dc-prepare-device-test-step2"></a>

Neste procedimento, você obterá Conta da AWS as credenciais e as adicionará para uso em seu Raspberry Pi.

**Para adicionar suas Conta da AWS credenciais ao seu dispositivo**

1. Obtenha um **ID de chave** de **acesso e uma chave de acesso secreta** Conta da AWS para autenticá-los AWS CLI em seu dispositivo. 

   Se você é novo no AWS IAM, o [ https://aws.amazon.com/premiumsupport/knowledge-center/create-access-key/](https://aws.amazon.com/premiumsupport/knowledge-center/create-access-key/)descreve o processo a ser executado no AWS console para criar credenciais do AWS IAM para usar em seu dispositivo. 

1. Na janela do terminal no computador host local que está conectado ao Raspberry Pi e com as credenciais de **ID da chave de acesso** e **Chave de acesso secreta** do dispositivo:

   1. Execute o aplicativo AWS configure com este comando:

      ```
      aws configure
      ```

   1. Insira as credenciais e informações de configuração quando solicitado:

      ```
      AWS Access Key ID: your Access Key ID
      AWS Secret Access Key: your Secret Access Key
      Default region name: your Região da AWS code
      Default output format: json
      ```

1. Execute esse comando para testar o acesso do seu dispositivo ao seu Conta da AWS AWS IoT Core terminal.

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

   Ele deve retornar seu endpoint AWS IoT de dados Conta da AWS específico, como este exemplo:

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

Se você ver seu endpoint Conta da AWS de AWS IoT dados específico, seu Raspberry Pi tem a conectividade e as permissões para continuar. [Fazer download do certificado da CA raiz da Amazon](#iot-dc-prepare-device-test-step3) 

**Importante**  
Suas Conta da AWS credenciais agora estão armazenadas no cartão microSD do seu Raspberry Pi. Embora isso facilite as interações futuras para você e para o software que você criará nesses tutoriais, elas também serão salvas e duplicadas em qualquer imagem de cartão microSD que você criar após essa etapa, por padrão. AWS   
Para proteger a segurança de suas Conta da AWS credenciais, antes de salvar mais imagens do cartão microSD, considere apagar as credenciais `aws configure` executando novamente e inserindo caracteres aleatórios para o ID da chave de acesso e **a chave de acesso** **secreta** para evitar Conta da AWS que suas credenciais sejam comprometidas.  
Se você descobrir que salvou suas Conta da AWS credenciais inadvertidamente, poderá desativá-las no console do IAM. AWS 

## Fazer download do certificado da CA raiz da Amazon
<a name="iot-dc-prepare-device-test-step3"></a>

Este procedimento baixa e salva uma cópia de um certificado da Autoridade de Certificação (CA) raiz da Amazon. O download desse certificado o salva para uso nos tutoriais subsequentes e também testa a conectividade do dispositivo com os serviços da AWS .

**Para fazer download do certificado da CA raiz da Amazon**

1. Execute o comando a seguir a fim de criar um diretório para o certificado.

   ```
   mkdir ~/certs
   ```

1. Execute este comando para fazer download do certificado da CA raiz da Amazon.

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

1. Execute esses comandos para definir o acesso ao diretório do certificado e o arquivo.

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

1. Execute esse comando para ver o arquivo de certificado da CA no novo diretório.

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

   Você deve ver uma entrada como essa. A data e a hora serão diferentes; no entanto, o tamanho do arquivo e todas as outras informações deverão ser iguais às mostradas aqui.

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

   Se o tamanho do arquivo não for `1188`, verifique os parâmetros do comando **curl**. Você pode ter baixado um arquivo incorreto.

## (Opcional) Salve a imagem do cartão microSD
<a name="iot-dc-prepare-device-test-step4"></a>

Neste ponto, o cartão microSD do Raspberry Pi tem um sistema operacional atualizado e o software básico da aplicação carregado. 

**Para salvar a imagem do cartão microSD em um arquivo**

1. Na janela do terminal do computador host local, limpe as credenciais da AWS .

   1. Execute o aplicativo AWS configure com este comando:

      ```
      aws configure
      ```

   1. Substitua as credenciais quando solicitado. Você pode deixar o **Nome da região padrão** e o **Formato de saída padrão** como estão pressionando **Enter**.

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

1. Digite este comando para desligar o Raspberry Pi.

   ```
   sudo shutdown -h 0
   ```

1. Depois que o Raspberry Pi for desligado completamente, remova o conector de alimentação.

1. Remova o cartão microSD do dispositivo.

1. No computador host local: 

   1. Insira o cartão microSD.

   1. Usando uma ferramenta de imagem de cartão SD, grave a imagem do cartão microSD em um arquivo.

   1. Depois que a imagem do cartão microSD for salva, ejete o cartão do computador host local.

1. Com a alimentação desconectada do Raspberry Pi, insira o cartão microSD no Raspberry Pi.

1. Ligue o dispositivo.

1. Após cerca de um minuto, no computador host local, reinicie a sessão da janela do terminal e faça login no dispositivo.

   **Não insira novamente suas Conta da AWS credenciais ainda.**

Depois de reiniciar e fazer login no Raspberry Pi, você estará pronto para continuar em [Tutorial: Instalando e configurando o AWS IoT Device Client](iot-dc-install-dc.md).

# Tutorial: Instalando e configurando o AWS IoT Device Client
<a name="iot-dc-install-dc"></a>

Este tutorial mostra a instalação e a configuração do AWS IoT Device Client e a criação dos AWS IoT recursos que você usará nesta e em outras demonstrações.

**Para iniciar este tutorial:**
+ Prepare o computador host local e o Raspberry Pi [com o tutorial anterior](iot-dc-prepare-device.md).

Este tutorial pode levar cerca de 90 minutos para ser concluído.

**Quando você concluir este tópico:**
+ Seu dispositivo de IoT estará pronto para ser usado em outras demonstrações do AWS IoT Device Client.
+ Você terá provisionado seu dispositivo de IoT em. AWS IoT Core
+ Você terá baixado e instalado o AWS IoT Device Client em seu dispositivo.
+ Você terá salvo uma imagem do cartão microSD do dispositivo que pode ser usada em tutoriais subsequentes.

**Equipamentos necessários:**
+ O ambiente local de desenvolvimento e teste da [seção anterior](iot-dc-prepare-device-test.md)
+ O Raspberry Pi usado na [seção anterior](iot-dc-prepare-device-test.md)
+ O cartão de memória microSD do Raspberry Pi usado na [seção anterior](iot-dc-prepare-device-test.md)

**Topics**
+ [Baixe e salve o AWS IoT Device Client](iot-dc-install-download.md)
+ [Provisione seu Raspberry Pi em AWS IoT](iot-dc-install-provision.md)
+ [Configurar o cliente do AWS IoT dispositivo para testar a conectividade](iot-dc-install-configure.md)

# Baixe e salve o AWS IoT Device Client
<a name="iot-dc-install-download"></a>

Os procedimentos nesta seção baixam o AWS IoT Device Client, compilam e instalam no seu Raspberry Pi. Depois de testar a instalação, você pode salvar a imagem do cartão microSD do Raspberry Pi para usar mais tarde quando quiser experimentar os tutoriais novamente.

**Topics**
+ [Baixe e crie o AWS IoT Device Client](#iot-dc-install-dc-download)
+ [Crie os diretórios usados pelos tutoriais](#iot-dc-install-dc-files)
+ [(Opcional) Salve a imagem do cartão microSD](#iot-dc-install-dc-save)

## Baixe e crie o AWS IoT Device Client
<a name="iot-dc-install-dc-download"></a>

Este procedimento instala o AWS IoT Device Client no seu Raspberry Pi.

Execute esses comandos na janela do terminal do computador host local conectado ao Raspberry Pi.

**Para instalar o AWS IoT Device Client em seu Raspberry Pi**

1. Digite esses comandos para baixar e criar o AWS IoT Device Client no seu 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. Execute esse comando para criar o AWS IoT Device Client. Este comando pode levar até 15 minutos para ser concluído.

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

   As mensagens de aviso exibidas durante a compilação do AWS IoT Device Client podem ser ignoradas.

   Esses tutoriais foram testados com o AWS IoT Device Client integrado**gcc**, versão (Raspbian 10.2.1-6\$1rpi1) 10.2.1 20210110 na versão de 30 de outubro de 2021 do Raspberry Pi OS (bullseye) on, versão (Raspbian 8.3.0-6\$1rpi1) 8.3.0 na versão de 7 de maio de 2021 do Raspberry Pi OS (**gcc**buster).

1. Depois que o AWS IoT Device Client terminar de criar, teste-o executando esse comando.

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

Se você ver a ajuda da linha de comando para o AWS IoT Device Client, o AWS IoT Device Client foi criado com sucesso e está pronto para ser usado.

## Crie os diretórios usados pelos tutoriais
<a name="iot-dc-install-dc-files"></a>

Este procedimento cria os diretórios no Raspberry Pi que serão usados para armazenar os arquivos usados pelos tutoriais neste percurso de aprendizado.

**Para criar os diretórios usados pelos tutoriais neste percurso de aprendizado:**

1. Execute esses comandos para criar os diretórios necessários.

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

1. Execute esses comandos para definir as permissões nos novos diretórios.

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

Depois de criar esses diretórios e definir permissões, continue em [(Opcional) Salve a imagem do cartão microSD](#iot-dc-install-dc-save).

## (Opcional) Salve a imagem do cartão microSD
<a name="iot-dc-install-dc-save"></a>

Neste ponto, o cartão microSD do seu Raspberry Pi tem um sistema operacional atualizado, o software básico do aplicativo e AWS IoT o Device Client. 

Se você quiser voltar para tentar esses exercícios e tutoriais novamente, pule os procedimentos anteriores gravando a imagem do cartão microSD que você salvou com esse procedimento em um novo cartão microSD e continue com os tutoriais em [Provisione seu Raspberry Pi em AWS IoT](iot-dc-install-provision.md).

**Para salvar a imagem do cartão microSD em um arquivo:**

Na janela do terminal do computador host local conectado ao Raspberry Pi:

1. Confirme se suas Conta da AWS credenciais não foram armazenadas.

   1. Execute o aplicativo AWS configure com este comando:

      ```
      aws configure
      ```

   1. Se suas credenciais tiverem sido armazenadas (se forem exibidas no prompt), insira a string **XYXYXYXYX** quando solicitada, conforme mostrado aqui. Deixe o **Nome da região padrão** e o **Formato de saída padrão** em branco.

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

1. Digite este comando para desligar o Raspberry Pi.

   ```
   sudo shutdown -h 0
   ```

1. Depois que o Raspberry Pi for desligado completamente, remova o conector de alimentação.

1. Remova o cartão microSD do dispositivo.

1. No computador host local: 

   1. Insira o cartão microSD.

   1. Usando uma ferramenta de imagem de cartão SD, grave a imagem do cartão microSD em um arquivo.

   1. Depois que a imagem do cartão microSD for salva, ejete o cartão do computador host local.

Você pode continuar com esse cartão microSD inserido em [Provisione seu Raspberry Pi em AWS IoT](iot-dc-install-provision.md).

# Provisione seu Raspberry Pi em AWS IoT
<a name="iot-dc-install-provision"></a>

Os procedimentos nesta seção começam com a imagem microSD salva que tem o AWS CLI e o AWS IoT Device Client instalado e criam os AWS IoT recursos e certificados de dispositivo que provisionam seu Raspberry Pi. AWS IoT

## Instale o cartão microSD no Raspberry Pi
<a name="iot-dc-install-dc-restore"></a>

Este procedimento instala o cartão microSD com o software necessário carregado e configurado no Raspberry Pi e o configura para que Conta da AWS você possa continuar com os tutoriais neste caminho de aprendizado.

Use um cartão microSD de [(Opcional) Salve a imagem do cartão microSD](iot-dc-install-download.md#iot-dc-install-dc-save) que tenha o software necessário para os exercícios e tutoriais deste percurso de aprendizado.

**Para instalar o cartão microSD no Raspberry Pi**

1. Com a alimentação desconectada do Raspberry Pi, insira o cartão microSD no Raspberry Pi.

1. Ligue o Raspberry Pi.

1. Após cerca de um minuto, no computador host local, reinicie a sessão da janela do terminal e faça login no Raspberry Pi.

1. No computador host local, na janela do terminal e com as credenciais de **ID da chave de acesso** de **Chave de acesso secreta** do Raspberry Pi:

   1. Execute o aplicativo AWS configure com este comando:

      ```
      aws configure
      ```

   1. Insira suas Conta da AWS credenciais e informações de configuração quando solicitado:

      ```
      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ão da AWS code
      Default output format [json]: json
      ```

Depois de restaurar suas Conta da AWS credenciais, você estará pronto para continuar[Provisione seu dispositivo em AWS IoT Core](#iot-dc-install-dc-provision).

## Provisione seu dispositivo em AWS IoT Core
<a name="iot-dc-install-dc-provision"></a>

Os procedimentos nesta seção criam os AWS IoT recursos que provisionam seu Raspberry Pi em AWS IoT. Ao criar esses recursos, você deverá registrar várias informações. Essas informações são usadas pela configuração do AWS IoT Device Client no próximo procedimento.

Para que seu Raspberry Pi funcione AWS IoT, ele deve ser provisionado. O provisionamento é o processo de criar e configurar os AWS IoT recursos necessários para oferecer suporte ao seu Raspberry Pi como um dispositivo de IoT.

Com o Raspberry Pi ligado e reiniciado, conecte a janela do terminal no computador host local ao Raspberry Pi e conclua esses procedimentos.

**Topics**
+ [Crie e baixe arquivos de certificado](#iot-dc-install-dc-provision-certs)
+ [Crie AWS IoT recursos](#iot-dc-install-dc-provision-resources)

### Crie e baixe arquivos de certificado
<a name="iot-dc-install-dc-provision-certs"></a>

Este procedimento cria os arquivos de certificado de dispositivo para esta demonstração.

**Para criar e baixar os arquivos de certificado de dispositivo para o Raspberry Pi**

1. Na janela do terminal do computador host local, insira esses comandos para criar os arquivos de certificado de dispositivo para o 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"
   ```

   O comando retorna uma resposta como a seguinte. Registre o valor de `certificateArn` para uso posterior.

   ```
   {
       "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. Insira os comandos a seguir para definir as permissões no diretório de certificados e arquivos.

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

1. Execute este comando para examinar as permissões nos diretórios e arquivos do certificado.

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

   A saída do comando deve ser a mesma vista aqui, com exceção das datas e horários do arquivo, que serão 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
   ```

Neste ponto, você tem os arquivos de certificado do dispositivo instalados no Raspberry Pi e pode continuar em [Crie AWS IoT recursos](#iot-dc-install-dc-provision-resources).

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

Esse procedimento provisiona seu dispositivo AWS IoT criando os recursos necessários para acessar AWS IoT recursos e serviços.

**Para provisionar seu dispositivo em AWS IoT**

1. Na janela do terminal do computador host local, insira o comando a seguir para obter o endereço do endpoint de dados do dispositivo da sua Conta da AWS.

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

   O comando das etapas anteriores retorna uma resposta como a seguir. Registre o valor de `endpointAddress` para uso posterior.

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

1. Digite este comando para criar um recurso para AWS IoT o seu Raspberry Pi.

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

   Se seu recurso AWS IoT Thing foi criado, o comando retornará uma resposta como essa.

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

1. Na janela do terminal:

   1. Abra um editor de texto, como o `nano`.

   1. Copie este documento de política JSON e cole-o no editor de texto aberto.  
****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Publish",
                      "iot:Subscribe",
                      "iot:Receive",
                      "iot:Connect"
                  ],
                  "Resource": [
                      "*"
                  ]
              }
          ]
      }
      ```
**nota**  
Este documento de política concede generosamente a cada recurso permissão para se conectar, receber, publicar e assinar. Normalmente, as políticas concedem permissão somente a recursos específicos para realizar ações específicas. No entanto, para o teste inicial de conectividade do dispositivo, essa política excessivamente geral e permissiva é usada para minimizar a chance de um problema de acesso durante esse teste. Nos tutoriais subsequentes, documentos de políticas com escopo mais restrito serão usados para demonstrar práticas recomendadas na elaboração de políticas.

   1. Salve o arquivo no editor de texto como **\$1/policies/dev\$1cli\$1test\$1thing\$1policy.json**. 

1. Execute esse comando para usar o documento de política das etapas anteriores para criar uma AWS IoT política.

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

   Se a política for criada, o comando retornará uma resposta 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. Execute este comando para anexar a política ao certificado do dispositivo. Substitua `certificateArn` pelo valor de `certificateArn` salvo anteriormente.

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

   Se houver êxito, o comando não retornará nada.

1. Execute esse comando para anexar o certificado do dispositivo ao recurso da AWS IoT coisa. Substitua `certificateArn` pelo valor de `certificateArn` salvo anteriormente.

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

   Se houver êxito, o comando não retornará nada.

Depois de provisionar seu dispositivo com sucesso AWS IoT, você estará pronto para continuar. [Configurar o cliente do AWS IoT dispositivo para testar a conectividade](iot-dc-install-configure.md)

# Configurar o cliente do AWS IoT dispositivo para testar a conectividade
<a name="iot-dc-install-configure"></a>

Os procedimentos nesta seção configuram o AWS IoT Device Client para publicar uma mensagem MQTT do seu Raspberry Pi.

**Topics**
+ [Crie o arquivo de configuração](#iot-dc-install-dc-configure-step1)
+ [Abra o cliente de teste MQTT](#iot-dc-install-dc-configure-step2)
+ [Execute AWS IoT o cliente do dispositivo](#iot-dc-install-dc-configure-step3)

## Crie o arquivo de configuração
<a name="iot-dc-install-dc-configure-step1"></a>

Esse procedimento cria o arquivo de configuração para testar o AWS IoT Device Client.

**Para criar o arquivo de configuração para testar o AWS IoT Device Client**
+ Na janela do terminal do computador host local conectado ao Raspberry Pi:

  1. Insira estes comandos para criar um diretório para os arquivos de configuração e definir a permissão no diretório:

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

  1. Abra um editor de texto, como o `nano`.

  1. Copie este documento JSON e cole-o no editor de texto aberto.

     ```
     {
       "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. Substitua o *endpoint* valor pelo endpoint de dados do dispositivo Conta da AWS que você encontrou em[Provisione seu dispositivo em AWS IoT Core](iot-dc-install-provision.md#iot-dc-install-dc-provision).

  1. Salve o arquivo no editor de texto como **\$1/dc-configs/dc-testconn-config.json**.

  1. Execute este comando para definir permissões no novo arquivo de configuração.

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

Após salvar o arquivo, você estará pronto para continuar em [Abra o cliente de teste MQTT](#iot-dc-install-dc-configure-step2).

## Abra o cliente de teste MQTT
<a name="iot-dc-install-dc-configure-step2"></a>

Esse procedimento prepara o **cliente de teste MQTT** no AWS IoT console para assinar a mensagem MQTT que o AWS IoT Device Client publica quando é executado.

**Para preparar o **cliente de teste MQTT** para assinar todas as mensagens MQTT**

1. No computador host local, no [console da AWS IoT](https://console.aws.amazon.com//iot/home#/test), selecione o **cliente de teste MQTT**.

1. Na guia **Assinar um tópico**, em **Filtro de tópicos**, insira **\$1** (um único sinal de cerquilha) e selecione **Assinar** para assinar cada tópico do MQTT.

1. Abaixo do rótulo **Assinaturas**, confirme que pode ver **\$1** (um único sinal de jogo da velha).

Deixe a janela com o **cliente de teste MQTT** aberta enquanto continua na [Execute AWS IoT o cliente do dispositivo](#iot-dc-install-dc-configure-step3).

## Execute AWS IoT o cliente do dispositivo
<a name="iot-dc-install-dc-configure-step3"></a>

Esse procedimento executa o AWS IoT Device Client para que ele publique uma única mensagem MQTT que o **cliente de teste MQTT** receba e exiba.

**Para enviar uma mensagem MQTT do AWS IoT Device Client**

1. Certifique-se de que a janela do terminal conectada ao Raspberry Pi e a janela com o **cliente de teste MQTT** estejam visíveis enquanto você realiza esse procedimento.

1. Na janela do terminal, insira esses comandos para executar o AWS IoT Device Client usando o arquivo de configuração criado em[Crie o arquivo de configuração](#iot-dc-install-dc-configure-step1).

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

   Na janela do terminal, o AWS IoT Device Client exibe mensagens informativas e quaisquer erros que ocorram durante a execução.

   Caso nenhum erro seja exibido na janela do terminal, examine o **cliente de teste do MQTT**.

1. No **cliente de teste do MQTT**, na janela Assinaturas, consulte a mensagem *Olá, mundo\$1* enviada ao tópico de mensagem `test/dc/pubtopic`.

1. Se o AWS IoT Device Client não exibir erros e você ver *Hello World\$1* enviada para a `test/dc/pubtopic` mensagem no **cliente de teste do MQTT**, você demonstrou uma conexão bem-sucedida.

1. Na janela do terminal, digite **^C** (Ctrl-C) para parar o AWS IoT Device Client.

Depois de demonstrar que o AWS IoT Device Client está funcionando corretamente em seu Raspberry Pi e pode se comunicar com AWS IoT, você pode continuar com o. [Tutorial: Demonstre a comunicação de mensagens MQTT com o AWS IoT Device Client](iot-dc-testconn.md)

# Tutorial: Demonstre a comunicação de mensagens MQTT com o AWS IoT Device Client
<a name="iot-dc-testconn"></a>

Este tutorial demonstra como o AWS IoT Device Client pode assinar e publicar mensagens MQTT, que são comumente usadas em soluções de IoT.

**Para iniciar este tutorial:**
+ Configure seu computador host local e Raspberry Pi como [na seção anterior](iot-dc-install-dc.md).

  Se você salvou a imagem do cartão microSD depois de instalar o AWS IoT Device Client, você pode usar um cartão microSD com essa imagem com seu Raspberry Pi.
+ Se você já executou essa demonstração antes, revise [Etapa 2: Limpar suas demonstrações Conta da AWS após a criação com o AWS IoT Device Client](iot-dc-cleanup.md#iot-dc-cleanup-cloud) para excluir todos os AWS IoT recursos que você criou em execuções anteriores para evitar erros de recursos duplicados.

Este tutorial leva cerca de 45 minutos para ser concluído.

**Quando você concluir este tópico:**
+ Você terá demonstrado diferentes maneiras pelas quais seu dispositivo de IoT pode assinar mensagens MQTT AWS IoT e publicar mensagens MQTT em. AWS IoT

**Equipamentos necessários:**
+ O ambiente local de desenvolvimento e teste da [seção anterior](iot-dc-install-dc.md)
+ O Raspberry Pi usado na [seção anterior](iot-dc-install-dc.md)
+ O cartão de memória microSD do Raspberry Pi usado na [seção anterior](iot-dc-install-dc.md)

**Topics**
+ [Preparar o Raspberry Pi para demonstrar a comunicação de mensagens MQTT](iot-dc-testconn-provision.md)
+ [Demonstre a publicação de mensagens com o AWS IoT Device Client](iot-dc-testconn-publish.md)
+ [Demonstre a assinatura de mensagens com o AWS IoT Device Client](iot-dc-testconn-subscribe.md)

# Preparar o Raspberry Pi para demonstrar a comunicação de mensagens MQTT
<a name="iot-dc-testconn-provision"></a>

Esse procedimento cria os recursos no AWS IoT e no Raspberry Pi para demonstrar a comunicação de mensagens MQTT usando o AWS IoT Device Client.

**Topics**
+ [Criar os arquivos de certificado para demonstrar a comunicação MQTT](#iot-dc-testconn-provision-certs)
+ [Provisione seu dispositivo para demonstrar a comunicação MQTT](#iot-dc-testconn-provision-aws)
+ [Configure o arquivo de configuração do AWS IoT Device Client e o cliente de teste MQTT para demonstrar a comunicação MQTT](#iot-dc-testconn-provision-dc-config)

## Criar os arquivos de certificado para demonstrar a comunicação MQTT
<a name="iot-dc-testconn-provision-certs"></a>

Este procedimento cria os arquivos de certificado de dispositivo para esta demonstração.

**Para criar e baixar os arquivos de certificado de dispositivo para o Raspberry Pi**



1. Na janela do terminal do computador host local, insira o comando a seguir para criar os arquivos de certificado de dispositivo para o 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"
   ```

   O comando retorna uma resposta como a seguinte. Salve o valor de `certificateArn` para uso posterior.

   ```
   {
   "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. Insira os comandos a seguir para definir as permissões no diretório de certificados e arquivos.

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

1. Execute este comando para examinar as permissões nos diretórios e arquivos do certificado.

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

   A saída do comando deve ser a mesma vista aqui, com exceção das datas e horários do arquivo, que serão 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. Digite esses comandos para criar os diretórios para os arquivos de log.

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

## Provisione seu dispositivo para demonstrar a comunicação MQTT
<a name="iot-dc-testconn-provision-aws"></a>

Esta seção cria os AWS IoT recursos que provisionam seu Raspberry Pi em AWS IoT. 

**Para provisionar seu dispositivo no AWS IoT:**

1. Na janela do terminal do computador host local, insira o comando a seguir para obter o endereço do endpoint de dados do dispositivo da sua Conta da AWS.

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

   O valor do endpoint não foi alterado desde quando este comando foi executado no tutorial anterior. Uma nova execução deste comando facilita localizar e colar o valor do endpoint de dados no arquivo de configuração usado neste tutorial.

   O comando das etapas anteriores retorna uma resposta como a seguir. Registre o valor de `endpointAddress` para uso posterior.

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

1. Digite este comando para criar um novo recurso para AWS IoT o seu Raspberry Pi.

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

   Como um recurso de AWS IoT coisas é uma representação *virtual* do seu dispositivo na nuvem, podemos criar vários recursos de coisas AWS IoT para serem usados para finalidades diferentes. Todos os recursos de objetos podem ser usados pelo mesmo dispositivo físico de IoT para representar aspectos diferentes do dispositivo.

   Estes tutoriais usarão apenas um recurso de objeto por vez para representar o Raspberry Pi. Dessa forma, nesses tutoriais, eles representam as diferentes demonstrações para que, depois de criar os AWS IoT recursos para uma demonstração, você possa voltar e repetir a demonstração usando os recursos criados especificamente para cada uma.

   Se seu recurso AWS IoT Thing foi criado, o comando retornará uma resposta como essa.

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

1. Na janela do terminal:

   1. Abra um editor de texto, como o `nano`.

   1. Copie este documento JSON e cole-o no editor de texto aberto.  
****  

      ```
      {
          "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. No editor, em cada `Resource` seção do documento de política, *us-west-2:57EXAMPLE833* substitua por seu Região da AWS, um caractere de dois pontos (:)) e seu número de 12 dígitos Conta da AWS .

   1. Salve o arquivo no editor de texto como **\$1/policies/pubsub\$1test\$1thing\$1policy.json**. 

1. Execute esse comando para usar o documento de política das etapas anteriores para criar uma AWS IoT política.

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

   Se a política for criada, o comando retornará uma resposta 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. Execute este comando para anexar a política ao certificado do dispositivo. Substitua `certificateArn` pelo valor de `certificateArn` salvo anteriormente nesta seção.

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

   Se houver êxito, o comando não retornará nada.

1. Execute o comando a seguir para anexar o certificado de dispositivo ao recurso de objeto do AWS IoT . Substitua `certificateArn` pelo valor de `certificateArn` salvo anteriormente nesta seção.

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

   Se houver êxito, o comando não retornará nada.

Depois de provisionar seu dispositivo com sucesso AWS IoT, você estará pronto para continuar[Configure o arquivo de configuração do AWS IoT Device Client e o cliente de teste MQTT para demonstrar a comunicação MQTT](#iot-dc-testconn-provision-dc-config).

## Configure o arquivo de configuração do AWS IoT Device Client e o cliente de teste MQTT para demonstrar a comunicação MQTT
<a name="iot-dc-testconn-provision-dc-config"></a>

Esse procedimento cria um arquivo de configuração para testar o AWS IoT Device Client.

**Para criar o arquivo de configuração para testar o AWS IoT Device Client**

1. Na janela do terminal do computador host local conectado ao Raspberry Pi:

   1. Abra um editor de texto, como o `nano`.

   1. Copie este documento JSON e cole-o no editor de texto aberto.

      ```
      {
        "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. Substitua o *endpoint* valor pelo endpoint de dados do dispositivo Conta da AWS que você encontrou em[Provisione seu dispositivo em AWS IoT Core](iot-dc-install-provision.md#iot-dc-install-dc-provision).

   1. Salve o arquivo no editor de texto como **\$1/dc-configs/dc-pubsub-config.json**.

   1. Execute este comando para definir permissões no novo arquivo de configuração.

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

1. Para preparar o **cliente de teste MQTT** para assinar todas as mensagens MQTT:

   1. No computador host local, no [console da AWS IoT](https://console.aws.amazon.com//iot/home#/test), selecione o **cliente de teste MQTT**.

   1. Na guia **Assinar um tópico**, em **Filtro de tópicos**, insira **\$1** (um único sinal de jogo da velha) e selecione **Assinar**.

   1. Abaixo do rótulo **Assinaturas**, confirme que pode ver **\$1** (um único sinal de jogo da velha).

   Deixe a janela com o **cliente de teste MQTT** aberta enquanto prossegue com este tutorial.

Depois de salvar o arquivo e configurar o **cliente de teste MQTT**, você estará pronto para avançar para [Demonstre a publicação de mensagens com o AWS IoT Device Client](iot-dc-testconn-publish.md).

# Demonstre a publicação de mensagens com o AWS IoT Device Client
<a name="iot-dc-testconn-publish"></a>

Os procedimentos nesta seção demonstram como o AWS IoT Device Client pode enviar mensagens MQTT padrão e personalizadas.

As seguintes declarações de política na política criada na etapa anterior para esses exercícios concedem ao Raspberry Pi permissão para realizar estas ações:
+ 

**`iot:Connect`**  
Fornece o nome do cliente`PubSubTestThing`, seu Raspberry Pi executando o AWS IoT Device Client, para se conectar.

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

**`iot:Publish`**  
Permite que o Raspberry Pi publique mensagens com um tópico MQTT de `test/dc/pubtopic`.

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

  A ação `iot:Publish` concede permissão para publicar em tópicos MQTT listados na matriz de recursos. A declaração de política não controla o *conteúdo* dessas mensagens.

## Publique a mensagem padrão usando o AWS IoT Device Client
<a name="iot-dc-testconn-publish-default"></a>

Esse procedimento executa o AWS IoT Device Client para que ele publique uma única mensagem MQTT padrão que o **cliente de teste MQTT** recebe e exibe.

**Para enviar a mensagem MQTT padrão do AWS IoT Device Client**

1. Certifique-se de que a janela do terminal do computador host local conectado ao Raspberry Pi e a janela com o **cliente de teste MQTT** estejam visíveis enquanto você realiza esse procedimento.

1. Na janela do terminal, insira esses comandos para executar o AWS IoT Device Client usando o arquivo de configuração criado em[Crie o arquivo de configuração](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
   ```

   Na janela do terminal, o AWS IoT Device Client exibe mensagens informativas e quaisquer erros que ocorram durante a execução.

   Caso nenhum erro seja exibido na janela do terminal, examine o **cliente de teste do MQTT**.

1. No **cliente de teste do MQTT**, na janela **Assinaturas**, consulte a mensagem *Olá, mundo\$1* enviada ao tópico de mensagem `test/dc/pubtopic`.

1. Se o AWS IoT Device Client não exibir erros e você ver *Hello World\$1* enviada para a `test/dc/pubtopic` mensagem no **cliente de teste do MQTT**, você demonstrou uma conexão bem-sucedida.

1. Na janela do terminal, digite **^C** (Ctrl-C) para parar o AWS IoT Device Client.

Depois de demonstrar que o AWS IoT Device Client publicou a mensagem padrão do MQTT, você pode continuar com o. [Publique uma mensagem personalizada usando o AWS IoT Device Client](#iot-dc-testconn-publish-custom)

## Publique uma mensagem personalizada usando o AWS IoT Device Client
<a name="iot-dc-testconn-publish-custom"></a>

Os procedimentos desta seção criam uma mensagem MQTT personalizada e, depois, executam o AWS IoT Device Client para que ele publique a mensagem MQTT personalizada uma vez para que o **cliente de teste MQTT** a receba e exiba.

### Crie uma mensagem MQTT personalizada para o AWS IoT Device Client
<a name="iot-dc-testconn-publish-custom-create"></a>

Realize as seguintes etapas na janela do terminal do computador host local que está conectado ao Raspberry Pi.

**Para criar uma mensagem personalizada para o AWS IoT Device Client publicar**

1. Na janela do terminal, abra um editor de texto, como o `nano`.

1. No editor de texto, copie e cole o seguinte documento JSON. Essa será a carga útil da mensagem MQTT que o AWS IoT Device Client publica.

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

1. Salve o conteúdo do editor de texto como **\$1/messages/sample-ws-message.json**. 

1. Digite o comando a seguir para definir as permissões do arquivo de mensagem que você acabou de criar.

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

**Para criar um arquivo de configuração para o AWS IoT Device Client usar para enviar a mensagem personalizada**

1. Na janela do terminal, em um editor de texto como`nano`, abra o arquivo de configuração existente do AWS IoT Device Client:**\$1/dc-configs/dc-pubsub-config.json**. 

1. Edite o objeto `samples` para que ele fique assim. Não são necessárias alterações em outras partes deste arquivo.

   ```
     "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. Salve o conteúdo do editor de texto como **\$1/dc-configs/dc-pubsub-custom-config.json**. 

1. Execute este comando para definir permissões no novo arquivo de configuração.

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

### Publique a mensagem MQTT personalizada usando o AWS IoT Device Client
<a name="iot-dc-testconn-publish-custom-publish"></a>

Essa alteração afeta somente o *conteúdo* da carga da mensagem MQTT, então a política atual permanecerá funcionando. No entanto, se o *tópico MQTT* (conforme definido pelo valor de `publish-topic` em`~/dc-configs/dc-pubsub-custom-config.json`) fosse alterado, a declaração de política `iot::Publish` também precisaria ser modificada para permitir que o Raspberry Pi publique no novo tópico do MQTT.

**Para enviar a mensagem MQTT do AWS IoT Device Client**

1. Certifique-se de que a janela do terminal e a janela com o **cliente de teste MQTT** estejam visíveis enquanto você realiza esse procedimento. Além disso, certifique-se de que o **cliente de teste MQTT** ainda seja assinante no filtro de tópicos **\$1**. Se não o for, assine novamente o filtro de tópicos **\$1**.

1. Na janela do terminal, digite os seguintes comandos para executar o AWS IoT Device Client usando o arquivo de configuração criado em [Crie o arquivo de configuração](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
   ```

   Na janela do terminal, o AWS IoT Device Client exibe mensagens informativas e quaisquer erros que ocorram durante a execução.

   Caso nenhum erro seja exibido na janela do terminal, examine o cliente de teste do MQTT.

1. No **cliente de teste MQTT**, na janela **Assinaturas**, examine a carga de mensagem personalizada enviada ao tópico de mensagem `test/dc/pubtopic`.

1. Se o AWS IoT Device Client não exibir erros e você ver a carga da mensagem personalizada que você publicou na `test/dc/pubtopic` mensagem no **cliente de teste do MQTT**, você publicou uma mensagem personalizada com sucesso.

1. Na janela do terminal, digite **^C** (Ctrl-C) para parar o AWS IoT Device Client.

Depois de demonstrar que o AWS IoT Device Client publicou uma carga de mensagem personalizada, você pode continuar[Demonstre a assinatura de mensagens com o AWS IoT Device Client](iot-dc-testconn-subscribe.md).

# Demonstre a assinatura de mensagens com o AWS IoT Device Client
<a name="iot-dc-testconn-subscribe"></a>

Nesta seção, você demonstrará dois tipos de assinaturas de mensagens:
+ Assinatura de tópico único
+ Assinatura de tópicos curinga

As seguintes declarações de política na política criada para esses exercícios concedem ao Raspberry Pi permissão para realizar estas ações:
+ 

**`iot:Receive`**  
Permite que o AWS IoT Device Client receba tópicos do MQTT que correspondam aos nomeados no `Resource` objeto.

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

**`iot:Subscribe`**  
Permite que o AWS IoT Device Client assine filtros de tópicos do MQTT que correspondam aos nomeados no `Resource` objeto.

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

## Assinatura de um único tópico de mensagem MQTT
<a name="iot-dc-testconn-subscribe-simple-topic"></a>

Este procedimento demonstra como o AWS IoT Device Client pode assinar e registrar mensagens MQTT.

Na janela do terminal do computador host local que está conectado ao Raspberry Pi, liste o conteúdo de **\$1/dc-configs/dc-pubsub-custom-config.json** ou abra o arquivo em um editor de texto para examinar seu conteúdo. Localize o objeto `samples`, que deve ser semelhante ao seguinte.

```
  "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 o valor de `subscribe-topic` é o tópico MQTT que o AWS IoT Device Client assinará quando for executado. O AWS IoT Device Client grava as cargas de mensagens que recebe dessa assinatura no arquivo nomeado no `subscribe-file` valor.

**Para assinar um tópico de mensagem MQTT a partir do AWS IoT Device Client**

1. Certifique-se de que a janela do terminal e a janela com o cliente de teste MQTT estejam visíveis enquanto você realiza esse procedimento. Além disso, certifique-se de que o **cliente de teste MQTT** ainda seja assinante no filtro de tópicos **\$1**. Se não o for, assine novamente o filtro de tópicos **\$1**.

1. Na janela do terminal, insira esses comandos para executar o AWS IoT Device Client usando o arquivo de configuração criado em[Crie o arquivo de configuração](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
   ```

   Na janela do terminal, o AWS IoT Device Client exibe mensagens informativas e quaisquer erros que ocorram durante a execução.

   Caso nenhum erro seja exibido na janela do terminal, continue no console do AWS IoT .

1. No AWS IoT console, no **cliente de teste do MQTT**, escolha a guia **Publicar em um tópico**.

1. Em **Nome do tópico**, digite **test/dc/subtopic**

1. Em **Carga da mensagem**, examine o conteúdo da mensagem.

1. Selecione **Publicar** para publicar a mensagem MQTT.

1. Na janela do terminal, observe a entrada da *mensagem recebida* do AWS IoT Device Client que se parece com esta.

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

1. Depois de ver a entrada da *mensagem recebida* que mostra que a mensagem foi recebida, digite **^C** (Ctrl-C) para interromper o AWS IoT Device Client.

1. Insira o seguinte comando para visualizar o final do arquivo de log de mensagens e ver a mensagem que foi publicada no **cliente de teste MQTT**.

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

Ao visualizar a mensagem no arquivo de log, demonstrou-se que o AWS IoT Device Client recebeu a mensagem publicada a partir do cliente de teste MQTT.

## Assinar diversos tópicos de mensagens MQTT usando caracteres curinga
<a name="iot-dc-testconn-subscribe-wild-topic"></a>

Esses procedimentos demonstram como o AWS IoT Device Client pode assinar e registrar mensagens MQTT usando caracteres curinga. Para fazer isso, você deve:

1. Atualize o filtro de tópicos que o AWS IoT Device Client usa para assinar tópicos do MQTT.

1. Atualizar a política usada pelo dispositivo para permitir novas assinaturas.

1. Execute o AWS IoT Device Client e publique mensagens do console de teste do MQTT.

**Para criar um arquivo de configuração para assinar diversos tópicos de mensagens MQTT com um filtro de tópicos MQTT curinga**

1. Na janela do terminal do computador host local que está conectado ao Raspberry Pi, abra **\$1/dc-configs/dc-pubsub-custom-config.json** para edição e localize o objeto `samples`.

1. No editor de texto, localize o objeto `samples` e atualize o valor de `subscribe-topic` para que se assemelhe a isto. 

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

   O novo valor de `subscribe-topic` é um [filtro de tópicos MQTT](topics.md#topicfilters) com um caractere curinga MQTT no final. Isso descreve uma assinatura de todos os tópicos MQTT que começam com `test/dc/`. O AWS IoT Device Client grava as cargas de mensagens que recebe dessa assinatura no arquivo nomeado em`subscribe-file`.

1. Salve o arquivo de configuração modificado como **\$1/dc-configs/dc-pubsub-wild-config.json** e saia do editor de texto.

**Para modificar a política usada pelo Raspberry Pi para permitir a assinatura e recebimento de diversos tópicos de mensagens MQTT**

1. Na janela do terminal do seu computador host local conectado ao Raspberry Pi, em seu editor de texto favorito, abra **\$1/policies/pubsub\$1test\$1thing\$1policy.json** para edição e, depois, localize as declarações de política `iot::Subscribe` e `iot::Receive` no arquivo.

1. Na declaração de política `iot::Subscribe`, atualize a string no objeto Resource para substituir `subtopic` por `*`, de modo que fique semelhante ao seguinte.

   ```
       {
         "Effect": "Allow",
         "Action": [
           "iot:Subscribe"
         ],
         "Resource": [
           "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/*"
         ]
       }
   ```
**nota**  
Os [caracteres curinga do filtro de tópicos MQTT](topics.md#topicfilters) são `+` (sinal de adição) e `#` (sinal de jogo da velha). Uma solicitação de assinatura com `#` no final assina todos os tópicos que começam com a string que precede o caractere `#` (como, nesse caso, `test/dc/`).   
Entretanto, o valor do recurso na declaração de política autorizando essa assinatura deve usar `*` (asterisco) no lugar de `#` (sinal de jogo da velha) no ARN do filtro de tópicos. Isso ocorre porque o processador de políticas usa um caractere curinga diferente daquele usado pelo MQTT.  
Para acessar mais informações sobre como usar caracteres curinga para tópicos e filtros de tópicos em políticas, consulte [Usando caracteres curinga no MQTT e nas políticas AWS IoT Core](pub-sub-policy.md#pub-sub-policy-cert).

1. Na declaração de política `iot::Receive`, atualize a string no objeto Resource para substituir `subtopic` por `*`, de modo que fique semelhante ao seguinte.

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

1. Salve o documento de política atualizado como **\$1/policies/pubsub\$1wild\$1test\$1thing\$1policy.json** e saia do editor.

1. Insira o seguinte comando para atualizar a política deste tutorial para usar as novas definições de recursos.

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

   Em caso de êxito, ele retornará uma resposta como a seguinte. Observe que `policyVersionId` agora é `2`, o que indica que esta é a segunda versão desta política. 

   Se você obteve êxito em atualizar a política, avance para o próximo procedimento.

   ```
   {
       "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
   }
   ```

   Caso receba um erro informando que há versões da política demais para que uma nova seja salva, insira o seguinte comando para listar as versões atuais da política. Examine a lista retornada pelo comando a seguir para encontrar uma versão da política que possa ser excluída.

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

   Digite o comando a seguir para excluir uma versão que não é mais necessária. Não é possível excluir a versão padrão da política. A versão padrão da política é aquela com um valor de `isDefaultVersion` de `true`.

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

   Depois de excluir uma versão da política, tente a etapa novamente.

Com o arquivo de configuração e a política atualizados, você está pronto para demonstrar assinaturas curinga com o AWS IoT Device Client.

**Para demonstrar como o AWS IoT Device Client assina e recebe vários tópicos de mensagens do MQTT**

1. No **cliente de teste MQTT**, verifique as assinaturas. Se o **cliente de teste MQTT** for assinante do filtro de tópicos **\$1**, avance para a próxima etapa. Caso contrário, no **cliente de teste do MQTT**, na guia **Assinar um tópico**, em **Filtro de tópicos**, insira **\$1** (caractere de cerquilha) e escolha **Assinar** para assinar.

1. Na janela do terminal do computador host local conectado ao Raspberry Pi, execute os comandos a seguir para iniciar o AWS IoT Device Client.

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

1. Enquanto observa a saída do AWS IoT Device Client na janela do terminal no computador host local, retorne ao **cliente de teste MQTT**. Na guia **Publicar em um tópico**, em **Nome do tópico**, insira **test/dc/subtopic** e selecione **Publicar**. 

1. Na janela do terminal, confirme se a mensagem foi recebida procurando uma mensagem como:

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

1. Enquanto observa a saída do AWS IoT Device Client na janela do terminal do computador host local, retorne ao **cliente de teste MQTT**. Na guia **Publicar em um tópico**, em **Nome do tópico**, insira **test/dc/subtopic2** e selecione **Publicar**. 

1. Na janela do terminal, confirme se a mensagem foi recebida procurando uma mensagem como:

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

1. Depois de ver as mensagens que confirmam que ambas foram recebidas, digite **^C** (Ctrl-C) para interromper o AWS IoT Device Client.

1. Insira o seguinte comando para visualizar o final do arquivo de log de mensagens e ver a mensagem que foi publicada no **cliente de teste MQTT**.

   ```
   tail -n 20 ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
   ```
**nota**  
O arquivo de log contém somente cargas de mensagens. Os tópicos de mensagens não são registrados no arquivo de log de mensagens recebidas.  
Você também pode ver a mensagem publicada pelo AWS IoT Device Client no registro recebido. Isso ocorre porque o filtro de tópicos curinga inclui esse tópico de mensagem e, por vezes, a solicitação de assinatura pode ser processada pelo agente de mensagens antes que a mensagem publicada seja enviada aos assinantes.

As entradas no arquivo de log apontam que as mensagens foram recebidas. É possível repetir esse procedimento usando outros nomes de tópicos. Todas as mensagens com um nome de tópico que comece com `test/dc/` devem ser recebidas e registradas em log. Mensagens com nomes de tópicos começando com outro texto são ignoradas.

Depois de demonstrar como o AWS IoT Device Client pode publicar e assinar mensagens MQTT, continue. [Tutorial: Demonstre ações remotas (trabalhos) com o AWS IoT Device Client](iot-dc-runjobs.md)

# Tutorial: Demonstre ações remotas (trabalhos) com o AWS IoT Device Client
<a name="iot-dc-runjobs"></a>

Nestes tutoriais, vamos configurar e implantar trabalhos em um Raspberry Pi para demonstrar como você pode enviar operações remotas para dispositivos de IoT.

**Para iniciar este tutorial:**
+ Configure seu computador host local e Raspberry Pi como [na seção anterior](iot-dc-testconn.md). 
+ Se você não concluiu o tutorial na seção anterior, pode tentar este tutorial usando o Raspberry Pi com um cartão microSD que contém a imagem que você salvou depois de instalar AWS IoT o Device Client. [(Opcional) Salve a imagem do cartão microSD](iot-dc-install-download.md#iot-dc-install-dc-save)
+ Se você já executou essa demonstração antes, revise [Etapa 2: Limpar suas demonstrações Conta da AWS após a criação com o AWS IoT Device Client](iot-dc-cleanup.md#iot-dc-cleanup-cloud) para excluir todos os AWS IoT recursos que você criou em execuções anteriores para evitar erros de recursos duplicados.

Este tutorial leva cerca de 45 minutos para ser concluído.

**Quando você concluir este tópico:**
+ Você terá demonstrado diferentes maneiras pelas quais seu dispositivo de IoT pode usar o AWS IoT Core para executar operações remotas gerenciadas por. AWS IoT 

**Equipamentos necessários:**
+ O ambiente local de desenvolvimento e teste já testado em [uma seção anterior](iot-dc-install-dc.md)
+ O Raspberry Pi testado em [uma seção anterior](iot-dc-install-dc.md)
+ O cartão de memória microSD do Raspberry Pi testado em [uma seção anterior](iot-dc-install-dc.md)

**Topics**
+ [Preparar o Raspberry Pi para execução de trabalhos](iot-dc-runjobs-prepare.md)
+ [Crie e execute o trabalho AWS IoT com o AWS IoT Device Client](iot-dc-runjobs-prepare-define.md)

# Preparar o Raspberry Pi para execução de trabalhos
<a name="iot-dc-runjobs-prepare"></a>

Os procedimentos nesta seção descrevem como preparar seu Raspberry Pi para executar trabalhos usando o AWS IoT Device Client.

**nota**  
Estes procedimentos são específicos ao dispositivo. Caso queira realizar os procedimentos desta seção com mais de um dispositivo simultaneamente, cada dispositivo precisará de sua própria política e de um certificado e um nome de item exclusivos e específicos ao dispositivo. Para que cada dispositivo tenha seus recursos exclusivos, execute o procedimento uma vez para cada dispositivo enquanto modifica os elementos específicos do dispositivo, como descrito nos procedimentos.

**Topics**
+ [Provisione seu Raspberry Pi para demonstrar trabalhos](#iot-dc-runjobs-prepare-provision)
+ [Configurar o AWS IoT Device Client para executar o agente de trabalhos](#iot-dc-runjobs-prepare-config)

## Provisione seu Raspberry Pi para demonstrar trabalhos
<a name="iot-dc-runjobs-prepare-provision"></a>

Os procedimentos nesta seção provisionam seu Raspberry Pi AWS IoT criando AWS IoT recursos e certificados de dispositivo para ele. 

**Topics**
+ [Crie e baixe arquivos de certificado de dispositivo para demonstrar AWS IoT trabalhos](#iot-dc-runjobs-prepare-cert)
+ [Crie AWS IoT recursos para demonstrar AWS IoT empregos](#iot-dc-runjobs-prepare-iot)

### Crie e baixe arquivos de certificado de dispositivo para demonstrar AWS IoT trabalhos
<a name="iot-dc-runjobs-prepare-cert"></a>

Este procedimento cria os arquivos de certificado de dispositivo para esta demonstração.

Se você estiver preparando mais de um dispositivo, esse procedimento deve ser executado em cada dispositivo.

**Para criar e baixar os arquivos de certificado de dispositivo para o Raspberry Pi:**

Na janela do terminal do computador host local conectado ao Raspberry Pi, digite os comandos a seguir.

1. Digite o comando a seguir para criar os arquivos de certificado de 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"
   ```

   O comando retorna uma resposta como a seguinte. Salve o valor de `certificateArn` para uso posterior.

   ```
   {
   "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. Insira os comandos a seguir para definir as permissões no diretório de certificados e arquivos.

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

1. Execute este comando para examinar as permissões nos diretórios e arquivos do certificado.

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

   A saída do comando deve ser a mesma vista aqui, com exceção das datas e horários do arquivo, que serão 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
   ```

Após baixar os arquivos de certificado de dispositivo para o Raspberry Pi, você estará pronto para avançar para [Provisione seu Raspberry Pi para demonstrar trabalhos](#iot-dc-runjobs-prepare-provision).

### Crie AWS IoT recursos para demonstrar AWS IoT empregos
<a name="iot-dc-runjobs-prepare-iot"></a>

Crie os AWS IoT recursos para esse dispositivo.

Se você estiver preparando mais de um dispositivo, esse procedimento deve ser executado para todos os dispositivos.



**Para provisionar seu dispositivo no AWS IoT:**

Na janela do terminal do computador host local conectado ao Raspberry Pi:

1. Digite o seguinte comando para obter o endereço do endpoint de dados do dispositivo da sua Conta da AWS.

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

   O valor do endpoint não foi alterado desde a última vez que este comando foi executado. Executar o comando mais uma vez facilita localizar e colar o valor do endpoint de dados no arquivo de configuração usado neste tutorial.

   O comando **describe-endpoint** retorna uma resposta como a seguinte. Registre o valor de `endpointAddress` para uso posterior.

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

1. *uniqueThingName*Substitua por um nome exclusivo para seu dispositivo. Caso queira realizar este tutorial com vários dispositivos, dê um nome único a cada dispositivo. Como, por exemplo, **TestDevice01**, **TestDevice02**, e assim por diante.

   Digite este comando para criar um novo recurso para AWS IoT o seu Raspberry Pi.

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

   Como um recurso de AWS IoT coisas é uma representação *virtual* do seu dispositivo na nuvem, podemos criar vários recursos de coisas AWS IoT para serem usados para finalidades diferentes. Todos os recursos de objetos podem ser usados pelo mesmo dispositivo físico de IoT para representar aspectos diferentes do dispositivo.
**nota**  
Para proteger a política para vários dispositivos, você pode usar `${iot:Thing.ThingName}` em vez do nome do objeto estática, `uniqueThingName`.

   Estes tutoriais usarão apenas um recurso de objeto por vez por dispositivo. Dessa forma, nesses tutoriais, eles representam as diferentes demonstrações para que, depois de criar os AWS IoT recursos para uma demonstração, você possa voltar e repetir as demonstrações usando os recursos criados especificamente para cada uma.

   Se seu recurso AWS IoT Thing foi criado, o comando retornará uma resposta como essa. Registre o valor de `thingArn` para uso posterior quando for criar o trabalho a ser executado nesse dispositivo.

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

1. Na janela do terminal:

   1. Abra um editor de texto, como o `nano`.

   1. Copie este documento JSON e cole-o no editor de texto aberto.  
****  

      ```
      {
          "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. No editor, na `Resource` seção de cada declaração de política, *us-west-2:57EXAMPLE833* substitua por seu Região da AWS, um caractere de dois pontos (:)) e seu número de 12 dígitos Conta da AWS .

   1. No editor, em cada declaração de política, *uniqueThingName* substitua pelo nome da coisa que você deu ao recurso.

   1. Salve o arquivo no editor de texto como **\$1/policies/jobs\$1test\$1thing\$1policy.json**.

      Caso esteja executando esse procedimento para diversos dispositivos, salve o arquivo com esse nome de arquivo em cada dispositivo.

1. *uniqueThingName*Substitua pelo nome do dispositivo e, em seguida, execute esse comando para criar uma AWS IoT política personalizada para esse dispositivo.

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

   Se a política for criada, o comando retornará uma resposta 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*Substitua pelo nome do dispositivo e `certificateArn` pelo `certificateArn` valor que você salvou anteriormente nesta seção para esse dispositivo e, em seguida, execute esse comando para anexar a política ao certificado do dispositivo. 

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

   Se houver êxito, o comando não retornará nada.

1.  *uniqueThingName*Substitua pelo nome da coisa do dispositivo, `certificateArn` substitua pelo `certificateArn` valor que você salvou anteriormente nesta seção e, em seguida, execute esse comando para anexar o certificado do dispositivo ao recurso da AWS IoT coisa.

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

   Se houver êxito, o comando não retornará nada.

Após provisionar o Raspberry Pi com êxito, você estará pronto para repetir esta seção com outro Raspberry Pi em um teste ou, se todos os dispositivos tiverem sido provisionados, avançar para [Configurar o AWS IoT Device Client para executar o agente de trabalhos](#iot-dc-runjobs-prepare-config).

## Configurar o AWS IoT Device Client para executar o agente de trabalhos
<a name="iot-dc-runjobs-prepare-config"></a>

Este procedimento cria um arquivo de configuração para o AWS IoT Device Client executar o agente de trabalhos:.

Nota: se você estiver preparando mais de um dispositivo, esse procedimento deve ser executado em cada dispositivo.

**Para criar o arquivo de configuração para testar o AWS IoT Device Client:**

1. Na janela do terminal do computador host local conectado ao Raspberry Pi:

   1. Abra um editor de texto, como o `nano`.

   1. Copie este documento JSON e cole-o no editor de texto aberto.

      ```
      {
        "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. Substitua o *endpoint* valor pelo valor do endpoint de dados do dispositivo Conta da AWS que você encontrou em[Provisione seu dispositivo em AWS IoT Core](iot-dc-install-provision.md#iot-dc-install-dc-provision).

   1. *uniqueThingName*Substitua pelo nome da coisa que você usou para este dispositivo.

   1. Salve o arquivo no editor de texto como **\$1/dc-configs/dc-jobs-config.json**.

1. Execute o comando a seguir para definir as permissões de arquivo do novo arquivo de configuração.

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

O **cliente de teste MQTT** não será utilizado neste teste. Embora o dispositivo troque mensagens MQTT relacionadas aos trabalhos AWS IoT, as mensagens de progresso do trabalho são trocadas somente com o dispositivo que está executando o trabalho. Como as mensagens de progresso do trabalho são trocadas somente com o dispositivo que está executando o trabalho, você não pode assiná-las de outro dispositivo, como o AWS IoT console.

Após salvar o arquivo de configuração, você estará pronto para avançar para [Crie e execute o trabalho AWS IoT com o AWS IoT Device Client](iot-dc-runjobs-prepare-define.md).

# Crie e execute o trabalho AWS IoT com o AWS IoT Device Client
<a name="iot-dc-runjobs-prepare-define"></a>

Os procedimentos desta seção criam um documento de trabalho e um recurso de AWS IoT trabalho. Depois de criar o recurso de trabalho, AWS IoT envia o documento de trabalho para os destinos de trabalho especificados nos quais um agente de trabalhos aplica o documento de trabalho ao dispositivo ou cliente.

**Topics**
+ [Criar e armazenar o documento de trabalho para o trabalho de IoT](#iot-dc-runjobs-prepare-define-jobdoc)
+ [Execute um trabalho em AWS IoT um dispositivo de IoT](#iot-dc-runjobs-prepare-define-job)

## Criar e armazenar o documento de trabalho para o trabalho de IoT
<a name="iot-dc-runjobs-prepare-define-jobdoc"></a>

Esse procedimento cria um documento de trabalho simples para incluir em um recurso de AWS IoT trabalho. O documento de trabalho mostra “Olá, mundo” no destino do trabalho.

**Para criar e armazenar um documento de trabalho:**

1. Selecione o bucket do Amazon S3 no qual você salvará seu documento de trabalho. Se você ainda não tiver um bucket do Amazon S3 existente para isso, será preciso criar um. Para obter informações sobre a criação de buckets do Amazon S3, consulte os tópicos de [Introdução ao Amazon S3](https://docs.aws.amazon.com//AmazonS3/latest/userguide/GetStartedWithS3.html).

1. Crie e salve o documento de trabalho deste trabalho

   1. Abra um editor de texto no computador host local.

   1. Copie e cole o texto a seguir no editor.

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

   1. No computador host local, salve o conteúdo do editor em um arquivo nomeado **hello-world-job.json**.

   1. Confirme se o arquivo foi salvo com êxito. Alguns editores de texto acrescentam automaticamente `.txt` ao final do nome de um arquivo ao salvar um arquivo de texto. Se o editor tiver acrescentado `.txt` ao nome do arquivo, faça a correção antes de continuar.

1. *path\$1to\$1file*Substitua o pelo caminho para**hello-world-job.json**, se não estiver em seu diretório atual, *s3\$1bucket\$1name* substitua pelo caminho do bucket do Amazon S3 até o bucket selecionado e, em seguida, execute esse comando para colocar seu documento de trabalho no bucket do Amazon S3.

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

   A URL do documento de trabalho que identifica o documento de trabalho que você armazenou no Amazon S3 é determinada pela substituição de *AWS\$1region* e na URL *s3\$1bucket\$1name* a seguir. Registre o URL resultante para usar posteriormente como *job\$1document\$1path*

   ```
   https://s3_bucket_name.s3.AWS_Region.amazonaws.com/hello-world-job.json
   ```
**nota**  
AWS a segurança impede que você possa abrir esse URL fora do seu Conta da AWS, por exemplo, usando um navegador. O URL é usado pelo mecanismo de AWS IoT trabalhos, que tem acesso ao arquivo, por padrão. Em um ambiente de produção, será preciso garantir que seus serviços do AWS IoT tenham permissão para acessar os documentos de trabalho armazenados no Amazon S3.

Após salvar o URL do documento de trabalho, avance para [Execute um trabalho em AWS IoT um dispositivo de IoT](#iot-dc-runjobs-prepare-define-job).

## Execute um trabalho em AWS IoT um dispositivo de IoT
<a name="iot-dc-runjobs-prepare-define-job"></a>

Os procedimentos nesta seção iniciam o AWS IoT Device Client em seu Raspberry Pi para executar o agente de trabalhos no dispositivo e aguardar a execução dos trabalhos. Ele também cria um recurso de trabalho em AWS IoT, que enviará o trabalho e será executado em seu dispositivo de IoT.

**nota**  
Esse procedimento executa um trabalho em apenas um único dispositivo.

**Para iniciar o atendente de trabalhos no Raspberry Pi:**

1. Na janela do terminal do seu computador host local que está conectado ao seu Raspberry Pi, execute este comando para iniciar o AWS IoT Device Client.

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

1. Na janela do terminal, confirme se o AWS IoT Device Client exibe essas mensagens

   ```
   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. Na janela do terminal, depois de ver a seguinte mensagem, avance para o próximo procedimento e crie o recurso de trabalho. Observe que esta pode não ser a última entrada da lista.

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

**Para criar um recurso AWS IoT de trabalho**

1. No computador host local:

   1. *job\$1document\$1url*Substitua pelo URL do documento de trabalho de[Criar e armazenar o documento de trabalho para o trabalho de IoT](#iot-dc-runjobs-prepare-define-jobdoc).

   1. *thing\$1arn*Substitua pelo ARN do recurso que você criou para o seu dispositivo e execute esse comando.

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

      Em caso de êxito, o comando retornará um resultado semelhante a este.

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

1. Na janela do terminal, você deve ver uma saída do AWS IoT Device Client como esta.

   ```
   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. Enquanto o AWS IoT Device Client estiver em execução e aguardando um trabalho, você pode enviar outro trabalho alterando o `job-id` valor e reexecutando o **create-job** da Etapa 1.

Quando terminar de executar os trabalhos, na janela do terminal, digite ^C (Control-c) para interromper o AWS IoT Device Client.

# Tutorial: Limpando depois de executar os tutoriais do AWS IoT Device Client
<a name="iot-dc-cleanup"></a>

Os procedimentos deste tutorial orientam você na remoção dos arquivos e recursos que você criou ao concluir os tutoriais neste percurso de aprendizado.

**Topics**
+ [Etapa 1: Limpar seus dispositivos após criar demonstrações com o AWS IoT Device Client](#iot-dc-cleanup-devices)
+ [Etapa 2: Limpar suas demonstrações Conta da AWS após a criação com o AWS IoT Device Client](#iot-dc-cleanup-cloud)

## Etapa 1: Limpar seus dispositivos após criar demonstrações com o AWS IoT Device Client
<a name="iot-dc-cleanup-devices"></a>

Este tutorial descreve duas opções de como limpar o cartão microSD depois de criar as demonstrações neste percurso de aprendizado. Escolha a opção que fornece o nível de segurança de que você precisa.

Observe que a limpeza do cartão microSD do dispositivo não remove nenhum AWS IoT recurso que você criou. Para limpar os AWS IoT recursos depois de limpar o cartão microSD do dispositivo, você deve revisar o tutorial em. [Etapa 2: Limpar suas demonstrações Conta da AWS após a criação com o AWS IoT Device Client](#iot-dc-cleanup-cloud)

### Opção 1: como limpar regravando o cartão microSD
<a name="iot-dc-cleanup-devices-flash"></a>

A maneira mais fácil e completa de limpar o cartão microSD depois de concluir os tutoriais neste percurso de aprendizado é substituir o cartão microSD por um arquivo de imagem salvo que você criou ao preparar o dispositivo pela primeira vez.

Esse procedimento usa o computador host local para gravar uma imagem salva do cartão microSD em um cartão microSD.

**nota**  
Se o dispositivo não usa uma mídia de armazenamento removível para o sistema operacional, consulte o procedimento desse dispositivo.

**Para gravar uma nova imagem no cartão microSD**

1. No computador host local, localize a imagem salva do cartão microSD que você deseja gravar no cartão microSD. 

1. Insira o cartão microSD no computador host local.

1. Usando uma ferramenta de imagem de cartão SD, grave o arquivo de imagem selecionado no cartão microSD.

1. Depois de gravar a imagem do sistema operacional Raspberry Pi no cartão microSD, ejete o cartão microSD e remova-o com segurança do computador host local.

O cartão microSD está pronto para ser usado.

### Opção 2: como limpar excluindo diretórios de usuários
<a name="iot-dc-cleanup-devices-dirs"></a>

Para limpar o cartão microSD depois de concluir os tutoriais sem regravar a imagem do cartão microSD, você pode excluir os diretórios do usuário individualmente. Isso não é tão completo quanto regravar o cartão microSD por meio de uma imagem salva, pois não remove nenhum arquivo do sistema que possa ter sido instalado.

Se a remoção dos diretórios do usuário for suficientemente completa para suas necessidades, siga este procedimento.

**Para excluir os diretórios de usuário desse percurso de aprendizado do dispositivo**

1. Execute esses comandos para excluir os diretórios, subdiretórios e todos os arquivos que foram criados nesse percurso de aprendizado, na janela do terminal conectada ao dispositivo.
**nota**  
Depois de excluir esses diretórios e arquivos, você não poderá executar as demonstrações sem concluir os tutoriais novamente.

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

1. Execute esses comandos para excluir os diretórios e arquivos de origem da aplicação na janela do terminal conectada ao dispositivo.
**nota**  
Esses comandos não desinstalam nenhum programa. Eles removem apenas os arquivos de origem usados para criá-los e instalá-los. Depois de excluir esses arquivos, o AWS CLI e o AWS IoT Device Client podem não funcionar.

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

## Etapa 2: Limpar suas demonstrações Conta da AWS após a criação com o AWS IoT Device Client
<a name="iot-dc-cleanup-cloud"></a>

Esses procedimentos ajudam você a identificar e remover os AWS recursos que você criou ao concluir os tutoriais neste plano de aprendizado.

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

Esse procedimento ajuda você a identificar e remover os AWS IoT recursos que você criou ao concluir os tutoriais neste plano de aprendizado.


**AWS IoT recursos criados neste plano de aprendizado**  

| Tutorial | Recurso de objetos | Recurso de políticas | 
| --- | --- | --- | 
|  [Tutorial: Instalando e configurando o AWS IoT Device Client](iot-dc-install-dc.md)  |  **DevCliTestThing**  | DevCliTestThingPolicy | 
|  [Tutorial: Demonstre a comunicação de mensagens MQTT com o AWS IoT Device Client](iot-dc-testconn.md)  |  **PubSubTestThing**  | PubSubTestThingPolicy | 
|  [Tutorial: Demonstre ações remotas (trabalhos) com o AWS IoT Device Client](iot-dc-runjobs.md)  | definido pelo usuário (pode haver mais de um) |  *definido pelo usuário* (pode haver mais de um)  | 

**Para excluir os AWS IoT recursos, siga este procedimento para cada recurso que você criou**

1. Substitua `thing_name` pelo nome do recurso do objeto que você deseja excluir e, em seguida, execute esse comando para listar os certificados anexados ao recurso do objeto por meio do computador host local.

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

   Esse comando retorna uma resposta como essa, que lista os certificados anexados a `thing_name`. Na maioria dos casos, haverá apenas um certificado na lista.

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

1. Para cada certificado listado pelo comando anterior:

   1. Substitua `certificate_ID` pelo ID de certificado do comando anterior. O ID do certificado são os caracteres alfanuméricos que seguem `cert/` no ARN retornado pelo comando anterior. Em seguida, execute esse comando para inativar o certificado.

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

      Se houver êxito, esse comando não retornará nada.

   1. Substitua `certificate_ARN` pelo ARN do certificado da lista de certificados retornados anteriormente e, em seguida, execute esse comando para listar as políticas anexadas a esse certificado.

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

      Esse comando retorna uma resposta como essa, que lista as políticas anexadas ao certificado. Na maioria dos casos, haverá apenas uma política na lista.

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

   1. Para cada política anexada ao certificado:

      1. Substitua `policy_name` pelo valor `policyName` do comando anterior, substitua `certificate_ARN` pelo ARN do certificado e execute esse comando para separar a política do certificado.

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

         Se houver êxito, esse comando não retornará nada.

      1. Substitua `policy_name` pelo valor `policyName` e, em seguida, execute esse comando para ver se a política está anexada a mais certificados.

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

         Se o comando retornar uma lista vazia como essa, a política não será anexada a nenhum certificado, e você continuará listando as versões da política. Se ainda houver certificados anexados à política, continue com a etapa **detach-thing-principal**.

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

      1. Substitua `policy_name` pelo valor `policyName` e, em seguida, execute esse comando para verificar as versões da política. Para excluir a política, ela deve ter somente uma versão.

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

         Se a política tiver apenas uma versão, como neste exemplo, você poderá pular para a etapa **delete-policy** e excluir a política agora.

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

         Se a política tiver mais de uma versão, como neste exemplo, as versões da política com um valor `isDefaultVersion` de `false` devem ser excluídas antes que a política possa ser excluída.

         ```
         {
             "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"
                 }
             ]
         }
         ```

         Se você precisar excluir uma versão da política, substitua `policy_name` pelo valor `policyName`, substitua `version_ID` pelo valor `versionId` do comando anterior e execute esse comando para excluir uma versão da política.

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

         Se houver êxito, esse comando não retornará nada.

         Depois de excluir uma versão da política, repita essa etapa até que a política tenha somente uma versão da política.

      1. Substitua `policy_name` pelo valor `policyName` e, em seguida, execute esse comando para excluir a política.

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

   1. Substitua `thing_name` pelo nome do objeto, substitua `certificate_ARN` pelo ARN do certificado e, em seguida, execute esse comando para separar o certificado do recurso do objeto.

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

      Se houver êxito, esse comando não retornará nada.

   1. Substitua `certificate_ID` pelo ID de certificado do comando anterior. O ID do certificado são os caracteres alfanuméricos que seguem `cert/` no ARN retornado pelo comando anterior. Em seguida, execute esse comando para excluir o recurso do certificado.

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

      Se houver êxito, esse comando não retornará nada.

1. Substitua `thing_name` pelo nome do objeto e, em seguida, execute esse comando para excluir o objeto.

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

   Se houver êxito, esse comando não retornará nada. 

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

Esse procedimento ajuda você a identificar e remover outros AWS recursos que você criou ao concluir os tutoriais neste plano de aprendizado.


**Outros AWS recursos criados neste plano de aprendizado**  

| Tutorial | Tipo de atributo | Nome ou ID do recurso | 
| --- | --- | --- | 
|  [Tutorial: Demonstre ações remotas (trabalhos) com o AWS IoT Device Client](iot-dc-runjobs.md)  | Objetos do Amazon S3 | hello-world-job.json | 
|  [Tutorial: Demonstre ações remotas (trabalhos) com o AWS IoT Device Client](iot-dc-runjobs.md)  |  AWS IoT recursos de trabalho  | definido pelo usuário | 

**Para excluir os AWS recursos criados nesse plano de aprendizado**

1. Para excluir os trabalhos criados neste percurso de aprendizado

   1. Execute este comando para listar os trabalhos em seu Conta da AWS.

      ```
      aws iot list-jobs
      ```

      O comando retorna uma lista dos AWS IoT trabalhos em seu Conta da AWS e Região da AWS que se parece com isso.

      ```
      {
          "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 trabalho que você reconhece na lista como um trabalho que você criou neste plano de aprendizado, `jobId` substitua pelo `jobId` valor do trabalho a ser excluído e, em seguida, execute esse comando para excluir um AWS IoT trabalho.

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

      Se o comando for bem-sucedido, ele não retornará nada.

1. Para excluir os documentos de trabalho que você armazenou em um bucket do Amazon S3 neste percurso de aprendizado.

   1. Substitua `bucket` pelo nome do bucket que você usou e, em seguida, execute esse comando para listar os objetos no bucket do Amazon S3 que você usou.

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

      O comando retorna uma lista dos objetos do Amazon S3 no bucket que se parece com isso.

      ```
      {
          "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 você reconhece na lista como um objeto que você criou neste percurso de aprendizado, substitua `bucket` pelo valor nome do bucket e `key` pelo valor chave do objeto a ser excluído e, em seguida, execute esse comando para excluir um objeto do Amazon S3.

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

      Se o comando for bem-sucedido, ele não retornará nada.

Depois de excluir todos os AWS recursos e objetos que você criou ao concluir esse plano de aprendizado, você pode recomeçar e repetir os tutoriais.