

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à.

# Interagisci con il ciclo di vita dei componenti
<a name="ipc-component-lifecycle"></a>

Utilizza il servizio IPC del ciclo di vita dei componenti per:
+ Aggiorna lo stato del componente sul dispositivo principale.
+ Iscriviti agli aggiornamenti sullo stato dei componenti.
+ Impedisci al nucleus di interrompere il componente per applicare un aggiornamento durante una distribuzione.
+ Metti in pausa e riprendi i processi dei componenti.

**Topics**
+ [Versioni SDK minime](#ipc-component-lifecycle-sdk-versions)
+ [Autorizzazione](#ipc-component-lifecycle-authorization)
+ [UpdateState](#ipc-operation-updatestate)
+ [SubscribeToComponentUpdates](#ipc-operation-subscribetocomponentupdates)
+ [DeferComponentUpdate](#ipc-operation-defercomponentupdate)
+ [PauseComponent](#ipc-operation-pausecomponent)
+ [ResumeComponent](#ipc-operation-resumecomponent)

## Versioni SDK minime
<a name="ipc-component-lifecycle-sdk-versions"></a>

La tabella seguente elenca le versioni minime da utilizzare per interagire con il SDK per dispositivi AWS IoT ciclo di vita dei componenti.


| SDK | Versione minima | 
| --- | --- | 
|  [SDK per dispositivi AWS IoT per Java v2](https://github.com/aws/aws-iot-device-sdk-java-v2)  |  v1.2.10  | 
|  [SDK per dispositivi AWS IoT per Python v2](https://github.com/aws/aws-iot-device-sdk-python-v2)  |  v1.5.3  | 
|  [SDK per dispositivi AWS IoT per C\$1\$1 v2](https://github.com/aws/aws-iot-device-sdk-cpp-v2)  |  v1.17.0  | 
|  [SDK per dispositivi AWS IoT per v2 JavaScript ](https://github.com/aws/aws-iot-device-sdk-js-v2)  |  v1.12.0  | 

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

Per mettere in pausa o riprendere altri componenti di un componente personalizzato, è necessario definire politiche di autorizzazione che consentano al componente di gestire altri componenti. Per informazioni sulla definizione delle politiche di autorizzazione, vedere. [Autorizza i componenti a eseguire operazioni IPC](interprocess-communication.md#ipc-authorization-policies)

Le politiche di autorizzazione per la gestione del ciclo di vita dei componenti hanno le seguenti proprietà.

**Identificatore del servizio IPC:** `aws.greengrass.ipc.lifecycle`


| Operation | Description | Resources | 
| --- | --- | --- | 
|  `aws.greengrass#PauseComponent`  |  Consente a un componente di mettere in pausa i componenti specificati.  |  Un nome di componente o `*` per consentire l'accesso a tutti i componenti.  | 
|  `aws.greengrass#ResumeComponent`  |  Consente a un componente di ripristinare i componenti specificati.  |  Un nome di componente o `*` per consentire l'accesso a tutti i componenti.  | 
|  `*`  |  Consente a un componente di mettere in pausa e riprendere i componenti specificati.  |  Un nome di componente o `*` per consentire l'accesso a tutti i componenti.  | 

### Esempi di politiche di autorizzazione
<a name="ipc-component-lifecycle-authorization-policy-examples"></a>

È possibile fare riferimento al seguente esempio di politica di autorizzazione per configurare le politiche di autorizzazione per i componenti.

**Example Esempio di politica di autorizzazione**  
Il seguente esempio di politica di autorizzazione consente a un componente di mettere in pausa e riprendere tutti i componenti.  

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

Aggiorna lo stato del componente sul dispositivo principale.

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

La richiesta di questa operazione ha i seguenti parametri:

`state`  
Lo stato da impostare. Questo enum ha `LifecycleState` i seguenti valori:  
+ `RUNNING`
+ `ERRORED`

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

Questa operazione non fornisce alcuna informazione nella sua risposta.

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

Gli esempi seguenti mostrano come chiamare questa operazione nel codice componente personalizzato.

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

**Example Esempio: aggiorna lo stato**  

```
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 Esempio: stato di aggiornamento**  

```
#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 Esempio: stato di aggiornamento**  

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

Iscriviti per ricevere notifiche prima che il software AWS IoT Greengrass Core aggiorni un componente. La notifica specifica se il nucleo verrà riavviato o meno come parte dell'aggiornamento.

Il nucleus invia notifiche di aggiornamento solo se la politica di aggiornamento dei componenti della distribuzione specifica di notificare i componenti. Il comportamento predefinito consiste nel notificare i componenti. Per ulteriori informazioni, vedete [Creare distribuzione](create-deployments.md) l'[DeploymentComponentUpdatePolicy](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_DeploymentComponentUpdatePolicy.html)oggetto che potete fornire quando chiamate l'[CreateDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateDeployment.html)operazione.

**Importante**  
Le distribuzioni locali non notificano i componenti prima degli aggiornamenti.

<a name="ipc-subscribe-operation-note"></a>Questa operazione è un'operazione di sottoscrizione in cui ci si iscrive a un flusso di messaggi di eventi. Per utilizzare questa operazione, definite un gestore di risposte di flusso con funzioni che gestiscono i messaggi di evento, gli errori e la chiusura dei flussi. Per ulteriori informazioni, consulta [Iscriviti ai flussi di eventi IPC](interprocess-communication.md#ipc-subscribe-operations).

**Tipo di messaggio di evento:** `ComponentUpdatePolicyEvents`

**Suggerimento**  
Puoi seguire un tutorial per imparare a sviluppare un componente che rinvii in modo condizionale gli aggiornamenti dei componenti. Per ulteriori informazioni, consulta [Tutorial: Sviluppa un componente Greengrass che rinvii gli aggiornamenti dei componenti](defer-component-updates-tutorial.md).

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

La richiesta di questa operazione non ha parametri.

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

La risposta di questa operazione contiene le seguenti informazioni:

`messages`  
Il flusso di messaggi di notifica. Questo oggetto contiene `ComponentUpdatePolicyEvents` le seguenti informazioni:    
`preUpdateEvent`(Python:) `pre_update_event`  
(Facoltativo) Un evento che indica che il nucleo desidera aggiornare un componente. È possibile rispondere con l'[DeferComponentUpdate](#ipc-operation-defercomponentupdate)operazione di conferma o rinviare l'aggiornamento fino a quando il componente non sarà pronto per il riavvio. Questo oggetto contiene `PreComponentUpdateEvent` le seguenti informazioni:    
`deploymentId`(Python:) `deployment_id`  
L'ID della AWS IoT Greengrass distribuzione che aggiorna il componente.  
`isGgcRestarting`(Python:) `is_ggc_restarting`  
Se il nucleo deve essere riavviato o meno per applicare l'aggiornamento.  
`postUpdateEvent`(Python:) `post_update_event`  
(Facoltativo) Un evento che indica che il nucleo ha aggiornato un componente. Questo oggetto contiene `PostComponentUpdateEvent` le seguenti informazioni:    
`deploymentId`(Python:) `deployment_id`  
L'ID della AWS IoT Greengrass distribuzione che ha aggiornato il componente.  
Questa funzionalità richiede la versione 2.7.0 o successiva del componente Greengrass nucleus.

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

Riconosci o rimanda l'aggiornamento di un componente con cui lo scopri. [SubscribeToComponentUpdates](#ipc-operation-subscribetocomponentupdates) Specificate il tempo di attesa prima che il nucleo verifichi nuovamente se il componente è pronto per procedere con l'aggiornamento del componente. È inoltre possibile utilizzare questa operazione per comunicare al nucleo che il componente è pronto per l'aggiornamento.

Se un componente non risponde alla notifica di aggiornamento del componente, il nucleus attende il periodo di tempo specificato nella politica di aggiornamento dei componenti della distribuzione. Dopo tale timeout, il nucleus procede con la distribuzione. Il timeout predefinito per l'aggiornamento dei componenti è di 60 secondi. Per ulteriori informazioni, vedere [Creare distribuzione](create-deployments.md) e l'[DeploymentComponentUpdatePolicy](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_DeploymentComponentUpdatePolicy.html)oggetto che è possibile fornire quando si chiama l'[CreateDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateDeployment.html)operazione.

**Suggerimento**  
Puoi seguire un tutorial per imparare a sviluppare un componente che differisca in modo condizionale gli aggiornamenti dei componenti. Per ulteriori informazioni, consulta [Tutorial: Sviluppa un componente Greengrass che rinvii gli aggiornamenti dei componenti](defer-component-updates-tutorial.md).

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

La richiesta di questa operazione ha i seguenti parametri:

`deploymentId`(Python:) `deployment_id`  
L'ID della AWS IoT Greengrass distribuzione da rinviare.

`message`  
(Facoltativo) Il nome del componente per il quale posticipare gli aggiornamenti.  
Il valore predefinito è il nome del componente che effettua la richiesta.

`recheckAfterMs`(Python:) `recheck_after_ms`  
Il periodo di tempo in millisecondi per il quale posticipare l'aggiornamento. Il nucleo attende questo intervallo di tempo e poi ne invia un altro `PreComponentUpdateEvent` con cui è possibile eseguire l'individuazione. [SubscribeToComponentUpdates](#ipc-operation-subscribetocomponentupdates)  
`0`Specificare di confermare l'aggiornamento. Questo indica al nucleo che il componente è pronto per l'aggiornamento.  
Il valore predefinito è zero millisecondi, il che significa che conferma l'aggiornamento.

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

Questa operazione non fornisce alcuna informazione nella sua risposta.

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

Questa funzionalità è disponibile per la versione 2.4.0 e successive del componente [Greengrass](greengrass-nucleus-component.md) nucleus. AWS IoT Greengrass attualmente non supporta questa funzionalità sui dispositivi Windows core. 

Sospende i processi di un componente sul dispositivo principale. Per riprendere un componente, utilizzate l'[ResumeComponent](#ipc-operation-resumecomponent)operazione.

È possibile mettere in pausa solo i componenti generici. Se si tenta di mettere in pausa qualsiasi altro tipo di componente, questa operazione genera un. `InvalidRequestError`

**Nota**  
Questa operazione non può mettere in pausa i processi containerizzati, come i contenitori Docker. [Per mettere in pausa e riprendere un contenitore Docker, puoi utilizzare i comandi docker pause e [docker unpause](https://docs.docker.com/engine/reference/commandline/pause/).](https://docs.docker.com/engine/reference/commandline/unpause/)

Questa operazione non mette in pausa le dipendenze dei componenti o i componenti che dipendono dal componente che metti in pausa. Considerate questo comportamento quando mettete in pausa un componente che dipende da un altro componente, poiché il componente dipendente potrebbe riscontrare problemi quando la sua dipendenza viene messa in pausa.

Quando si riavvia o si spegne un componente in pausa, ad esempio durante una distribuzione, il Greengrass nucleus riprende il componente ed esegue il suo ciclo di vita di spegnimento. Per ulteriori informazioni sul riavvio di un componente, vedere. [RestartComponent](ipc-local-deployments-components.md#ipc-operation-restartcomponent)

**Importante**  
Per utilizzare questa operazione, è necessario definire una politica di autorizzazione che conceda il permesso di utilizzare questa operazione. Per ulteriori informazioni, consulta [Autorizzazione](#ipc-component-lifecycle-authorization).

### Versioni SDK minime
<a name="ipc-operation-pausecomponent-sdk-versions"></a>

La tabella seguente elenca le versioni minime da utilizzare per mettere in pausa e riprendere i componenti. SDK per dispositivi AWS IoT 


| SDK | Versione minima | 
| --- | --- | 
|  [SDK per dispositivi AWS IoT per Java v2](https://github.com/aws/aws-iot-device-sdk-java-v2)  |  v1.4.3  | 
|  [SDK per dispositivi AWS IoT per Python v2](https://github.com/aws/aws-iot-device-sdk-python-v2)  |  v1.6.2  | 
|  [SDK per dispositivi AWS IoT per C\$1\$1 v2](https://github.com/aws/aws-iot-device-sdk-cpp-v2)  |  v1.13.1  | 
|  [SDK per dispositivi AWS IoT per v2 JavaScript ](https://github.com/aws/aws-iot-device-sdk-js-v2)  |  v1.12.0  | 

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

La richiesta di questa operazione ha i seguenti parametri:

`componentName`(Python:) `component_name`  
Il nome del componente da mettere in pausa, che deve essere un componente generico. Per ulteriori informazioni, consulta [Tipi di componenti](develop-greengrass-components.md#component-types).

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

Questa operazione non fornisce alcuna informazione nella sua risposta.

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

Questa funzionalità è disponibile per la versione 2.4.0 e successive del componente [Greengrass](greengrass-nucleus-component.md) nucleus. AWS IoT Greengrass attualmente non supporta questa funzionalità sui dispositivi Windows core. 

Riprende i processi di un componente sul dispositivo principale. Per mettere in pausa un componente, utilizzate l'operazione. [PauseComponent](#ipc-operation-pausecomponent)

È possibile riprendere solo i componenti in pausa. Se si tenta di riprendere un componente che non è in pausa, questa operazione genera un. `InvalidRequestError`

**Importante**  
Per utilizzare questa operazione, è necessario definire una politica di autorizzazione che conceda l'autorizzazione a farlo. Per ulteriori informazioni, consulta [Autorizzazione](#ipc-component-lifecycle-authorization).

### Versioni SDK minime
<a name="ipc-operation-resumecomponent-sdk-versions"></a>

La tabella seguente elenca le versioni minime da utilizzare per mettere in pausa e riprendere i componenti. SDK per dispositivi AWS IoT 


| SDK | Versione minima | 
| --- | --- | 
|  [SDK per dispositivi AWS IoT per Java v2](https://github.com/aws/aws-iot-device-sdk-java-v2)  |  v1.4.3  | 
|  [SDK per dispositivi AWS IoT per Python v2](https://github.com/aws/aws-iot-device-sdk-python-v2)  |  v1.6.2  | 
|  [SDK per dispositivi AWS IoT per C\$1\$1 v2](https://github.com/aws/aws-iot-device-sdk-cpp-v2)  |  v1.13.1  | 
|  [SDK per dispositivi AWS IoT per v2 JavaScript ](https://github.com/aws/aws-iot-device-sdk-js-v2)  |  v1.12.0  | 

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

La richiesta di questa operazione ha i seguenti parametri:

`componentName`(Python:) `component_name`  
Il nome del componente da riprendere.

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

Questa operazione non fornisce alcuna informazione nella sua risposta.