Flusso di lavoro dei processi - AWS IoT Core

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Flusso di lavoro dei processi

Di seguito vengono illustrati i diversi passaggi del flusso di lavoro dei processi, dall'avvio di un nuovo processo alla segnalazione dello stato di completamento dell'esecuzione di un processo.

Avvio di un nuovo processo

Quando viene creato un nuovo lavoro, AWS IoT Jobs pubblica un messaggio sull'$aws/things/thing-name/jobs/notifyargomento per ogni dispositivo di destinazione.

Il messaggio contiene le informazioni seguenti:

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

Il dispositivo riceve questo messaggio sull'argomento '$aws/things/thingName/jobs/notify' quando l'esecuzione del processo viene aggiunta alla coda.

Nota

Per i processi con SchedulingConfig opzionale, il processo manterrà lo stato iniziale di SCHEDULED. Quando il processo raggiunge startTime selezionata, si verificherà quanto segue:

  • Lo stato del processo verrà aggiornato a IN_PROGRESS.

  • Il processo avvierà l'implementazione del documento del processo in tutti i dispositivi nel gruppo di destinazione.

Recupero delle informazioni sul processo

Per ottenere ulteriori informazioni sull'esecuzione di un processo, il dispositivo chiama l'API MQTT DescribeJobExecution con il campo includeJobDocument impostato su true (impostazione di default).

Se la richiesta ha esito positivo, il servizio AWS IoT Jobs pubblica un messaggio sull'$aws/things/MyThing/jobs/0023/get/acceptedargomento:

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

Se la richiesta fallisce, il servizio AWS IoT Jobs pubblica un messaggio sull'$aws/things/MyThing/jobs/0023/get/rejectedargomento.

Il dispositivo a questo punto dispone del documento del processo che può utilizzare per eseguire le operazioni remote per il processo. Se il documento del processo contiene un URL Amazon S3 prefirmato, il dispositivo può usare l'URL per scaricare i file necessari per il processo.

Segnalazione dello stato dell'esecuzione del processo

Quando un dispositivo esegue il processo, può chiamare l'API MQTT UpdateJobExecution per aggiornare lo stato dell'esecuzione del processo.

Ad esempio, un dispositivo può aggiornare lo stato dell'esecuzione di un processo impostandolo su IN_PROGRESS pubblicando il messaggio seguente nell'argomento $aws/things/MyThing/jobs/0023/update:

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

Jobs risponde pubblicando un messaggio nell'argomento $aws/things/MyThing/jobs/0023/update/accepted o $aws/things/MyThing/jobs/0023/update/rejected:

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

Il dispositivo può combinare le due richieste precedenti chiamando StartNextPendingJobExecution. In questo modo si ottiene e si avvia la successiva esecuzione di processo in sospeso e si consente al dispositivo di aggiornare lo stato di esecuzione del processo. Questa richiesta, inoltre, restituisce il documento del processo quando c'è un'esecuzione del processo in sospeso.

Se il processo contiene un TimeoutConfig, il timer in corso inizia a funzionare. È inoltre possibile impostare un timer a intervalli per l'esecuzione di un lavoro impostando un valore per stepTimeoutInMinutes quando si chiama UpdateJobExecution. Il timer della fase si applica solo all'esecuzione del processo che stai aggiornando. È possibile impostare un nuovo valore per questo timer ogni volta che si aggiorna l'esecuzione di un processo. È inoltre possibile creare uno step timer quando si chiama StartNextPendingJobExecution. Se l'esecuzione del processo resta nello stato IN_PROGRESS per un periodo di tempo superiore a quello consentito dall'intervallo del timer della fase, l'esecuzione del processo non va a buon fine e viene impostato lo stato TIMED_OUT terminale. Il timer della fase non ha alcun effetto su quello in corso impostato al momento della creazione di un processo.

Il campo status può essere impostato su IN_PROGRESS, SUCCEEDED o FAILED. Non è possibile aggiornare lo stato dell'esecuzione di un processo già in stato terminale.

Segnalazione del completamento dell'esecuzione

Quando il dispositivo completa l'esecuzione del processo, chiama l'API MQTT UpdateJobExecution. Se il processo ha avuto esito positivo, impostare status su SUCCEEDED e, nel payload del messaggio, in statusDetails, aggiungere altre informazioni sul processo come coppie nome-valore. Il timer in corso e quello della fase si interrompono al completamento dell'esecuzione del processo.

Per esempio:

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

Se il processo ha avuto esito negativo, il valore di status viene impostato su FAILED e in statusDetails vengono aggiunte informazioni sull'errore che si è verificato:

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

L'attributo statusDetails può contenere un numero qualsiasi di coppie nome-valore.

Quando il servizio AWS IoT Jobs riceve questo aggiornamento, pubblica un messaggio sull'$aws/things/MyThing/jobs/notifyargomento per indicare che l'esecuzione del lavoro è completa:

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

Processi aggiuntivi

Se ci sono altre esecuzioni dei processi in sospeso per il dispositivo, vengono incluse nel messaggio pubblicato in $aws/things/MyThing/jobs/notify.

Per esempio:

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