

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.

# Événements du cycle de vie
<a name="life-cycle-events"></a>

AWS IoT peut publier des événements du cycle de vie sur les sujets MQTT. Ces événements sont disponibles par défaut et ne peuvent pas être désactivés.

**Note**  
Les messages de cycle de vie peuvent être envoyés dans le désordre. Vous pouvez recevoir des messages en double.  
`thingName`ne sera inclus que si le client se connecte à l'aide de la fonction d'[objet exclusif](exclusive-thing.md).

**Topics**
+ [Événements de connexion/déconnexion](#connect-disconnect)
+ [Événement d'échec de tentative de connexion](#connect-authfailure-event)
+ [Événements d'abonnement/désabonnement](#subscribe-unsubscribe-events)

## Événements de connexion/déconnexion
<a name="connect-disconnect"></a>

**Note**  
Grâce à AWS IoT l'indexation du parc Device Management, vous pouvez rechercher des objets, exécuter des requêtes agrégées et créer des groupes dynamiques en fonction des Connect/Disconnect événements liés aux objets. Pour plus d’informations,veuillez consulter consultez [ la rubrique Fleet indexing](https://docs.aws.amazon.com//iot/latest/developerguide/iot-indexing.html).

AWS IoT publie un message dans les rubriques MQTT suivantes lorsqu'un client se connecte ou se déconnecte :
+ `$aws/events/presence/connected/{{clientId}}` – Un client connecté à l’agent de messages.
+ `$aws/events/presence/disconnected/{{clientId}}` – un client déconnecté de l’agent de messages.

Vous trouverez ci-dessous une liste des éléments JSON contenus dans les connection/disconnection messages publiés dans le `$aws/events/presence/connected/{{clientId}}` sujet.

**clientId**  
ID du client qui se connecte ou se déconnecte.  
Les clients IDs contenant \# ou \+ ne reçoivent aucun événement du cycle de vie.

**thingName**  
Le nom de votre outil IoT. `thingName`ne sera inclus que si le client se connecte à l'aide de la fonction d'[objet exclusif](exclusive-thing.md).

**clientInitiatedDisconnect**  
True si le client est à l'origine de la déconnexion. Sinon, la valeur renvoyée est Faux. Figurant uniquement dans les messages de déconnexion.

**disconnectReason**  
La raison pour laquelle le client se déconnecte. Figurant uniquement dans les messages de déconnexion. Le tableau suivant contient des valeurs valides et indique si le courtier enverra des messages [Last Will and Testament (LWT)](mqtt.md#mqtt-lwt) lorsque la déconnexion se produit.      
[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/iot/latest/developerguide/life-cycle-events.html)
1 Si l'appareil dispose d'une connexion active avant de recevoir cette erreur.  
2 Pour empêcher les messages Last Will and Testament (LWT), configurez `preventWillMessage=true` pour remplacer le comportement d'envoi LWT par défaut de l'`DeleteConnection`API.

**eventType**  
Type d’événement. Les valeurs valides sont `connected` ou `disconnected`. 

**ipAddress**  
Adresse IP du client de connexion. Cela peut être au IPv6 format IPv4 ou au format. Figurant uniquement dans les messages de connexion. 

**principalIdentifier**  
Informations d'identification utilisées pour l'authentification. Pour les certificats d'authentification mutuelle TLS, il s'agit de l'ID du certificat. Pour les autres connexions, ce sont les informations d'identification IAM.

**sessionIdentifier**  
Un identifiant unique au monde AWS IoT qui existe pendant toute la durée de la session.

**timestamp**  
Une approximation du moment où l'événement s'est produit.

**versionNumber**  
Numéro de version de l'événement de cycle de vie. Il s'agit d'un entier qui augmente de façon monotone pour chaque connexion d'ID client. Le numéro de version peut être utilisé par un abonné afin de déduire l'ordre des événements de cycle de vie.  
Les messages de connexion et de déconnexion d'une connexion de client ont le même numéro de version.  
Le numéro de version peut ignorer des valeurs ; il n'est pas garanti qu'il augmentera uniformément de 1 à chaque événement.  
Si un client n'est pas connecté pendant une heure environ, le numéro de version est réinitialisé à 0. Pour les sessions persistantes, le numéro de version est remis à 0 après qu'un client a été déconnecté plus longtemps que le délai configuré time-to-live (TTL) pour la session persistante.

Un message de connexion présente la structure suivante.

```
{
    "clientId": "186b5",
    "thingName": "exampleThing",
    "timestamp": 1573002230757,
    "eventType": "connected",
    "sessionIdentifier": "00000000-0000-0000-0000-000000000000",
    "principalIdentifier": "12345678901234567890123456789012",
    "ipAddress": "192.0.2.0",
    "versionNumber": 0
}
```

Un message de déconnexion présente la structure suivante.

```
{
    "clientId": "186b5",
    "thingName": "exampleThing",
    "timestamp": 1573002340451,
    "eventType": "disconnected",
    "sessionIdentifier": "00000000-0000-0000-0000-000000000000",
    "principalIdentifier": "12345678901234567890123456789012",
    "clientInitiatedDisconnect": true,
    "disconnectReason": "CLIENT_INITIATED_DISCONNECT",
    "versionNumber": 0
}
```

### Gestion des déconnexions du client
<a name="reconnect"></a>

Les bonnes pratiques consistent à toujours implémenter un état d'attente pour les événements du cycle de vie, notamment avec des messages LWT [(Last Will and Testament)](mqtt.md). À réception d'un message de déconnexion, votre code doit déclencher un délai d'attente et vérifier si un appareil est toujours hors ligne avant de prendre des mesures. Pour ce faire, vous pouvez utiliser des [files d'attente à retardement SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-delay-queues.html). Lorsqu'un client reçoit un message LWT ou un événement de cycle de vie, vous pouvez mettre ce message en file d'attente (pendant 5 secondes, par exemple). Lorsque ce message est disponible et traité (par Lambda ou un autre service), vous pouvez commencer par vérifier si l'appareil est toujours hors connexion avant de prendre d'autres mesures.

## Événement d'échec de tentative de connexion
<a name="connect-authfailure-event"></a>

AWS IoT publie un message dans la rubrique MQTT suivante lorsqu'un client n'est pas autorisé à se connecter ou lorsqu'un dernier testament est configuré et que le client n'est pas autorisé à publier sur cette rubrique testamentaire.

```
$aws/events/presence/connect_failed/{{clientId}}
```

Vous trouverez ci-dessous une liste des éléments JSON contenus dans les messages d'autorisation de connexion publiés dans le `$aws/events/presence/connect_failed/{{clientId}}` sujet.

**clientId**  
ID client du client qui a tenté de se connecter sans succès.  
Les clients IDs contenant \# ou \+ ne reçoivent aucun événement du cycle de vie.

**thingName**  
Le nom de votre outil IoT. `thingName`ne sera inclus que si le client se connecte à l'aide de la fonction d'[objet exclusif](exclusive-thing.md).

**timestamp**  
Une approximation du moment où l'événement s'est produit.

**eventType**  
Type d’événement. La valeur valide est`connect_failed`.

**connectFailureReason**  
La raison pour laquelle la connexion échoue. La valeur valide est`AUTHORIZATION_FAILED`.

**principalIdentifier**  
Informations d'identification utilisées pour l'authentification. Pour les certificats d'authentification mutuelle TLS, il s'agit de l'ID du certificat. Pour les autres connexions, ce sont les informations d'identification IAM.

**sessionIdentifier**  
Un identifiant unique au monde AWS IoT qui existe pendant toute la durée de la session.

**ipAddress**  
Adresse IP du client de connexion. Cela peut être au IPv6 format IPv4 ou au format. Figurant uniquement dans les messages de connexion.

La structure d'un message d'échec de connexion est la suivante.

```
{
    "clientId": "186b5",
    "thingName": "exampleThing",
    "timestamp": 1460065214626,
    "eventType": "connect_failed",
    "connectFailureReason": "AUTHORIZATION_FAILED",
    "principalIdentifier": "12345678901234567890123456789012",
    "sessionIdentifier": "00000000-0000-0000-0000-000000000000",
    "ipAddress" : "192.0.2.0"
}
```

## Événements d'abonnement/désabonnement
<a name="subscribe-unsubscribe-events"></a>

AWS IoT publie un message dans la rubrique MQTT suivante lorsqu'un client s'abonne ou se désabonne à une rubrique MQTT :

```
$aws/events/subscriptions/subscribed/{{clientId}}
```

 or 

```
$aws/events/subscriptions/unsubscribed/{{clientId}}
```

Où `clientId` est l'ID du client MQTT qui se connecte à l'agent de messages AWS IoT .

Le message publié sur cette rubrique a la structure suivante :

```
{
    "clientId": "186b5",
    "thingName": "exampleThing",
    "timestamp": 1460065214626,
    "eventType": "subscribed" | "unsubscribed",
    "sessionIdentifier": "00000000-0000-0000-0000-000000000000",
    "principalIdentifier": "12345678901234567890123456789012",
    "topics" : ["foo/bar","device/data","dog/cat"]
}
```

Voici une liste d'éléments JSON qui sont contenus dans les messages d'abonnement/désabonnement publiés dans les rubriques `$aws/events/subscriptions/subscribed/{{clientId}}` et `$aws/events/subscriptions/unsubscribed/{{clientId}}`.

clientId  
ID du client qui s'abonne ou se désabonne.  
Les clients IDs contenant \# ou \+ ne reçoivent aucun événement du cycle de vie.

thingName  
Le nom de votre outil IoT. `thingName`ne sera inclus que si le client se connecte à l'aide de la fonction d'[objet exclusif](exclusive-thing.md).

eventType  
Type d’événement. Les valeurs valides sont `subscribed` ou `unsubscribed`. 

principalIdentifier  
Informations d'identification utilisées pour l'authentification. Pour les certificats d'authentification mutuelle TLS, il s'agit de l'ID du certificat. Pour les autres connexions, ce sont les informations d'identification IAM.

sessionIdentifier  
Un identifiant unique au monde AWS IoT qui existe pendant toute la durée de la session.

timestamp  
Une approximation du moment où l'événement s'est produit.

topics  
Tableau des sujets MQTT auquel le client s'est abonné.

**Note**  
Les messages de cycle de vie peuvent être envoyés dans le désordre. Vous pouvez recevoir des messages en double.