Fluxo de trabalho - AWS IoT Core

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

Fluxo de trabalho

A seguir, são mostradas as diferentes etapas no fluxo de trabalho, desde o início de um novo trabalho até o relatório do status de conclusão da execução de um trabalho.

Iniciar um novo trabalho

Quando um novo trabalho é criado, o AWS IoT Jobs publica uma mensagem sobre o $aws/things/thing-name/jobs/notify tópico para cada dispositivo de destino.

A mensagem contém as seguintes informações:

{ "timestamp":1476214217017, "jobs":{ "QUEUED":[{ "jobId":"0001", "queuedAt":1476214216981, "lastUpdatedAt":1476214216981, "versionNumber" : 1 }] } }

O dispositivo recebe essa mensagem no tópico '$aws/things/thingName/jobs/notify' quando a execução do trabalho é enfileirada.

nota

Para trabalhos com a SchedulingConfig opcional, o trabalho manterá um estado de status inicial de SCHEDULED. Quando o trabalho atingir o startTime selecionado, ocorrerá o seguinte:

  • O estado do status do trabalho será atualizado para IN_PROGRESS.

  • O trabalho iniciará a distribuição do documento de trabalho em todos os dispositivos do grupo de destino.

Obter informações do trabalho

Para obter mais informações sobre a execução de um trabalho, o dispositivo chama a API MQTT DescribeJobExecution com o campo includeJobDocument definido como true (o padrão).

Se a solicitação for bem-sucedida, o serviço AWS IoT Jobs publicará uma mensagem sobre o $aws/things/MyThing/jobs/0023/get/accepted tópico:

{ "clientToken" : "client-001", "timestamp" : 1489097434407, "execution" : { "approximateSecondsBeforeTimedOut": number, "jobId" : "023", "status" : "QUEUED", "queuedAt" : 1489097374841, "lastUpdatedAt" : 1489097374841, "versionNumber" : 1, "jobDocument" : { < contents of job document > } } }

Se a solicitação falhar, o serviço AWS IoT Jobs publicará uma mensagem sobre o $aws/things/MyThing/jobs/0023/get/rejected tópico.

O dispositivo agora tem o documento de trabalho, que ele pode usar para executar as operações remotas do trabalho. Se o documento de trabalho contiver um URL pré-assinado do Amazon S3, o dispositivo poderá usar esse URL para fazer download de todos os arquivos necessários do trabalho.

Relatar o status da execução de um trabalho

Enquanto executa o trabalho, o dispositivo pode chamar a API MQTT UpdateJobExecution para atualizar o status da execução do trabalho.

Por exemplo, um dispositivo pode atualizar o status da execução do trabalho para IN_PROGRESS publicando a seguinte mensagem no tópico $aws/things/MyThing/jobs/0023/update:

{ "status":"IN_PROGRESS", "statusDetails": { "progress":"50%" }, "expectedVersion":"1", "clientToken":"client001" }

O serviço trabalhos responde publicando uma mensagem no tópico $aws/things/MyThing/jobs/0023/update/accepted ou $aws/things/MyThing/jobs/0023/update/rejected:

{ "clientToken":"client001", "timestamp":1476289222841 }

O dispositivo pode combinar as duas solicitações anteriores chamando StartNextPendingJobExecution. Isso obtém e inicia a próxima execução de trabalho pendente e permite que o dispositivo atualize o status de execução do trabalho. Essa solicitação também retorna o documento de trabalho quando há uma execução de trabalho pendente.

Se o trabalho contiver um TimeoutConfig, o cronômetro em andamento começará a ser executado. Você também pode definir um cronômetro de etapas para a execução de um trabalho definindo um valor para stepTimeoutInMinutes quando você chama UpdateJobExecution. O temporizador de etapa se aplica apenas à execução do trabalho que você atualizar. É possível definir um novo valor para esse temporizador cada vez que você atualizar uma execução de trabalho. Você também pode criar um cronômetro de etapas ao ligar StartNextPendingJobExecution. Se a execução de trabalho permanecer com o status IN_PROGRESS por mais tempo que o intervalo do temporizador de etapa, ela falhará e alternará para o status TIMED_OUT terminal. O temporizador de etapa não tem efeito sobre o temporizador em andamento que você define ao criar um trabalho.

O campo status pode ser definido como IN_PROGRESS, SUCCEEDED ou FAILED. Você não pode atualizar o status da execução de um trabalho que já esteja em um estado terminal.

Relatar a conclusão da execução

Quando o dispositivo conclui a execução do trabalho, ele chama a API MQTT UpdateJobExecution. Se o trabalho tiver sido bem-sucedido, defina status como SUCCEEDED e, na carga da mensagem, em statusDetails, adicione outras informações sobre o trabalho, como pares nome/valor. Os temporizadores de etapa e em andamento terminam quando a execução do trabalho é concluída.

Por exemplo: .

{ "status":"SUCCEEDED", "statusDetails": { "progress":"100%" }, "expectedVersion":"2", "clientToken":"client-001" }

Se o trabalho não foi bem-sucedido, defina status como FAILED e, em statusDetails, adicione informações sobre o erro que ocorreu:

{ "status":"FAILED", "statusDetails": { "errorCode":"101", "errorMsg":"Unable to install update" }, "expectedVersion":"2", "clientToken":"client-001" }
nota

O atributo statusDetails pode conter qualquer número de pares de nome e valor.

Quando o serviço AWS IoT Jobs recebe essa atualização, ele publica uma mensagem sobre o $aws/things/MyThing/jobs/notify tópico para indicar que a execução do trabalho foi concluída:

{ "timestamp":1476290692776, "jobs":{} }

Trabalhos adicionais

Se houver outras execuções de trabalho pendentes para o dispositivo, elas serão incluídas na mensagem publicada em $aws/things/MyThing/jobs/notify.

Por exemplo: .

{ "timestamp":1476290692776, "jobs":{ "QUEUED":[{ "jobId":"0002", "queuedAt":1476290646230, "lastUpdatedAt":1476290646230 }], "IN_PROGRESS":[{ "jobId":"0003", "queuedAt":1476290646230, "lastUpdatedAt":1476290646230 }] } }