

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Flux de travail des tâches
<a name="jobs-workflow-jobs-online"></a>

Vous trouverez ci-dessous les différentes étapes du flux de travail des tâches, du démarrage d’une nouvelle tâche au signalement de l’état d’achèvement de l’exécution d’une tâche.

## Démarrer une nouvelle tâche
<a name="jobs-respond-new-job"></a>

Lorsqu'une nouvelle tâche est créée, AWS IoT Jobs publie un message sur le `$aws/things/thing-name/jobs/notify` sujet pour chaque appareil cible.

Le message contient les informations suivantes :

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

L'appareil reçoit ce message sur la rubrique `'$aws/things/thingName/jobs/notify'` lorsque l'exécution de la tâche est en file d'attente.

**Note**  
Pour les tâches dont `SchedulingConfig` est facultatif, la tâche conservera un statut initial de `SCHEDULED`. Lorsque la tâche atteint la valeur sélectionnée `startTime`, les événements suivants se produisent :  
L’état du statut de la tâche sera mis à jour à `IN_PROGRESS`.
La tâche commencera à déployer le document de tâche sur tous les appareils du groupe cible.

## Obtenir les informations sur une tâche
<a name="jobs-respond-get-job"></a>

Pour obtenir plus d'informations sur l'exécution d'une tâche, l'appareil appelle l'API MQTT [DescribeJobExecution](jobs-mqtt-api.md#mqtt-describejobexecution) avec le champ `includeJobDocument` défini sur `true` (valeur par défaut).

Si la demande aboutit, le service AWS IoT Jobs publie un message sur le `$aws/things/MyThing/jobs/0023/get/accepted` sujet :

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

Si la demande échoue, le service AWS IoT Jobs publie un message sur le `$aws/things/MyThing/jobs/0023/get/rejected` sujet.

L'appareil dispose désormais du document de tâche, qu'il peut utiliser pour effectuer les opérations distantes pour la tâche. Si le document de tâche contient une URL Amazon S3 présignée, l’appareil peut utiliser cette URL pour télécharger les fichiers requis pour la tâche.

## Rapport du statut d'exécution de tâche
<a name="jobs-job-processing"></a>

Au fur et à mesure que l'appareil exécute la tâche, il peut appeler l'API MQTT [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution) pour mettre à jour le statut de l'exécution de la tâche.

Par exemple, un appareil peut mettre à jour le statut de l'exécution de tâche `IN_PROGRESS` en publiant le message suivant sur la rubrique `$aws/things/MyThing/jobs/0023/update` :

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

Jobs répond en publiant un message dans la rubrique `$aws/things/MyThing/jobs/0023/update/accepted` ou `$aws/things/MyThing/jobs/0023/update/rejected` :

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

Le périphérique permet de combiner les deux demandes précédentes en appelant [StartNextPendingJobExecution](jobs-mqtt-api.md#mqtt-startnextpendingjobexecution). La prochaine exécution de tâche en attente est ainsi obtenue et démarrée et l'appareil peut mettre à jour le statut d'exécution de la tâche. La demande renvoie aussi le document de tâche lorsqu'il y a une exécution de tâche en attente.

Si la tâche contient un [TimeoutConfig](https://docs.aws.amazon.com//iot/latest/apireference/API_TimeoutConfig.html), le chronomètre en cours commence à fonctionner. Vous pouvez également définir un chronomètre pour l'exécution d'une tâche en définissant une valeur pour le `stepTimeoutInMinutes` moment où vous appelez [UpdateJobExecution](https://docs.aws.amazon.com//iot/latest/apireference/API_iot-jobs-data_UpdateJobExecution.html). Le minuteur d'étape s'applique uniquement à l'exécution des tâches que vous mettez à jour. Vous pouvez définir une nouvelle valeur pour ce minuteur chaque fois que vous mettez à jour une exécution de tâche. Vous pouvez également créer un chronomètre lorsque vous appelez [StartNextPendingJobExecution](https://docs.aws.amazon.com//iot/latest/apireference/API_iot-jobs-data_StartNextPendingJobExecution.html). Si l'exécution de tâche demeure dans l'état `IN_PROGRESS` plus longtemps que l'intervalle du minuteur d'étape, elle échoue et passe à l'état final `TIMED_OUT`. Le minuteur d'étape n'a aucun effet sur le minuteur d'avancement que vous définissez lorsque vous créez une tâche.

Le champ `status` peut avoir la valeur `IN_PROGRESS`, `SUCCEEDED` ou `FAILED`. Vous ne pouvez pas mettre à jour le statut d'une exécution de tâche qui est déjà dans un état terminal.

## Rapport d’exécution terminée
<a name="jobs-job-completed"></a>

Lorsque l'appareil a terminé l'exécution de la tâche, il appelle l'API MQTT [UpdateJobExecution](jobs-mqtt-api.md#mqtt-updatejobexecution). Si la tâche aboutit, définissez `status` sur `SUCCEEDED` et, dans le champ `statusDetails` de la charge utile du message, ajoutez d'autres informations sur la tâche sous la forme de paires nom-valeur. Les minuteurs d'avancement et d'étape prennent fin lorsque l'exécution de la tâche est terminée.

Par exemple :

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

Si la tâche n'a pas réussi, définissez `status` sur `FAILED` et, dans `statusDetails`, ajoutez les informations sur l'erreur qui s'est produite :

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

**Note**  
L'attribut `statusDetails` peut contenir n'importe quel nombre de paires nom-valeur.

Lorsque le service AWS IoT Jobs reçoit cette mise à jour, il publie un message sur le `$aws/things/MyThing/jobs/notify` sujet pour indiquer que l'exécution de la tâche est terminée :

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

## Tâches supplémentaires
<a name="jobs-additional-job"></a>

S'il existe d'autres exécutions de tâche en attente pour le périphérique, elles sont incluses dans le message publié sur `$aws/things/MyThing/jobs/notify`.

Par exemple :

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