

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.

# Interagir avec le cycle de vie des composants
<a name="ipc-component-lifecycle"></a>

Utilisez le service IPC du cycle de vie des composants pour :
+ Mettez à jour l'état du composant sur le périphérique principal.
+ Abonnez-vous aux mises à jour de l'état des composants.
+ Empêchez le noyau d'arrêter le composant pour appliquer une mise à jour lors d'un déploiement.
+ Suspendez et reprenez les processus relatifs aux composants.

**Topics**
+ [Versions minimales du SDK](#ipc-component-lifecycle-sdk-versions)
+ [Autorisation](#ipc-component-lifecycle-authorization)
+ [UpdateState](#ipc-operation-updatestate)
+ [SubscribeToComponentUpdates](#ipc-operation-subscribetocomponentupdates)
+ [DeferComponentUpdate](#ipc-operation-defercomponentupdate)
+ [PauseComponent](#ipc-operation-pausecomponent)
+ [ResumeComponent](#ipc-operation-resumecomponent)

## Versions minimales du SDK
<a name="ipc-component-lifecycle-sdk-versions"></a>

Le tableau suivant répertorie les versions minimales Kit SDK des appareils AWS IoT que vous devez utiliser pour interagir avec le cycle de vie des composants.


| Kit SDK | Version minimale | 
| --- | --- | 
|  [Kit SDK des appareils AWS IoT pour Java v2](https://github.com/aws/aws-iot-device-sdk-java-v2)  |  v1.2.10  | 
|  [Kit SDK des appareils AWS IoT pour Python v2](https://github.com/aws/aws-iot-device-sdk-python-v2)  |  v1.5.3  | 
|  [Kit SDK des appareils AWS IoT pour C\$1\$1 v2](https://github.com/aws/aws-iot-device-sdk-cpp-v2)  |  v1.17.0  | 
|  [Kit SDK des appareils AWS IoT pour JavaScript v2](https://github.com/aws/aws-iot-device-sdk-js-v2)  |  v1.12.0  | 

## Autorisation
<a name="ipc-component-lifecycle-authorization"></a>

Pour suspendre ou reprendre d'autres composants d'un composant personnalisé, vous devez définir des politiques d'autorisation qui permettent à votre composant de gérer d'autres composants. Pour plus d'informations sur la définition des politiques d'autorisation, consultez[Autoriser les composants à effectuer des opérations IPC](interprocess-communication.md#ipc-authorization-policies).

Les politiques d'autorisation pour la gestion du cycle de vie des composants présentent les propriétés suivantes.

**Identifiant du service IPC :** `aws.greengrass.ipc.lifecycle`


| Opération | Description | Ressources | 
| --- | --- | --- | 
|  `aws.greengrass#PauseComponent`  |  Permet à un composant de suspendre les composants que vous spécifiez.  |  Un nom de composant, ou `*` pour autoriser l'accès à tous les composants.  | 
|  `aws.greengrass#ResumeComponent`  |  Permet à un composant de reprendre les composants que vous spécifiez.  |  Un nom de composant, ou `*` pour autoriser l'accès à tous les composants.  | 
|  `*`  |  Permet à un composant de suspendre et de reprendre les composants que vous spécifiez.  |  Un nom de composant, ou `*` pour autoriser l'accès à tous les composants.  | 

### Exemples de politiques d'autorisation
<a name="ipc-component-lifecycle-authorization-policy-examples"></a>

Vous pouvez vous référer à l'exemple de politique d'autorisation suivant pour vous aider à configurer les politiques d'autorisation pour vos composants.

**Example Exemple de politique d'autorisation**  
L'exemple de politique d'autorisation suivant permet à un composant de suspendre et de reprendre tous les composants.  

```
{
  "accessControl": {
    "aws.greengrass.ipc.lifecycle": {
      "com.example.MyLocalLifecycleComponent:lifecycle:1": {
        "policyDescription": "Allows access to pause/resume all components.",
        "operations": [
          "aws.greengrass#PauseComponent",
          "aws.greengrass#ResumeComponent"
        ],
        "resources": [
          "*"
        ]
      }
    }
  }
}
```

## UpdateState
<a name="ipc-operation-updatestate"></a>

Mettez à jour l'état du composant sur le périphérique principal.

### Demande
<a name="ipc-operation-updatestate-request"></a>

La demande de cette opération comporte les paramètres suivants :

`state`  
État à définir. Cette énumération possède `LifecycleState` les valeurs suivantes :  
+ `RUNNING`
+ `ERRORED`

### Réponse
<a name="ipc-operation-updatestate-response"></a>

Cette opération ne fournit aucune information dans sa réponse.

### Exemples
<a name="ipc-operation-updatestate-examples"></a>

Les exemples suivants montrent comment appeler cette opération dans le code de composant personnalisé.

------
#### [ Rust ]

**Example Exemple : état de mise à jour**  

```
use gg_sdk::{ComponentState, Sdk};

fn main() {
    let sdk = Sdk::init();
    sdk.connect().expect("Failed to establish IPC connection");

    // Update component state to RUNNING
    sdk.update_state(ComponentState::Running)
        .expect("Failed to update component state");

    println!("Successfully updated component state to RUNNING.");
}
```

------
#### [ C ]

**Example Exemple : état de mise à jour**  

```
#include <gg/error.h>
#include <gg/ipc/client.h>
#include <gg/sdk.h>
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    gg_sdk_init();

    GgError err = ggipc_connect();
    if (err != GG_ERR_OK) {
        fprintf(stderr, "Failed to establish IPC connection.\n");
        exit(-1);
    }

    // Update component state to RUNNING
    err = ggipc_update_state(GG_COMPONENT_STATE_RUNNING);
    if (err != GG_ERR_OK) {
        fprintf(stderr, "Failed to update component state.\n");
        exit(-1);
    }

    printf("Successfully updated component state to RUNNING.\n");
}
```

------
#### [ C\$1\$1 (Component SDK) ]

**Example Exemple : état de mise à jour**  

```
#include <gg/ipc/client.hpp>
#include <iostream>

int main() {
    auto &client = gg::ipc::Client::get();

    auto error = client.connect();
    if (error) {
        std::cerr << "Failed to establish IPC connection.\n";
        exit(-1);
    }

    // Update component state to RUNNING
    error = client.update_component_state(GG_COMPONENT_STATE_RUNNING);
    if (error) {
        std::cerr << "Failed to update component state.\n";
        exit(-1);
    }

    std::cout << "Successfully updated component state to RUNNING.\n";
}
```

------

## SubscribeToComponentUpdates
<a name="ipc-operation-subscribetocomponentupdates"></a>

Abonnez-vous pour recevoir des notifications avant que le logiciel AWS IoT Greengrass Core ne mette à jour un composant. La notification indique si le noyau redémarrera ou non dans le cadre de la mise à jour.

Le noyau envoie des notifications de mise à jour uniquement si la politique de mise à jour des composants du déploiement indique de notifier les composants. Le comportement par défaut consiste à notifier les composants. Pour plus d'informations, reportez-vous à la section [Créer des déploiements](create-deployments.md) et à l'[DeploymentComponentUpdatePolicy](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_DeploymentComponentUpdatePolicy.html)objet que vous pouvez fournir lorsque vous appelez l'[CreateDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateDeployment.html)opération.

**Important**  
Les déploiements locaux ne notifient pas les composants avant les mises à jour.

<a name="ipc-subscribe-operation-note"></a>Il s'agit d'une opération d'abonnement dans le cadre de laquelle vous vous abonnez à un flux de messages d'événements. Pour utiliser cette opération, définissez un gestionnaire de réponse au flux avec des fonctions qui gèrent les messages d'événements, les erreurs et la fermeture du flux. Pour de plus amples informations, veuillez consulter [Abonnez-vous aux diffusions d'événements IPC](interprocess-communication.md#ipc-subscribe-operations).

**Type de message d'événement :** `ComponentUpdatePolicyEvents`

**Astuce**  
Vous pouvez suivre un didacticiel pour apprendre à développer un composant qui reporte de manière conditionnelle les mises à jour des composants. Pour de plus amples informations, veuillez consulter [Tutoriel : Développement d'un composant Greengrass qui reporte les mises à jour des composants](defer-component-updates-tutorial.md).

### Demande
<a name="ipc-operation-subscribetocomponentupdates-request"></a>

La demande de cette opération ne comporte aucun paramètre.

### Réponse
<a name="ipc-operation-subscribetocomponentupdates-response"></a>

La réponse de cette opération contient les informations suivantes :

`messages`  
Le flux de messages de notification. Cet objet contient `ComponentUpdatePolicyEvents` les informations suivantes :    
`preUpdateEvent`(Python :`pre_update_event`)  
(Facultatif) Evénement indiquant que le noyau souhaite mettre à jour un composant. Vous pouvez répondre par une [DeferComponentUpdate](#ipc-operation-defercomponentupdate) opération visant à accuser réception ou à différer la mise à jour jusqu'à ce que le composant soit prêt à redémarrer. Cet objet contient `PreComponentUpdateEvent` les informations suivantes :    
`deploymentId`(Python :`deployment_id`)  
ID du AWS IoT Greengrass déploiement qui met à jour le composant.  
`isGgcRestarting`(Python :`is_ggc_restarting`)  
Si le noyau doit ou non redémarrer pour appliquer la mise à jour.  
`postUpdateEvent`(Python :`post_update_event`)  
(Facultatif) Evénement indiquant que le noyau a mis à jour un composant. Cet objet contient `PostComponentUpdateEvent` les informations suivantes :    
`deploymentId`(Python :`deployment_id`)  
ID du AWS IoT Greengrass déploiement qui a mis à jour le composant.  
Cette fonctionnalité nécessite la version 2.7.0 ou ultérieure du composant Greengrass nucleus.

## DeferComponentUpdate
<a name="ipc-operation-defercomponentupdate"></a>

Reconnaissez ou reportez une mise à jour d'un composant que vous découvrez avec[SubscribeToComponentUpdates](#ipc-operation-subscribetocomponentupdates). Vous spécifiez le délai d'attente avant que le noyau vérifie à nouveau si votre composant est prêt à être mis à jour. Vous pouvez également utiliser cette opération pour indiquer au noyau que votre composant est prêt pour la mise à jour.

Si un composant ne répond pas à la notification de mise à jour du composant, le noyau attend le délai que vous spécifiez dans la politique de mise à jour des composants du déploiement. Après ce délai, le noyau procède au déploiement. Le délai de mise à jour des composants par défaut est de 60 secondes. Pour plus d'informations, reportez-vous à la section [Créer des déploiements](create-deployments.md) et à l'[DeploymentComponentUpdatePolicy](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_DeploymentComponentUpdatePolicy.html)objet que vous pouvez fournir lorsque vous appelez l'[CreateDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateDeployment.html)opération.

**Astuce**  
Vous pouvez suivre un didacticiel pour apprendre à développer un composant qui reporte de manière conditionnelle les mises à jour des composants. Pour de plus amples informations, veuillez consulter [Tutoriel : Développement d'un composant Greengrass qui reporte les mises à jour des composants](defer-component-updates-tutorial.md).

### Demande
<a name="ipc-operation-defercomponentupdate-request"></a>

La demande de cette opération comporte les paramètres suivants :

`deploymentId`(Python :`deployment_id`)  
ID du AWS IoT Greengrass déploiement à reporter.

`message`  
(Facultatif) Nom du composant dont les mises à jour doivent être différées.  
La valeur par défaut est le nom du composant qui fait la demande.

`recheckAfterMs`(Python :`recheck_after_ms`)  
Durée en millisecondes pendant laquelle la mise à jour doit être différée. Le noyau attend ce laps de temps puis en envoie un autre avec `PreComponentUpdateEvent` [SubscribeToComponentUpdates](#ipc-operation-subscribetocomponentupdates) lequel vous pouvez le découvrir.  
Spécifiez `0` pour accuser réception de la mise à jour. Cela indique au noyau que votre composant est prêt pour la mise à jour.  
La valeur par défaut est zéro milliseconde, ce qui signifie que la mise à jour est confirmée.

### Réponse
<a name="ipc-operation-defercomponentupdate-response"></a>

Cette opération ne fournit aucune information dans sa réponse.

## PauseComponent
<a name="ipc-operation-pausecomponent"></a>

Cette fonctionnalité est disponible pour les versions 2.4.0 et ultérieures du composant [Greengrass](greengrass-nucleus-component.md) nucleus. AWS IoT Greengrass ne prend actuellement pas en charge cette fonctionnalité sur les appareils Windows principaux. 

Suspend les processus d'un composant sur le périphérique principal. Pour reprendre un composant, utilisez l'[ResumeComponent](#ipc-operation-resumecomponent)opération.

Vous ne pouvez suspendre que les composants génériques. Si vous essayez de suspendre un autre type de composant, cette opération génère un`InvalidRequestError`.

**Note**  
Cette opération ne peut pas suspendre les processus conteneurisés, tels que les conteneurs Docker. Pour suspendre et reprendre un conteneur Docker, vous pouvez utiliser les commandes [docker pause et [docker](https://docs.docker.com/engine/reference/commandline/unpause/)](https://docs.docker.com/engine/reference/commandline/pause/) unpause.

Cette opération ne met pas en pause les dépendances des composants ni les composants qui dépendent du composant que vous interrompez. Tenez compte de ce comportement lorsque vous suspendez un composant dépendant d'un autre composant, car le composant dépendant peut rencontrer des problèmes lorsque sa dépendance est suspendue.

Lorsque vous redémarrez ou arrêtez un composant suspendu, par exemple lors d'un déploiement, le noyau Greengrass reprend le composant et exécute son cycle de vie d'arrêt. Pour plus d'informations sur le redémarrage d'un composant, consultez[RestartComponent](ipc-local-deployments-components.md#ipc-operation-restartcomponent).

**Important**  
Pour utiliser cette opération, vous devez définir une politique d'autorisation qui accorde l'autorisation d'utiliser cette opération. Pour de plus amples informations, veuillez consulter [Autorisation](#ipc-component-lifecycle-authorization).

### Versions minimales du SDK
<a name="ipc-operation-pausecomponent-sdk-versions"></a>

Le tableau suivant répertorie les versions minimales Kit SDK des appareils AWS IoT que vous devez utiliser pour suspendre et reprendre les composants.


| Kit SDK | Version minimale | 
| --- | --- | 
|  [Kit SDK des appareils AWS IoT pour Java v2](https://github.com/aws/aws-iot-device-sdk-java-v2)  |  v1.4.3  | 
|  [Kit SDK des appareils AWS IoT pour Python v2](https://github.com/aws/aws-iot-device-sdk-python-v2)  |  v1.6.2  | 
|  [Kit SDK des appareils AWS IoT pour C\$1\$1 v2](https://github.com/aws/aws-iot-device-sdk-cpp-v2)  |  v1.13.1  | 
|  [Kit SDK des appareils AWS IoT pour JavaScript v2](https://github.com/aws/aws-iot-device-sdk-js-v2)  |  v1.12.0  | 

### Demande
<a name="ipc-operation-defercomponentupdate-request"></a>

La demande de cette opération comporte les paramètres suivants :

`componentName`(Python :`component_name`)  
Nom du composant à suspendre, qui doit être un composant générique. Pour de plus amples informations, veuillez consulter [Types de composants](develop-greengrass-components.md#component-types).

### Réponse
<a name="ipc-operation-defercomponentupdate-response"></a>

Cette opération ne fournit aucune information dans sa réponse.

## ResumeComponent
<a name="ipc-operation-resumecomponent"></a>

Cette fonctionnalité est disponible pour les versions 2.4.0 et ultérieures du composant [Greengrass](greengrass-nucleus-component.md) nucleus. AWS IoT Greengrass ne prend actuellement pas en charge cette fonctionnalité sur les appareils Windows principaux. 

Reprend les processus d'un composant sur le périphérique principal. Pour suspendre un composant, utilisez l'[PauseComponent](#ipc-operation-pausecomponent)opération.

Vous ne pouvez reprendre que les composants en pause. Si vous essayez de reprendre un composant qui n'est pas en pause, cette opération lance un`InvalidRequestError`.

**Important**  
Pour utiliser cette opération, vous devez définir une politique d'autorisation qui accorde l'autorisation de le faire. Pour de plus amples informations, veuillez consulter [Autorisation](#ipc-component-lifecycle-authorization).

### Versions minimales du SDK
<a name="ipc-operation-resumecomponent-sdk-versions"></a>

Le tableau suivant répertorie les versions minimales Kit SDK des appareils AWS IoT que vous devez utiliser pour suspendre et reprendre les composants.


| Kit SDK | Version minimale | 
| --- | --- | 
|  [Kit SDK des appareils AWS IoT pour Java v2](https://github.com/aws/aws-iot-device-sdk-java-v2)  |  v1.4.3  | 
|  [Kit SDK des appareils AWS IoT pour Python v2](https://github.com/aws/aws-iot-device-sdk-python-v2)  |  v1.6.2  | 
|  [Kit SDK des appareils AWS IoT pour C\$1\$1 v2](https://github.com/aws/aws-iot-device-sdk-cpp-v2)  |  v1.13.1  | 
|  [Kit SDK des appareils AWS IoT pour JavaScript v2](https://github.com/aws/aws-iot-device-sdk-js-v2)  |  v1.12.0  | 

### Demande
<a name="ipc-operation-defercomponentupdate-request"></a>

La demande de cette opération comporte les paramètres suivants :

`componentName`(Python :`component_name`)  
Nom du composant à reprendre.

### Réponse
<a name="ipc-operation-defercomponentupdate-response"></a>

Cette opération ne fournit aucune information dans sa réponse.