

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Interacción con el ciclo de vida del componente
<a name="ipc-component-lifecycle"></a>

Utilice el servicio IPC del ciclo de vida de los componentes para:
+ Actualizar el estado del componente en el dispositivo principal.
+ Suscribirse a las actualizaciones del estado de los componentes.
+ Evitar que el núcleo detenga el componente para aplicar una actualización durante una implementación.
+ Pausar y reanudar los procesos de los componentes.

**Topics**
+ [Versiones mínimas de SDK](#ipc-component-lifecycle-sdk-versions)
+ [Autorización](#ipc-component-lifecycle-authorization)
+ [UpdateState](#ipc-operation-updatestate)
+ [SubscribeToComponentUpdates](#ipc-operation-subscribetocomponentupdates)
+ [DeferComponentUpdate](#ipc-operation-defercomponentupdate)
+ [PauseComponent](#ipc-operation-pausecomponent)
+ [ResumeComponent](#ipc-operation-resumecomponent)

## Versiones mínimas de SDK
<a name="ipc-component-lifecycle-sdk-versions"></a>

En la siguiente tabla se enumeran las versiones mínimas de las SDK para dispositivos con AWS IoT que debe utilizar para interactuar con el ciclo de vida de los componentes.


| SDK | Versión mínima | 
| --- | --- | 
|  [SDK para dispositivos con AWS IoT para Java v2](https://github.com/aws/aws-iot-device-sdk-java-v2)  |  Versión 1.2.10  | 
|  [SDK para dispositivos con AWS IoT para Python v2](https://github.com/aws/aws-iot-device-sdk-python-v2)  |  Versión 1.5.3  | 
|  [SDK para dispositivos con AWS IoT para C\$1\$1 v2](https://github.com/aws/aws-iot-device-sdk-cpp-v2)  |  Versión 1.17.0  | 
|  [SDK para dispositivos con AWS IoT para JavaScript v2](https://github.com/aws/aws-iot-device-sdk-js-v2)  |  Versión 1.12.0  | 

## Autorización
<a name="ipc-component-lifecycle-authorization"></a>

Para pausar o reanudar otros componentes de un componente personalizado, debe definir políticas de autorización que permitan a su componente administrar otros componentes. Para obtener información sobre cómo definir las políticas de autorización, consulte [Autorización de los componentes para realizar operaciones de IPC](interprocess-communication.md#ipc-authorization-policies).

Las políticas de autorización para la administración del ciclo de vida de los componentes tienen las siguientes propiedades.

**Identificador de servicio IPC:** `aws.greengrass.ipc.lifecycle`


| Operación | Description (Descripción) | Recursos | 
| --- | --- | --- | 
|  `aws.greengrass#PauseComponent`  |  Permite que un componente detenga los componentes que especifique.  |  Un nombre de componente o `*` para permitir el acceso a todos los componentes.  | 
|  `aws.greengrass#ResumeComponent`  |  Permite que un componente reanude los componentes que especifique.  |  Un nombre de componente o `*` para permitir el acceso a todos los componentes.  | 
|  `*`  |  Permite que un componente pause y reanude los componentes que especifique.  |  Un nombre de componente o `*` para permitir el acceso a todos los componentes.  | 

### Ejemplos de políticas de autorización
<a name="ipc-component-lifecycle-authorization-policy-examples"></a>

Puede consultar el siguiente ejemplo de política de autorización con el fin de configurar las políticas de autorización para sus componentes.

**Example Ejemplo de política de autorización**  
El siguiente ejemplo de política de autorización permite a un componente pausar y reanudar todos los componentes.  

```
{
  "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>

Actualice el estado del componente en el dispositivo principal.

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

Esta solicitud de operación tiene los siguientes parámetros:

`state`  
El estado que se va a establecer. Esta enumeración, `LifecycleState`, tiene los siguientes valores:  
+ `RUNNING`
+ `ERRORED`

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

Esta operación no proporciona ninguna información en su respuesta.

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

En los ejemplos siguientes, se muestra cómo llamar a esta operación en código de componente personalizado.

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

**Example Ejemplo: estado de actualización**  

```
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 Ejemplo: estado de actualización**  

```
#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 Ejemplo: estado de actualización**  

```
#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>

Suscríbase para recibir notificaciones antes de que el software AWS IoT Greengrass principal actualice un componente. La notificación especifica si el núcleo se reiniciará o no como parte de la actualización.

El núcleo envía notificaciones de actualización solo si la política de actualización de componentes de la implementación especifica que se notifique a los componentes. El comportamiento predeterminado es notificar a los componentes. Para obtener más información, consulte [Crear implementaciones](create-deployments.md) el [DeploymentComponentUpdatePolicy](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_DeploymentComponentUpdatePolicy.html)objeto que puede proporcionar al llamar a la [CreateDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateDeployment.html)operación.

**importante**  
Las implementaciones locales no notifican a los componentes antes de las actualizaciones.

<a name="ipc-subscribe-operation-note"></a>Esta es una operación de suscripción en la que se suscribe a un flujo de mensajes de eventos. Para usar esta operación, defina un identificador de respuesta de flujo con funciones que gestionen los mensajes de eventos, los errores y el cierre del flujo. Para obtener más información, consulte [Suscripción a los flujos de eventos de IPC](interprocess-communication.md#ipc-subscribe-operations).

**Tipo de mensaje del evento:** `ComponentUpdatePolicyEvents`

**sugerencia**  
Puede seguir un tutorial para aprender a desarrollar un componente que aplace condicionalmente las actualizaciones de los componentes. Para obtener más información, consulte [Tutorial: Desarrollo de un componente de Greengrass que aplace las actualizaciones de los componentes](defer-component-updates-tutorial.md).

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

Esta solicitud de la operación no tiene parámetros.

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

Esta respuesta de operación contiene la siguiente información:

`messages`  
El flujo de mensajes de notificación. Este objeto, `ComponentUpdatePolicyEvents`, contiene la siguiente información:    
`preUpdateEvent` (Python: `pre_update_event`)  
(Opcional) Un evento que indica que el núcleo quiere actualizar un componente. Puede responder con la operación [DeferComponentUpdate](#ipc-operation-defercomponentupdate) para confirmar o aplazar la actualización hasta que el componente esté listo para reiniciarse. Este objeto, `PreComponentUpdateEvent`, contiene la siguiente información:    
`deploymentId` (Python: `deployment_id`)  
El ID de la AWS IoT Greengrass implementación que actualiza el componente.  
`isGgcRestarting` (Python: `is_ggc_restarting`)  
Si el núcleo necesita reiniciarse o no después de aplicar la actualización.  
`postUpdateEvent` (Python: `post_update_event`)  
(Opcional) Un evento que indica que el núcleo actualizó un componente. Este objeto, `PostComponentUpdateEvent`, contiene la siguiente información:    
`deploymentId` (Python: `deployment_id`)  
El ID de la AWS IoT Greengrass implementación que actualizó el componente.  
Esta característica requiere la versión 2.7.0 o posterior del componente núcleo de Greengrass.

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

Confirme o aplace la actualización de un componente que detecte con [SubscribeToComponentUpdates](#ipc-operation-subscribetocomponentupdates). Debe especificar el tiempo que debe transcurrir antes de que el núcleo vuelva a comprobar si el componente está preparado para continuar con la actualización del componente. También puede utilizar esta operación para indicar al núcleo que su componente está listo para la actualización.

Si un componente no responde a la notificación de actualización del componente, el núcleo espera el tiempo que especifique en la política de actualización de componentes de la implementación. Transcurrido ese tiempo de espera, el núcleo continúa con la implementación. El tiempo de espera predeterminado de la actualización del componente es de 60 segundos. Para obtener más información, consulte [Crear implementaciones](create-deployments.md) y el [DeploymentComponentUpdatePolicy](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_DeploymentComponentUpdatePolicy.html)objeto que puede proporcionar al llamar a la [CreateDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateDeployment.html)operación.

**sugerencia**  
Puede seguir un tutorial para aprender a desarrollar un componente que aplace condicionalmente las actualizaciones de los componentes. Para obtener más información, consulte [Tutorial: Desarrollo de un componente de Greengrass que aplace las actualizaciones de los componentes](defer-component-updates-tutorial.md).

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

Esta solicitud de operación tiene los siguientes parámetros:

`deploymentId` (Python: `deployment_id`)  
El identificador del AWS IoT Greengrass despliegue que se va a aplazar.

`message`  
(Opcional) El nombre del componente cuyas actualizaciones se van a aplazar.  
Toma el valor predeterminado del componente que realiza la solicitud.

`recheckAfterMs` (Python: `recheck_after_ms`)  
El tiempo en milisegundos durante el que se debe aplazar la actualización. El núcleo espera esa cantidad de tiempo y luego envía otro `PreComponentUpdateEvent` que puede detectar con [SubscribeToComponentUpdates](#ipc-operation-subscribetocomponentupdates).  
Especifique `0` si desea confirmar la actualización. Esto indica al núcleo que el componente está listo para la actualización.  
El valor predeterminado es cero milisegundos, lo que significa confirmar la actualización.

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

Esta operación no proporciona ninguna información en su respuesta.

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

Esta función está disponible para la versión 2.4.0 y versiones posteriores del componente núcleo de [Greengrass](greengrass-nucleus-component.md). AWS IoT Greengrass actualmente no admite esta función en los dispositivos principales de Windows. 

Pausa los procesos de un componente en el dispositivo principal. Para reanudar un componente, utilice la [ResumeComponent](#ipc-operation-resumecomponent)operación.

Solo puede pausar los componentes genéricos. Si intenta pausar cualquier otro tipo de componente, esta operación arroja un `InvalidRequestError`.

**nota**  
Esta operación no puede pausar los procesos contenerizados, como los contenedores de Docker. Para pausar y reanudar un contenedor de Docker, puede usar los comandos [docker pause](https://docs.docker.com/engine/reference/commandline/pause/) y [dockerunpause](https://docs.docker.com/engine/reference/commandline/unpause/).

Esta operación no detiene las dependencias de los componentes ni los componentes que dependen del componente que se pausa. Tenga en cuenta este comportamiento al pausar un componente que es una dependencia de otro componente, ya que el componente dependiente puede tener problemas cuando su dependencia está en pausa.

Al reiniciar o apagar un componente en pausa, por ejemplo, durante una implementación, el núcleo de Greengrass reanuda el componente y ejecuta su ciclo de vida de apagado. Para obtener más información sobre reiniciar un componente, consulte [RestartComponent](ipc-local-deployments-components.md#ipc-operation-restartcomponent).

**importante**  
Para usar esta operación, debe definir una política de autorización que otorgue permiso para usar esta operación. Para obtener más información, consulte [Autorización](#ipc-component-lifecycle-authorization).

### Versiones mínimas de SDK
<a name="ipc-operation-pausecomponent-sdk-versions"></a>

En la siguiente tabla se enumeran las versiones mínimas de las SDK para dispositivos con AWS IoT que debe utilizar para pausar y reanudar los componentes.


| SDK | Versión mínima | 
| --- | --- | 
|  [SDK para dispositivos con AWS IoT para Java v2](https://github.com/aws/aws-iot-device-sdk-java-v2)  |  Versión 1.4.3  | 
|  [SDK para dispositivos con AWS IoT para Python v2](https://github.com/aws/aws-iot-device-sdk-python-v2)  |  Versión 1.6.2  | 
|  [SDK para dispositivos con AWS IoT para C\$1\$1 v2](https://github.com/aws/aws-iot-device-sdk-cpp-v2)  |  Versión 1.13.1  | 
|  [SDK para dispositivos con AWS IoT para JavaScript v2](https://github.com/aws/aws-iot-device-sdk-js-v2)  |  versión 1.12.0  | 

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

Esta solicitud de operación tiene los siguientes parámetros:

`componentName` (Python: `component_name`)  
El nombre del componente que se va a pausar, que debe ser un componente genérico. Para obtener más información, consulte [Tipos de componentes](develop-greengrass-components.md#component-types).

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

Esta operación no proporciona ninguna información en su respuesta.

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

Esta función está disponible para la versión 2.4.0 y versiones posteriores del componente núcleo de [Greengrass](greengrass-nucleus-component.md). AWS IoT Greengrass actualmente no admite esta función en los dispositivos principales de Windows. 

Reanuda los procesos de un componente en el dispositivo principal. Para pausar un componente, utilice la [PauseComponent](#ipc-operation-pausecomponent)operación.

Solo puede reanudar los componentes pausados. Si intenta reanudar un componente que no está en pausa, esta operación arroja un `InvalidRequestError`.

**importante**  
Para utilizar esta operación, debe definir una política de autorización que conceda permiso para hacerlo. Para obtener más información, consulte [Autorización](#ipc-component-lifecycle-authorization).

### Versiones mínimas de SDK
<a name="ipc-operation-resumecomponent-sdk-versions"></a>

En la siguiente tabla se enumeran las versiones mínimas de las SDK para dispositivos con AWS IoT que debe utilizar para pausar y reanudar los componentes.


| SDK | Versión mínima | 
| --- | --- | 
|  [SDK para dispositivos con AWS IoT para Java v2](https://github.com/aws/aws-iot-device-sdk-java-v2)  |  Versión 1.4.3  | 
|  [SDK para dispositivos con AWS IoT para Python v2](https://github.com/aws/aws-iot-device-sdk-python-v2)  |  Versión 1.6.2  | 
|  [SDK para dispositivos con AWS IoT para C\$1\$1 v2](https://github.com/aws/aws-iot-device-sdk-cpp-v2)  |  Versión 1.13.1  | 
|  [SDK para dispositivos con AWS IoT para JavaScript v2](https://github.com/aws/aws-iot-device-sdk-js-v2)  |  versión 1.12.0  | 

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

Esta solicitud de operación tiene los siguientes parámetros:

`componentName` (Python: `component_name`)  
El nombre del componente a reanudar.

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

Esta operación no proporciona ninguna información en su respuesta.