

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á.

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