

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

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