

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

# Hook del ciclo di vita di Amazon EC2 Auto Scaling
<a name="lifecycle-hooks"></a>

Amazon EC2 Auto Scaling offre la possibilità di aggiungere hook del ciclo di vita ai gruppi Auto Scaling. Questi hook consentono di creare soluzioni che conoscono gli eventi nel ciclo di vita dell'istanza Auto Scaling e quindi eseguire un'operazione personalizzata sulle istanze quando si verifica l'evento del ciclo di vita corrispondente. Un hook del ciclo di vita fornisce un periodo di tempo specificato (un'ora, per impostazione predefinita) per attendere il completamento dell'operazione prima che l'istanza passi allo stato successivo.

Esempio di utilizzo degli hook del ciclo di vita con istanze Auto Scaling: 
+ Quando si verifica un evento di aumento orizzontale, l'istanza appena avviata completa la sequenza di avvio e passa allo stato di attesa. Quando l'istanza è in stato di attesa, esegue uno script per scaricare e installare il software necessario per l'applicazione, in modo che l'istanza sia del tutto pronta per iniziare a ricevere traffico. Dopo aver terminato l'installazione del software, lo script, invia il comando **complete-lifecycle-action** per continuare.
+ Quando si verifica un evento scale-in, un lifecycle hook mette in pausa l'istanza prima che venga terminata e ti invia una notifica tramite Amazon. EventBridge Mentre l'istanza è in stato di attesa, puoi richiamare una AWS Lambda funzione o connetterti all'istanza per scaricare log o altri dati prima che l'istanza venga completamente terminata. 

Un uso diffuso degli hook del ciclo di vita consiste nel controllare quando le istanze sono registrate con Elastic Load Balancing. Aggiungendo un hook del ciclo di vita di avvio al gruppo con scalabilità automatica, è possibile assicurarsi che gli script di bootstrap siano stati completati correttamente e che le applicazioni nelle istanze siano pronte per accettare il traffico prima che vengano registrate nel load balancer al termine dell'hook del ciclo di vita.

**Topics**
+ [Disponibilità dell'hook del ciclo di vita](#lifecycle-hooks-availability)
+ [Considerazioni e limitazioni](#lifecycle-hook-considerations)
+ [Risorse correlate](#lifecycle-hook-related-resources)
+ [Come funzionano i lifecycle hook nei gruppi di Auto Scaling](lifecycle-hooks-overview.md)
+ [Preparazione all'aggiunta di un hook del ciclo di vita](prepare-for-lifecycle-notifications.md)
+ [Controlla la conservazione delle istanze con le politiche del ciclo di vita delle istanze](instance-lifecycle-policy.md)
+ [Recupero dello stato del ciclo di vita di destinazione](retrieving-target-lifecycle-state-through-imds.md)
+ [Aggiungi gli hook del ciclo di vita al tuo gruppo Auto Scaling](adding-lifecycle-hooks.md)
+ [Completa un'azione del ciclo di vita in un gruppo Auto Scaling](completing-lifecycle-hooks.md)
+ [Tutorial: utilizza i metadati dell'istanza per recuperare lo stato del ciclo di vita](tutorial-lifecycle-hook-instance-metadata.md)
+ [Tutorial : Configurazione di un hook del ciclo di vita che richiama una funzione Lambda](tutorial-lifecycle-hook-lambda.md)

## Disponibilità dell'hook del ciclo di vita
<a name="lifecycle-hooks-availability"></a>

Nella tabella seguente sono elencati gli hook del ciclo di vita disponibili per vari scenari.


| Event | Avvio o terminazione¹ delle istanze | [Durata massima dell'istanza](asg-max-instance-lifetime.md): istanze sostitutive | [Aggiornamento delle istanze](asg-instance-refresh.md): istanze sostitutive | [Ribilanciamento della capacità](ec2-auto-scaling-capacity-rebalancing.md): istanze sostitutive | [Warm pool](ec2-auto-scaling-warm-pools.md): istanze che entrano e escono dal warm pool | 
| --- | --- | --- | --- | --- | --- | 
| Avvio delle istanze | ✓ | ✓ | ✓ | ✓ | ✓ | 
| Interruzione delle istanze | ✓ | ✓ | ✓ | ✓ | ✓ | 

¹ Si applica a tutti gli avvii e le terminazioni, indipendentemente dal fatto che vengano avviati automaticamente o manualmente, ad esempio quando si chiamano le operazioni `SetDesiredCapacity` o `TerminateInstanceInAutoScalingGroup`. Non si applica quando si allegano o si distaccano istanze, si spostano istanze in modalità standby o si elimina il gruppo con l'opzione Forza eliminazione.

## Considerazioni e limitazioni per hook del ciclo di vita
<a name="lifecycle-hook-considerations"></a>

Quando lavori con gli hook del ciclo di vita, tieni presente le seguenti note e limitazioni:
+ Amazon EC2 Auto Scaling fornisce il proprio ciclo di vita per facilitare la gestione dei gruppi Auto Scaling. Questo ciclo di vita differisce da quello delle altre istanze EC2. Per ulteriori informazioni, consulta [Ciclo di vita delle istanze di Amazon EC2 Auto Scaling](ec2-auto-scaling-lifecycle.md). Anche le istanze in un warm pool hanno il proprio ciclo di vita, come descritto in [Transizioni dello stato del ciclo di vita delle istanze in un warm pool](warm-pool-instance-lifecycle.md#lifecycle-state-transitions).
+  Per impostazione predefinita, gli hook del ciclo di vita della terminazione funzionano al meglio. Se un hook del ciclo di vita di terminazione scade o viene abbandonato, Amazon EC2 Auto Scaling procede immediatamente alla chiusura dell'istanza. Puoi combinare gli agganci del ciclo di vita della terminazione con una politica del ciclo di vita dell'istanza per la conservazione delle istanze. Per ulteriori informazioni, consulta [Controlla la conservazione delle istanze con le politiche del ciclo di vita delle istanze](instance-lifecycle-policy.md). 
+ Puoi utilizzare hook del ciclo di vita con istanze Spot, ma questi non impediscono a un'istanza di terminare nel caso in cui quella capacità non sia più disponibile, situazione che può verificarsi in qualsiasi momento, ricevendo un avviso di interruzione due minuti prima. Per ulteriori informazioni, consulta le [interruzioni delle istanze Spot](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html) nella Guida per l'utente di *Amazon EC2*. Tuttavia, puoi abilitare il ribilanciamento della capacità per sostituire in modo proattivo le istanze Spot che hanno ricevuto una raccomandazione di ribilanciamento dal servizio Spot di Amazon EC2, un segnale che viene inviato quando un'istanza Spot presenta un elevato rischio di interruzione. Per ulteriori informazioni, consulta [Ribilanciamento della capacità in Auto Scaling per sostituire le istanze Spot a rischio](ec2-auto-scaling-capacity-rebalancing.md).
+ Le istanze possono rimanere in stato di attesa per un determinato periodo di tempo. Il timeout di default per un hook del ciclo di vita è di un'ora (timeout dell'heartbeat). È disponibile anche un timeout globale che specifica il periodo di tempo massimo durante il quale è possibile mantenere un'istanza in uno stato di attesa. Il timeout globale è pari a 48 ore o 100 volte il timeout dell'heartbeat, a seconda di quale sia il valore minore.
+ Il risultato dell'hook del ciclo di vita può essere Abbandona o Continua. Se un'istanza viene avviata, "continue" (continua) indica che le operazioni hanno avuto esito positivo e che Dimensionamento automatico Amazon EC2 può mettere l'istanza in servizio. In caso contrario, ABBANDONA indica che le operazioni personalizzate hanno avuto esito negativo e che l'istanza può essere terminata e sostituita. Se un’istanza sta terminando, sia abandon (abbandona) che continue (continua) permettono la terminazione dell'istanza. Tuttavia, abandon (abbandona) interrompe qualsiasi operazione restante, ad esempio altri hook del ciclo di vita, mentre continue (continua) permette il completamento di qualsiasi altro hook del ciclo di vita.
+ Se gli hook del ciclo di vita hanno continuamente esito negativo, Amazon EC2 Auto Scaling limita la velocità con cui consente l'avvio delle istanze, pertanto assicurati di verificare e risolvere eventuali problemi permanenti nelle operazioni dei tuoi cicli di vita. 
+ La creazione e l'aggiornamento degli hook del ciclo di vita utilizzando o un SDK forniscono opzioni non disponibili quando si crea un lifecycle hook da. AWS CLI CloudFormation Console di gestione AWS Ad esempio, il campo per specificare l'ARN di un argomento SNS o di una coda SQS non viene visualizzato nella console, perché Amazon EC2 Auto Scaling invia già eventi ad Amazon. EventBridge Questi eventi possono essere filtrati e reindirizzati a AWS servizi come Lambda, Amazon SNS e Amazon SQS in base alle esigenze.
+ Puoi aggiungere più hook del ciclo di vita a un gruppo di Auto Scaling durante la creazione, chiamando l'[CreateAutoScalingGroup](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_CreateAutoScalingGroup.html)API utilizzando, o un SDK. AWS CLI CloudFormation Tuttavia, ogni hook deve avere la stessa destinazione di notifica e ruolo IAM, se specificati. Per creare lifecycle hook con obiettivi di notifica diversi e ruoli diversi, crea i lifecycle hook uno alla volta in chiamate separate all'API. [PutLifecycleHook](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_PutLifecycleHook.html) 
+ Se aggiungi un hook del ciclo di vita per l'avvio, il periodo di tolleranza del controllo dell'integrità inizia non appena l'istanza raggiunge lo stato `InService`. Per ulteriori informazioni, consulta [Impostazione del periodo di tolleranza del controllo dell'integrità per un gruppo con scalabilità automatica](health-check-grace-period.md).

**Considerazioni sul dimensionamento**
+ Le politiche di scalabilità dinamica si espandono e riducono in risposta ai dati CloudWatch metrici, come CPU e I/O di rete, aggregati su più istanze. Durante il dimensionamento orizzontale, Dimensionamento automatico Amazon EC2 non conta immediatamente una nuova istanza per i parametri aggregati delle istanze del gruppo con dimensionamento automatico. Attende che l'istanza raggiunga lo stato `InService` e che la preparazione dell'istanza sia terminata. Per ulteriori informazioni, consulta l’argomento della preparazione dell'istanza di default, consulta [Considerazioni sulle prestazioni di dimensionamento](ec2-auto-scaling-default-instance-warmup.md#scaling-performance-considerations). 
+ Su scala ridotta, i parametri aggregati delle istanze potrebbero non riflettere immediatamente la rimozione di un'istanza in fase di terminazione. L'istanza in fase di terminazione smette di contare per i parametri aggregati delle istanze del gruppo poco dopo l'inizio del flusso di lavoro di terminazione di Dimensionamento automatico Amazon EC2. 
+ Nella maggior parte dei casi, se vengono richiamati hook del ciclo di vita, le attività di dimensionamento basate su policy di dimensionamento semplice vengono sospese fino a quando le operazioni del ciclo di vita non sono completate e il tempo di raffreddamento è trascorso. Se imposti un intervallo lungo per il tempo di raffreddamento, la ripresa del dimensionamento richiede più tempo. Per ulteriori informazioni, consulta [Ulteriori ritardi causati dagli hook del ciclo di vita](ec2-auto-scaling-scaling-cooldowns.md#cooldowns-lifecycle-hooks) nell'argomento Attesa. In generale, ti consigliamo di non utilizzare policy di dimensionamento semplici se puoi utilizzare invece policy di dimensionamento a fasi o di tracciamento mirate.

## Risorse correlate
<a name="lifecycle-hook-related-resources"></a>

Per un video introduttivo, vedi [AWS re:Invent 2018: la gestione della capacità semplificata con Amazon EC2 Auto Scaling on](https://youtu.be/PideBMIcwBQ?t=469). *YouTube*

Forniamo alcuni frammenti di template JSON e YAML che puoi usare per capire come dichiarare gli hook del ciclo di vita nei tuoi modelli di stack. CloudFormation *Per ulteriori informazioni, consulta il riferimento nella Guida per l'utente. [AWS::AutoScaling::LifecycleHook](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-lifecyclehook.html)AWS CloudFormation *

Puoi anche visitare il nostro [GitHubrepository](https://github.com/aws-samples/amazon-ec2-auto-scaling-group-examples) per scaricare modelli di esempio e script di dati utente per i lifecycle hook.

Per esempi sull'uso degli hook del ciclo di vita, consulta il seguente post sul blog. 
+ [Creazione di un sistema di backup per istanze dimensionate utilizzando il comando di esecuzione Lambda e Amazon EC2](https://aws.amazon.com/blogs/compute/building-a-backup-system-for-scaled-instances-using-aws-lambda-and-amazon-ec2-run-command/)
+ [Esegui il codice prima di terminare un'istanza di dimensionamento automatico EC2](https://aws.amazon.com/blogs/infrastructure-and-automation/run-code-before-terminating-an-ec2-auto-scaling-instance/).

# Come funzionano i lifecycle hook nei gruppi di Auto Scaling
<a name="lifecycle-hooks-overview"></a>

Dal momento in cui la si avvia fino alla sua terminazione, un'istanza Amazon EC2 passa attraverso stati diversi. Puoi creare operazioni personalizzate affinché il tuo gruppo con dimensionamento automatico esegua operazioni quando un’istanza passa in uno stato di attesa a causa di un hook del ciclo di vita.

L'illustrazione seguente mostra le transizioni tra gli stati delle istanze di Auto Scaling quando si utilizzano i lifecycle hook per la scalabilità orizzontale e la scalabilità in entrata. 

![\[Le transizioni tra gli stati delle istanze Auto Scaling quando si utilizzano i lifecycle hook per la scalabilità orizzontale e la scalabilità orizzontale.\]](http://docs.aws.amazon.com/it_it/autoscaling/ec2/userguide/images/how-lifecycle-hooks-work.png)


Come mostrato nel diagramma precedente:

1. Il gruppo con scalabilità automatica risponde a un evento di aumento orizzontale e inizia l'avvio di un'istanza.

1. L'hook del ciclo di vita mette l'istanza in uno stato di attesa (`Pending:Wait`) e poi esegue un'operazione personalizzata.

   L'istanza rimane in stato di attesa fino a quando non hai completato l'operazione del ciclo di vita oppure finché non termina il periodo di timeout. Per impostazione predefinita, l'istanza rimane in stato di attesa per un'ora, dopo di che il gruppo con scalabilità automatica continua il processo di avvio o di terminazione (`Pending:Proceed`). Se ti serve più tempo, puoi riavviare il periodo di timeout mediante la registrazione di un heartbeat. Se completi l'operazione del ciclo di vita quando l'operazione personalizzata è stata completata e prima della scadenza del periodo di timeout, il periodo termina e il gruppo con scalabilità automatica continua il processo di avvio.

1. L'istanza entra nello stato `InService` e inizia il periodo di tolleranza del controllo dell'integrità. Tuttavia, prima che l'istanza raggiunga lo stato `InService`, se il gruppo con scalabilità automatica è associato a un load balancer Elastic Load Balancer, l'istanza viene registrata con il load balancer, che inizia a controllarne l'integrità. Al termine del periodo di tolleranza del controllo dell'integrità, Amazon EC2 Auto Scaling inizia a controllare lo stato d'integrità dell'istanza.

1. Il gruppo con scalabilità automatica risponde a un evento di riduzione orizzontale e inizia l'avvio di un'istanza. Se il gruppo con scalabilità automatica viene usato con Elastic Load Balancing, l'istanza di terminazione viene prima deregistrata dal load balancer. Se per il load balancer è abilitato lo svuotamento connessione, prima di completare il processo di deregistrazione l'istanza interrompe l'accettazione di nuove connessioni e attende che quelle esistenti vengano scaricate.

1. L'hook del ciclo di vita mette l'istanza in uno stato di attesa (`Terminating:Wait`) e poi esegue un'operazione personalizzata.

   L'istanza rimarrà in stato di attesa finché non avrai completato l'operazione del ciclo di vita oppure finché il periodo di timeout (un'ora per impostazione predefinita) non sarà terminato. Dopo aver completato l'hook del ciclo di vita o il periodo di timeout sarà scaduto, l'istanza passa allo stato successivo (`Terminating:Proceed`).

1. L'istanza è terminata.

**Importante**  
Anche le istanze in un warm pool hanno il proprio ciclo di vita con gli stati di attesa corrispondenti, come descritto in [Transizioni dello stato del ciclo di vita delle istanze in un warm pool](warm-pool-instance-lifecycle.md#lifecycle-state-transitions).

## Transizioni dello stato del ciclo di vita per le istanze in fase di sostituzione del volume root
<a name="rvr-lifecycle-state-transitions"></a>

Il diagramma seguente mostra la transizione tra gli stati delle istanze di Auto Scaling quando si utilizzano gli hook del ciclo di vita per sostituire il volume root:

![\[Le transizioni tra gli stati dell'istanza Auto Scaling quando si utilizzano gli hook del ciclo di vita per sostituire il volume principale.\]](http://docs.aws.amazon.com/it_it/autoscaling/ec2/userguide/images/root-volume-replacement-lifecycle-states.png)


Come mostrato nel diagramma precedente:

1. Il gruppo Auto Scaling risponde all'aggiornamento di un'istanza e seleziona un'istanza per la sostituzione del volume root. L'istanza entra nello stato. `ReplacingRootVolume` Se l'istanza è registrata con un sistema di bilanciamento del carico, viene annullata la registrazione dal sistema di bilanciamento del carico.

1. L'hook del ciclo di vita mette l'istanza in uno stato di attesa (`ReplacingRootVolume:Wait`) e poi esegue un'operazione personalizzata. L'istanza rimane in stato di attesa fino a quando non hai completato l'operazione del ciclo di vita oppure finché non termina il periodo di timeout. Se completi l'azione del ciclo di vita quando l'azione personalizzata è stata completata e il periodo di timeout non è ancora scaduto, il periodo termina e il gruppo Auto Scaling continua il processo di sostituzione del volume principale.

1. L'istanza completa la sostituzione del volume root ed entra nello stato. `RootVolumeReplaced`

1. L'istanza entra nello `Pending` stato.

1. L'hook del ciclo di vita mette l'istanza in uno stato di attesa (`Pending:Wait`) e poi esegue un'operazione personalizzata. L'istanza rimane in uno stato di attesa fino al completamento dell'azione del ciclo di vita o fino al termine del periodo di timeout. Dopo aver completato l'hook del ciclo di vita o il periodo di timeout sarà scaduto, l'istanza passa allo stato successivo (`Pending:Proceed`).

1. L'istanza entra nello stato. `InService` Tuttavia, prima che l'istanza raggiunga `InService` lo stato, se il gruppo Auto Scaling è associato a un sistema di bilanciamento del carico Elastic Load Balancing, l'istanza viene registrata presso il load balancer.

# Preparazione all'aggiunta di un hook del ciclo di vita al gruppo con scalabilità automatica
<a name="prepare-for-lifecycle-notifications"></a>

Prima di aggiungere un hook del ciclo di vita al gruppo con scalabilità automatica, assicurati che lo script di dati utente o la destinazione di notifica siano configurati correttamente.
+ Per utilizzare uno script di dati utente che consenta l'esecuzione di operazioni personalizzate sulle istanze durante l'avvio, non è necessario configurare una destinazione di notifica. Tuttavia, devi aver già creato il modello di avvio o la configurazione di avvio che specifichino lo script di dati utente e averli associati al gruppo con scalabilità automatica. Per ulteriori informazioni sugli script dei dati utente, consulta [Esegui comandi sulla tua istanza Linux al momento del lancio](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) nella *Amazon EC2* User Guide. 
+ Per segnalare ad Amazon EC2 Auto Scaling quando l'azione del ciclo di vita è completa, devi [CompleteLifecycleAction](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_CompleteLifecycleAction.html)aggiungere la chiamata API allo script e devi creare manualmente un ruolo IAM con una policy che consenta alle istanze di Auto Scaling di chiamare questa API. Il modello di avvio o la configurazione di avvio devono specificare questo ruolo utilizzando un profilo dell'istanza IAM associato alle istanze Amazon EC2 al momento dell'avvio. Per ulteriori informazioni, consultare [Completa un'azione del ciclo di vita in un gruppo Auto Scaling](completing-lifecycle-hooks.md) e [Ruoli IAM per le applicazioni in esecuzione sulle istanze Amazon EC2](us-iam-role.md).
+ Per consentire a Lambda di segnalare Amazon EC2 Auto Scaling quando l'azione del ciclo di vita è completa, devi aggiungere [CompleteLifecycleAction](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_CompleteLifecycleAction.html)la chiamata API al codice della funzione. Inoltre, devi avere associato al ruolo di esecuzione della funzione una policy IAM che conceda a Lambda l'autorizzazione per completare le operazioni del ciclo di vita. Per ulteriori informazioni, consulta [Tutorial : Configurazione di un hook del ciclo di vita che richiama una funzione Lambda](tutorial-lifecycle-hook-lambda.md).
+ Per utilizzare un servizio come Amazon SNS o Amazon SQS per eseguire un'operazione personalizzata, devi aver già creato l'argomento SNS o la coda SQS e avere pronto il relativo Amazon Resource Name (ARN). Inoltre, devi aver già creato il ruolo IAM che offra ad Amazon EC2 Auto Scaling l'accesso all'argomento SNS o alla destinazione SQS e avere pronto il relativo ARN. Per ulteriori informazioni, consulta [Configurazione di una destinazione di notifica per le notifiche del ciclo di vita](#lifecycle-hook-notification-target). 
**Nota**  
Per impostazione predefinita, quando aggiungi un hook del ciclo di vita nella console, Amazon EC2 Auto Scaling invia notifiche sugli eventi del ciclo di vita ad Amazon. EventBridge L'utilizzo EventBridge o di uno script di dati utente è una best practice consigliata. Per creare un lifecycle hook che invii notifiche direttamente ad Amazon SNS, Amazon SQS oppure usa AWS CloudFormation, AWS Lambda o un SDK per aggiungere AWS CLI l'hook del ciclo di vita.

## Configurazione di una destinazione di notifica per le notifiche del ciclo di vita
<a name="lifecycle-hook-notification-target"></a>

È possibile aggiungere hook del ciclo di vita a un gruppo con scalabilità automatica per eseguire operazioni personalizzate quando un'istanza entra in stato di attesa. Puoi scegliere un servizio di destinazione in modo che queste operazioni vengano eseguite secondo il tuo approccio di sviluppo preferito.

Esistono quattro diversi approcci per l'implementazione degli obiettivi di notifica per i lifecycle hook:
+ **Amazon EventBridge**: ricevi le notifiche ed esegui le azioni che desideri.
+ **Amazon Simple Notification Service (Amazon SNS**): crea un argomento per la pubblicazione delle notifiche. I client possono sottoscriversi all'argomento SNS e ricevere messaggi pubblicati utilizzando un protocollo supportato.
+ **Amazon Simple Queue Service (Amazon SQS): scambio di messaggi** tramite un modello di polling.
+ **AWS Lambda**— Richiama una funzione Lambda che esegue l'azione desiderata.

Come best practice, ti suggeriamo di utilizzare EventBridge. Le notifiche inviate ad Amazon SNS e Amazon SQS contengono le stesse informazioni delle notifiche a cui invia Amazon EC2 Auto Scaling. EventBridge In precedenza EventBridge, la pratica standard consisteva nell'inviare una notifica a SNS o SQS e integrare un altro servizio con SNS o SQS per eseguire azioni programmatiche. Oggi, EventBridge offre più opzioni per i servizi a cui rivolgersi e semplifica la gestione degli eventi utilizzando un'architettura serverless. 

Ricorda che se disponi di uno script di dati utente nel modello di avvio o nella configurazione di avvio che configura le istanze al momento dell'avvio, non è necessario ricevere una notifica per eseguire operazioni personalizzate sulle istanze.

Le procedure seguenti illustrano come impostare la destinazione di notifica.

**Topics**
+ [Indirizza le notifiche a Lambda utilizzando EventBridge](#cloudwatch-events-notification)
+ [Ricezione di notifiche tramite Amazon SNS](#sns-notifications)
+ [Ricezione di notifiche tramite Amazon SQS](#sqs-notifications)
+ [Indirizza le notifiche direttamente a AWS Lambda](#lambda-notification)
+ [Esempio di messaggio di notifica](#notification-message-example)

**Importante**  
La EventBridge regola, la funzione Lambda, l'argomento Amazon SNS e la coda Amazon SQS che usi con i lifecycle hook devono sempre trovarsi nella stessa regione in cui hai creato il gruppo Auto Scaling.

### Indirizza le notifiche a Lambda utilizzando EventBridge
<a name="cloudwatch-events-notification"></a>

È possibile configurare una EventBridge regola per richiamare una funzione Lambda quando un'istanza entra in uno stato di attesa. Amazon EC2 Auto Scaling invia una EventBridge notifica degli eventi del ciclo di vita sull'istanza in fase di avvio o chiusura e un token che puoi usare per controllare l'azione del ciclo di vita. Per esempi di questi eventi, consulta [Riferimento eventi Dimensionamento automatico Amazon EC2](ec2-auto-scaling-event-reference.md).

**Nota**  
Quando usi Console di gestione AWS per creare una regola di evento, la console aggiunge automaticamente le autorizzazioni IAM necessarie per concedere l' EventBridge autorizzazione a chiamare la tua funzione Lambda. Se crei una regola di evento utilizzando la AWS CLI, dovrai concedere tali autorizzazioni in modo esplicito.   
Per informazioni su come creare regole di evento nella EventBridge console, consulta [Creazione di EventBridge regole Amazon che reagiscono agli eventi](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule.html) nella *Amazon EventBridge User Guide*.  
- oppure -   
Per un tutorial introduttivo rivolto agli utenti della console, consulta [Tutorial : Configurazione di un hook del ciclo di vita che richiama una funzione Lambda](tutorial-lifecycle-hook-lambda.md). Questo tutorial mostra come creare una semplice funzione Lambda che ascolta gli eventi di lancio e li scrive in un CloudWatch registro Logs.

**Per creare una EventBridge regola che richiami una funzione Lambda**

1. Crea una funzione Lambda utilizzando la [console Lambda](https://console.aws.amazon.com/lambda/home#/functions) e prendi nota del relativo Amazon Resource Name (ARN). Ad esempio, `arn:aws:lambda:region:123456789012:function:my-function`. È necessario l'ARN per creare un EventBridge obiettivo. Per ulteriori informazioni, consulta [Nozioni di base su Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html) nella *Guida per gli sviluppatori AWS Lambda *.

1. Per creare una regola che corrisponda agli eventi per l'avvio delle istanze, utilizza il seguente comando: [put-rule](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/events/put-rule.html).

   ```
   aws events put-rule --name my-rule --event-pattern file://pattern.json --state ENABLED
   ```

   Gli esempi seguenti mostrano `pattern.json` per un'operazione del ciclo di vita per l'avvio di un'istanza. Sostituisci il testo **italics**con il nome del tuo gruppo Auto Scaling.

   ```
   {
     "source": [ "aws.autoscaling" ],
     "detail-type": [ "EC2 Instance-launch Lifecycle Action" ],
     "detail": {
         "AutoScalingGroupName": [ "my-asg" ]
      }
   }
   ```

   Se il comando viene eseguito correttamente, EventBridge risponde con l'ARN della regola. Prendi nota di questo ARN. Dovrai inserirlo una volta arrivato alla fase 4.

   Per creare una regola che corrisponda ad altri eventi, modifica il modello di evento. Per ulteriori informazioni, consulta [Utilizzato EventBridge per gestire gli eventi di Auto Scaling](automating-ec2-auto-scaling-with-eventbridge.md).

1. Per specificare la funzione Lambda da utilizzare come destinazione per la regola, usa il seguente comando: [put-target](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/events/put-targets.html).

   ```
   aws events put-targets --rule my-rule --targets Id=1,Arn=arn:aws:lambda:region:123456789012:function:my-function
   ```

   Nel comando precedente, *my-rule* è il nome specificato per la regola nel passaggio 2 e il valore per il `Arn` parametro è l'ARN della funzione creata nel passaggio 1.

1. Per aggiungere autorizzazioni che permettono alla regola di richiamare la funzione Lambda, utilizza il seguente comando Lambda: [add-permission](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-permission.html). Questo comando affida il EventBridge service principal (`events.amazonaws.com`) e assegna le autorizzazioni alla regola specificata.

   ```
   aws lambda add-permission --function-name my-function --statement-id my-unique-id \
     --action 'lambda:InvokeFunction' --principal events.amazonaws.com --source-arn arn:aws:events:region:123456789012:rule/my-rule
   ```

   Nel precedente comando:
   + *my-function*è il nome della funzione Lambda che si desidera che la regola utilizzi come destinazione.
   + *my-unique-id*è un identificatore univoco definito per descrivere l'istruzione nella policy della funzione Lambda.
   + `source-arn`è l'ARN della EventBridge regola.

   Se eseguirai il comando correttamente, riceverai un output simile al seguente.

   ```
   {
     "Statement": "{\"Sid\":\"my-unique-id\",
       \"Effect\":\"Allow\",
       \"Principal\":{\"Service\":\"events.amazonaws.com\"},
       \"Action\":\"lambda:InvokeFunction\",
       \"Resource\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",
       \"Condition\":
         {\"ArnLike\":
           {\"AWS:SourceArn\":
            \"arn:aws:events:us-west-2:123456789012:rule/my-rule\"}}}"
   }
   ```

   Il valore di `Statement` è una versione in formato stringa JSON dell'istruzione aggiunta alla policy della funzione Lambda.

1. Dopo aver seguito queste istruzioni, passa a [Aggiungi gli hook del ciclo di vita al tuo gruppo Auto Scaling](adding-lifecycle-hooks.md) come fase successiva.

### Ricezione di notifiche tramite Amazon SNS
<a name="sns-notifications"></a>

Per impostare una destinazione di notifica (un argomento SNS) in modo da riceverla quando avviene un'operazione del ciclo di vita, puoi utilizzare Amazon SNS. Amazon SNS invia quindi le notifiche ai destinatari sottoscritti. Fino alla conferma della sottoscrizione, nessuna delle notifiche pubblicate nell'argomento viene inviata alla coda. 

**Come impostare le notifiche tramite Amazon SNS**

1. Crea un argomento Amazon SNS utilizzando la [console Amazon SNS](https://console.aws.amazon.com/sns/) o il seguente comando: [create-topic](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/create-topic.html). Assicurati che l'argomento sia nella stessa Regione del gruppo con scalabilità automatica che stai utilizzando. Per ulteriori informazioni, consulta [Nozioni di base su Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-getting-started.html) nella *Guida per gli sviluppatori di Amazon Simple Notification Service*. 

   ```
   aws sns create-topic --name my-sns-topic
   ```

1. Prendi nota dell'Amazon Resource Name (ARN) dell'argomento, per esempio, `arn:aws:sns:region:123456789012:my-sns-topic`. Ne avrai bisogno per creare l'hook del ciclo di vita.

1. Crea un ruolo di servizio IAM per consentire ad Amazon EC2 Auto Scaling l'accesso al tuo destinatario della notifica Amazon SNS.

    **Come concedere ad Amazon EC2 Auto Scaling l'accesso al tuo argomento SNS** 

   1. Aprire la console IAM all'indirizzo [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

   1. Nel riquadro di navigazione sulla sinistra, scegliere **Roles (Ruoli)**.

   1. Scegli **Crea ruolo**.

   1. In **Seleziona tipo di entità attendibile**, scegli **Servizio AWS **.

   1. Per il caso d'uso, in **Use cases for other AWS services** (Casi d'uso per altri servizi AWS ), scegli **EC2 Auto Scaling** e poi **EC2 Auto Scaling Notification Access** (Accesso alle notifiche di EC2 Auto Scaling).

   1. Scegli **Next** (Avanti) due volte per andare alla pagina **Name, review, and create** (Nomina, verifica e crea).

   1. Per **Nome ruolo**, immettere un nome per il ruolo, (ad esempio **my-notification-role**), quindi scegliere **Crea ruolo**.

   1. Nella pagina **Roles (Ruoli)** scegli il ruolo appena creato per aprire la pagina **Summary (Riepilogo)**. Prendere nota del ruolo **ARN**. Ad esempio, `arn:aws:iam::123456789012:role/my-notification-role`. Ne avrai bisogno per creare l'hook del ciclo di vita.

1. Dopo aver seguito queste istruzioni, passa a [Aggiunta di hook del ciclo di vita (AWS CLI)](adding-lifecycle-hooks.md#adding-lifecycle-hooks-aws-cli) come fase successiva.

### Ricezione di notifiche tramite Amazon SQS
<a name="sqs-notifications"></a>

Per impostare una destinazione di notifica in modo da ricevere le notifiche quando avviene un'operazione del ciclo di vita, puoi utilizzare Amazon SQS. Una coda di tipo consumer deve quindi eseguire il polling di una coda SQS per eseguire operazioni su queste notifiche.

**Importante**  
Le code FIFO non sono compatibili con gli hook del ciclo di vita.

**Come impostare le notifiche tramite Amazon SQS**

1. Crea una coda SQS usando la [console Amazon SQS](https://console.aws.amazon.com/sqs/). Assicurati che la coda sia nella stessa Regione del gruppo con scalabilità automatica che stai utilizzando. Per ulteriori informazioni, consulta [Nozioni di base su Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-getting-started.html) nella *Guida per gli sviluppatori di Amazon Simple Queue Service*. 

1. Prendi nota dell'ARN della coda, ad esempio `arn:aws:sqs:us-west-2:123456789012:my-sqs-queue`. Ne avrai bisogno per creare l'hook del ciclo di vita.

1. Crea un ruolo di servizio IAM per consentire ad Amazon EC2 Auto Scaling l'accesso alla tua destinazione di notifica Amazon SQS.

    **Come concedere ad Amazon EC2 Auto Scaling l'accesso alla tua coda SQS** 

   1. Aprire la console IAM all'indirizzo [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

   1. Nel riquadro di navigazione sulla sinistra, scegliere **Roles (Ruoli)**.

   1. Scegli **Crea ruolo**.

   1. In **Seleziona tipo di entità attendibile**, scegli **Servizio AWS **.

   1. Per il caso d'uso, in **Use cases for other AWS services** (Casi d'uso per altri servizi AWS ), scegli **EC2 Auto Scaling** e poi **EC2 Auto Scaling Notification Access** (Accesso alle notifiche di EC2 Auto Scaling).

   1. Scegli **Next** (Avanti) due volte per andare alla pagina **Name, review, and create** (Nomina, verifica e crea).

   1. Per **Nome ruolo**, immettere un nome per il ruolo, (ad esempio **my-notification-role**), quindi scegliere **Crea ruolo**.

   1. Nella pagina **Roles (Ruoli)** scegli il ruolo appena creato per aprire la pagina **Summary (Riepilogo)**. Prendere nota del ruolo **ARN**. Ad esempio, `arn:aws:iam::123456789012:role/my-notification-role`. Ne avrai bisogno per creare l'hook del ciclo di vita.

1. Dopo aver seguito queste istruzioni, passa a [Aggiunta di hook del ciclo di vita (AWS CLI)](adding-lifecycle-hooks.md#adding-lifecycle-hooks-aws-cli) come fase successiva.

### Indirizza le notifiche direttamente a AWS Lambda
<a name="lambda-notification"></a>

È possibile utilizzare una funzione Lambda come obiettivo di notifica quando si verifica un'azione del ciclo di vita. 

**Indirizzare le notifiche direttamente a AWS Lambda**

1. Aprire la [pagina Functions (Funzioni)](https://console.aws.amazon.com/lambda/home#/functions) nella console Lambda.

1. Scegli la funzione Lambda che desideri.

   Se desideri creare una nuova funzione Lambda, consulta [Creazione della funzione Lambda](lambda-custom-termination-policy.md#lambda-custom-termination-policy-create-function)

1. Scegli la scheda **Configurazione** e poi **Autorizzazioni**. 

1. Scorri fino a **Resource-based policy (Policy basata su risorse)**, quindi, scegli **Add permissions (Aggiungi autorizzazioni)**. Le policy basate su risorse vengono impiegate per concedere le autorizzazioni per richiamare la funzione al principale specificato nelle policy stesse. In questo caso, il principale sarà il [Dimensionamento automatico Amazon EC2 service-linked role (Ruolo Dimensionamento automatico Amazon EC2 collegato ai servizi)](https://docs.aws.amazon.com/autoscaling/ec2/userguide/autoscaling-service-linked-role.html) associato al gruppo con scalabilità automatica.

1. Nella sezione **Policy statement (Istruzione della policy)**, configura le autorizzazioni: 

   1. Scegli **Account AWS**.

   1. In **(Principal (Principale)**, inserisci l'ARN del ruolo collegato ai servizi chiamanti, ad esempio **arn:aws:iam::<aws-account-id>:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling**.

   1. Per **Azione**, scegli **lambda**:. InvokeFunction

   1. In **Statement ID (ID istruzione)**, inserisci un ID di istruzione univoco, ad esempio **AllowInvokeByAutoScaling**.

   1. Scegli **Save** (Salva). 

1. Dopo aver seguito queste istruzioni, passa a [Aggiunta di hook del ciclo di vita (AWS CLI)](adding-lifecycle-hooks.md#adding-lifecycle-hooks-aws-cli) come fase successiva.

### Esempio di messaggio di notifica
<a name="notification-message-example"></a>

Questa sezione fornisce un esempio di notifica per Amazon SNS, Amazon SQS e. AWS Lambda

Mentre l'istanza è in stato di attesa, viene pubblicato un messaggio su Amazon SNS, Amazon SQS e sul target di notifica. AWS Lambda 

Il messaggio include le informazioni seguenti:
+ `Origin`— Un luogo da cui proviene un'istanza EC2.
+ `Destination`— Un luogo in cui andrà a finire un'istanza EC2.
+ `LifecycleActionToken`: il token dell'azione del ciclo di vita.
+ `AccountId`— L' Account AWS ID.
+ `AutoScalingGroupName`: il nome del gruppo Auto Scaling.
+ `LifecycleHookName`: il nome dell'hook del ciclo di vita.
+ `EC2InstanceId`: l'ID dell'istanza EC2.
+ `LifecycleTransition`: il tipo di hook del ciclo di vita.
+ `NotificationMetadata`: i metadati di notifica.

Di seguito è riportato un esempio di messaggio di notifica.

```
Service: AWS Auto Scaling
Time: 2021-01-19T00:36:26.533Z
RequestId: 18b2ec17-3e9b-4c15-8024-ff2e8ce8786a
Origin: EC2
Destination: AutoScalingGroup
LifecycleActionToken: 71514b9d-6a40-4b26-8523-05e7ee35fa40
AccountId: 123456789012
AutoScalingGroupName: my-asg
LifecycleHookName: my-hook
EC2InstanceId: i-0598c7d356eba48d7
LifecycleTransition: autoscaling:EC2_INSTANCE_LAUNCHING
NotificationMetadata: hook message metadata
```

#### Esempio di messaggio di notifica di test
<a name="test-notification-message-example"></a>

Quando si aggiunge per la prima volta un hook del ciclo di vita, viene pubblicato un messaggio di notifica di test nella destinazione di notifica. Di seguito è riportato un esempio di messaggio di notifica di test.

```
Service: AWS Auto Scaling
Time: 2021-01-19T00:35:52.359Z
RequestId: 18b2ec17-3e9b-4c15-8024-ff2e8ce8786a
Event: autoscaling:TEST_NOTIFICATION
AccountId: 123456789012
AutoScalingGroupName: my-asg
AutoScalingGroupARN: arn:aws:autoscaling:us-west-2:123456789012:autoScalingGroup:042cba90-ad2f-431c-9b4d-6d9055bcc9fb:autoScalingGroupName/my-asg
```

**Nota**  
Per esempi di eventi distribuiti da Amazon EC2 Auto EventBridge Scaling a, consulta. [Riferimento eventi Dimensionamento automatico Amazon EC2](ec2-auto-scaling-event-reference.md)

# Controlla la conservazione delle istanze con le politiche del ciclo di vita delle istanze
<a name="instance-lifecycle-policy"></a>

 Le politiche del ciclo di vita delle istanze forniscono protezione contro le terminazioni di Amazon EC2 Auto Scaling quando un'azione del ciclo di vita di terminazione viene abbandonata. A differenza dei soli ganci relativi al ciclo di vita, le policy relative al ciclo di vita delle istanze sono progettate per garantire che le istanze passino a uno stato inalterato quando le procedure di spegnimento automatiche non vengono completate correttamente. 

## Quando utilizzare le policy relative al ciclo di vita delle istanze
<a name="when-to-use-instance-lifecycle-policies"></a>

 Utilizza le policy relative al ciclo di vita delle istanze quando lo spegnimento regolare dell'applicazione non è facoltativo, ma è obbligatorio e gli arresti non riusciti richiedono un intervento manuale. Casi di utilizzo comune comprendono: 
+  Applicazioni con stato che devono completare la persistenza dei dati prima della chiusura. 
+  Applicazioni che richiedono periodi di drenaggio prolungati che possono superare il timeout massimo consentito per il ciclo di vita di 48 ore. 
+  I carichi di lavoro che gestiscono dati sensibili in cui una pulizia non riuscita o incompleta potrebbe causare la perdita o il danneggiamento dei dati. 
+  Servizi mission critical in cui l'arresto improvviso ha un impatto sulla disponibilità. 

 Per ulteriori informazioni su come gestire correttamente la chiusura delle istanze, consulta. [Progetta le tue applicazioni per gestire correttamente la chiusura delle istanze](gracefully-handle-instance-termination.md) 

## Come funzionano le politiche del ciclo di vita delle istanze con gli hook del ciclo di vita della terminazione
<a name="how-instance-lifecycle-policies-work"></a>

 Le policy relative al ciclo di vita delle istanze funzionano in combinazione con gli hook del ciclo di vita della terminazione, non come sostitutive. Il processo segue diverse fasi: 

1.  **Le azioni del ciclo di vita di terminazione vengono eseguite.** Quando Amazon EC2 Auto Scaling seleziona un'istanza per la terminazione, vengono richiamati gli hook del ciclo di vita della terminazione e l'`Terminating:Wait`istanza entra nello stato per iniziare a eseguire le azioni del ciclo di vita della terminazione. 

1.  **Inizia il tentativo di chiusura di Graceful.** L'applicazione, in esecuzione sull'istanza o tramite un piano di controllo, riceve la notifica relativa all'interruzione del ciclo di vita e avvia procedure di spegnimento regolari come l'esaurimento delle connessioni, il completamento di lavori in corso o il trasferimento di dati. 

1.  **Le azioni relative al ciclo di vita di terminazione sono state completate.** Un'azione del ciclo di vita di terminazione può essere completata con o come risultato. `CONTINUE` `ABANDON` 

1.  **La politica del ciclo di vita dell'istanza valuta la situazione.** Senza una politica del ciclo di vita dell'istanza configurata, l'istanza procede alla chiusura immediata anche se l'azione relativa al ciclo di vita dell'istanza è stata completata con risultati. `ABANDON` Con una politica del ciclo di vita dell'istanza configurata per mantenere attive le istanze`TerminateHookAbandon`, l'istanza passa a uno stato inalterato se l'azione del ciclo di vita di terminazione è stata completata con risultati. `ABANDON` 

1.  **Le istanze conservate attendono un'azione manuale.** Le istanze negli stati mantenuti continuano a essere soggette ai costi standard di Amazon EC2. Queste istanze non vengono conteggiate ai fini della capacità desiderata del gruppo Auto Scaling, pertanto Auto Scaling lancia istanze sostitutive per mantenere le dimensioni desiderate. Le funzionalità di Auto Scaling come l'aggiornamento e la durata massima dell'istanza ignoreranno anche le istanze conservate. Ciò consente di completare manualmente le procedure di pulizia, recuperare i dati o indagare sul motivo per cui l'arresto automatico non è riuscito prima di terminare manualmente l'istanza. 

1.  **Si verifica la terminazione manuale.** Dopo aver completato le azioni necessarie sull'istanza mantenuta, devi chiamare l'`TerminateInstanceInAutoScalingGroup`API per terminare l'istanza. 

# Configura la conservazione dell'istanza
<a name="configure-instance-retention"></a>

Configura il tuo gruppo Amazon EC2 Auto Scaling per conservare le istanze quando le azioni del ciclo di vita di terminazione falliscono.

 Per utilizzare i criteri del ciclo di vita delle istanze nel gruppo Auto Scaling, è inoltre necessario configurare un hook del ciclo di vita della terminazione. Se configuri una policy sul ciclo di vita dell'istanza ma non disponi di alcun hook relativo al ciclo di vita della terminazione, la policy non ha alcun effetto. Le policy relative al ciclo di vita delle istanze verranno applicate solo quando le azioni relative al ciclo di vita di terminazione vengono abbandonate, non quando vengono completate correttamente con il risultato. `CONTINUE` 

 Le policy relative al ciclo di vita delle istanze utilizzano i trigger di conservazione per determinare quando conservare un'istanza. Il `TerminateHookAbandon` trigger causa la conservazione in diversi scenari: 
+  Quando chiami esplicitamente l'[ CompleteLifecycleAction](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_CompleteLifecycleAction.html)API con il `ABANDON` risultato. 
+  Quando un'azione del ciclo di vita di terminazione con risultato predefinito scade perché il `ABANDON` timeout del battito cardiaco viene raggiunto senza ricevere alcun battito cardiaco. 
+  Quando viene raggiunto il timeout globale in un'azione del ciclo di vita di terminazione con il risultato predefinito, che è 48 ore o 100 volte il timeout del battito cardiaco`ABANDON`, a seconda di quale tra i due sia minore 

------
#### [ Console ]

**Per configurare la conservazione delle istanze**

1. Apri la console Amazon EC2 Auto Scaling

1. Crea il tuo gruppo Auto Scaling (la policy del ciclo di vita dell'istanza è predefinita su Terminate)

1. Vai alla pagina dei dettagli del gruppo Auto Scaling e scegli la scheda Gestione delle **istanze**

1. **Nella **policy relativa al ciclo di vita delle istanze per Lifecycle Hook, scegli Retain****

1. Crea i collegamenti del ciclo di vita delle terminazioni con:
   + **Transizione del ciclo di vita impostata su Instance terminate**
   + **Il risultato predefinito è impostato su Abbandona**

------
#### [ AWS CLI ]

**Per configurare la conservazione delle istanze**  
 Utilizza il [create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html)comando con una politica del ciclo di vita dell'istanza: 

```
aws autoscaling create-auto-scaling-group \
--auto-scaling-group-name my-asg \
--launch-template LaunchTemplateName=my-template,Version='$Latest' \
--min-size 1 \
--max-size 3 \
--desired-capacity 2 \
--vpc-zone-identifier subnet-12345678 \
--instance-lifecycle-policy file://lifecycle-policy.json
```

Contenuto di lifecycle-policy.json:

```
{
    "RetentionTriggers": {
        "TerminateHookAbandon": "retain"
    }
}
```

**Per aggiungere un hook del ciclo di vita di terminazione**  
Utilizza il comando [put-lifecycle-hook](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-lifecycle-hook.html):

```
aws autoscaling put-lifecycle-hook \
--lifecycle-hook-name my-termination-hook \
--auto-scaling-group-name my-asg \
--lifecycle-transition autoscaling:EC2_INSTANCE_TERMINATING \
--default-result ABANDON \
--heartbeat-timeout 300
```

------

# Gestisci le istanze conservate
<a name="manage-retained-instances"></a>

 Monitora e controlla le istanze Amazon EC2 che sono state spostate in uno stato mantenuto. Utilizza i CloudWatch parametri per tenere traccia delle istanze mantenute, quindi interrompi manualmente le istanze conservate dopo aver completato le azioni personalizzate. 

 Le istanze conservate non vengono conteggiate ai fini della capacità desiderata del gruppo Amazon EC2 Auto Scaling. Quando un'istanza entra in uno stato mantenuto, Auto Scaling avvia un'istanza sostitutiva per mantenere la capacità desiderata. Ad esempio, supponiamo che il gruppo Auto Scaling abbia una capacità desiderata di 10. Quando un'istanza entra nello `Terminating:Retained` stato, Auto Scaling avvia un'istanza sostitutiva per mantenere la capacità desiderata di 10. Ora hai 11 istanze in esecuzione in totale: 10 nel gruppo attivo più 1 istanza conservata. I costi standard di Amazon EC2 per tutte le 11 istanze verranno applicati fino alla chiusura manuale dell'istanza mantenuta. 

## Stati del ciclo di vita delle istanze conservate
<a name="instance-lifecyle-states-of-retained-instances"></a>

 Scopri come le istanze passano da uno stato all'altro del ciclo di vita quando vengono utilizzate le policy relative al ciclo di vita delle istanze. Le istanze seguono un percorso specifico dalla cessazione normale alla conservazione fino alla chiusura finale. 

*Quando viene attivata la conservazione, le istanze passano attraverso questi stati:*

1. `Terminating`- Inizia la normale cessazione

1. `Terminating:Wait`- L'hook Lifecycle viene eseguito

1. `Terminating:Proceed`- Conclusione delle azioni relative al ciclo di vita (con esito positivo o negativo)

1. `Terminating:Retained`- Hook fallisce, istanza conservata per l'intervento manuale

Le istanze Warm Pool utilizzano percorsi di stato del ciclo di vita diversi a seconda dello scenario:

*Ridimensionamento delle istanze fino al pool caldo:*

1. `Warmed:Pending`- Inizia la normale transizione dalla piscina calda

1. `Warmed:Pending:Wait`- L'hook Lifecycle viene eseguito

1. `Warmed:Pending:Proceed`- Conclusione delle azioni relative al ciclo di vita (con esito positivo o negativo)

1. `Warmed:Pending:Retained`- Hook fallisce, istanza conservata per l'intervento manuale

*Istanze che vengono chiuse dal pool caldo:*

1. `Warmed:Terminating`- Inizia la normale terminazione

1. `Warmed:Terminating:Wait`- L'hook Lifecycle viene eseguito

1. `Warmed:Terminating:Proceed`- Conclusione delle azioni relative al ciclo di vita (con esito positivo o negativo)

1. `Warmed:Terminating:Retained`- Hook fallisce, istanza conservata per l'intervento manuale

## Monitora le istanze conservate
<a name="monitor-retained-instances"></a>

 Poiché le istanze Amazon EC2 conservate comportano costi e richiedono un intervento manuale, il loro monitoraggio è essenziale. Amazon EC2 Auto Scaling CloudWatch fornisce diversi parametri per tenere traccia delle istanze conservate. 

Abilita le metriche di gruppo per tenere traccia delle istanze conservate:

```
aws autoscaling enable-metrics-collection \
--auto-scaling-group-name my-asg \
--metrics GroupTerminatingRetainedInstances
```

Le metriche disponibili sono:
+  `GroupTerminatingRetainedInstances`mostra il numero di istanze nello `Terminating:Retained` stato. 
+  `GroupTerminatingRetainedCapacity`mostra le unità di capacità rappresentate dalle istanze nello `Terminating:Retained` stato. 
+  `WarmPoolTerminatingRetainedCapacity`tiene traccia delle istanze conservate che terminano dal pool caldo. 
+  `WarmPoolPendingRetainedCapacity`tiene traccia delle istanze conservate che tornano al pool caldo. 

 Puoi anche controllare le attività di scaling del tuo gruppo Amazon EC2 Auto Scaling per capire perché le istanze sono state mantenute. Cerca le attività di terminazione con messaggi relativi al motivo `StatusCode: Cancelled` e allo stato che indicano gli errori degli hook del ciclo di vita: 

```
aws autoscaling describe-scaling-activities \
--auto-scaling-group-name my-asg
```

 Ti consigliamo di creare CloudWatch allarmi in base a queste metriche per avvisarti quando le istanze entrano in uno stato mantenuto. Questo ti aiuta a tenere traccia delle implicazioni sui costi e ti assicura di non dimenticare di ripulire le istanze che richiedono un intervento manuale. 

## Termina le istanze conservate
<a name="terminate-retained-instances"></a>

Dopo aver completato le azioni personalizzate, interrompi le istanze conservate chiamando l'API: [ TerminateInstanceInAutoScalingGroup](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_TerminateInstanceInAutoScalingGroup.html) 

```
aws autoscaling terminate-instance-in-auto-scaling-group \
--instance-id i-1234567890abcdef0 \
--no-should-decrement-desired-capacity
```

# Recupero dello stato del ciclo di vita di destinazione tramite i metadati dell'istanza
<a name="retrieving-target-lifecycle-state-through-imds"></a>

Ogni istanza Auto Scaling avviata passa attraverso diversi stati del ciclo di vita. Per richiamare operazioni personalizzate dall’interno di un’istanza che esegue operazioni su specifici passaggi allo stato del ciclo di vita specifico, devi recuperare lo stato del ciclo di vita di destinazione tramite i metadati dell’istanza. 

Ad esempio, potrebbe essere necessario un meccanismo per rilevare la terminazione dell'istanza dall'interno dell'istanza per eseguire del codice sull'istanza prima che venga terminata. Puoi farlo scrivendo il codice che esamina lo stato del ciclo di vita di un'istanza direttamente dall'istanza. Se desidero continuare, puoi quindi aggiungere un hook del ciclo di vita al gruppo con dimensionamento automatico per mantenere l'istanza in esecuzione fino all'invio del comando **complete-lifecycle-action** da parte del codice. 

Il ciclo di vita dell'istanza Auto Scaling ha due stati stabili primari, `InService` e `Terminated`, e due stati stabili secondari, `Detached` e `Standby`. Se utilizzi un warm pool, il ciclo di vita ha quattro stati stabili aggiuntivi: `Warmed:Hibernated`, `Warmed:Running`, `Warmed:Stopped` e `Warmed:Terminated`.

Quando un'istanza si prepara a passare a uno degli stati stabili precedenti, Amazon EC2 Auto Scaling aggiorna il valore dell'elemento di metadati dell'istanza `autoscaling/target-lifecycle-state`. Per ottenere lo stato del ciclo di vita di destinazione dall'interno dell'istanza, è necessario utilizzare il servizio di metadati di istanza per recuperarlo dai metadati dell'istanza. 

**Nota**  
I *metadati dell'istanza* sono dati relativi a un'istanza Amazon EC2 che le applicazioni possono utilizzare per interrogare l'istanza. Il *servizio di metadati di istanza* è un componente su istanza utilizzato dal codice locale per accedere ai metadati dell'istanza. Il codice locale può includere script di dati utente o applicazioni in esecuzione sull'istanza.

Il codice locale può accedere ai metadati dell'istanza da un'istanza in esecuzione utilizzando uno dei due metodi: Instance Metadata Service Version 1 (IMDSv1) o Instance Metadata Service Version 2 (). IMDSv2 IMDSv2utilizza richieste orientate alla sessione e mitiga diversi tipi di vulnerabilità che potrebbero essere utilizzate per tentare di accedere ai metadati dell'istanza. Per informazioni dettagliate su questi due metodi, consulta [Use IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html) in the *Amazon EC2 User Guide*.

------
#### [ IMDSv2 ]

```
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/autoscaling/target-lifecycle-state
```

------
#### [ IMDSv1 ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/autoscaling/target-lifecycle-state
```

------

Di seguito è riportato un output di esempio.

```
InService
```

Lo stato del ciclo di vita di destinazione è lo stato a cui l'istanza sta passando. Lo stato del ciclo di vita corrente è lo stato in cui si trova l'istanza. I due stati possono coincidere quando l'operazione del ciclo di vita viene completata e l'istanza termina la transizione allo stato del ciclo di vita di destinazione. Non è possibile recuperare lo stato del ciclo di vita corrente dell'istanza dai metadati dell'istanza.

Amazon EC2 Auto Scaling ha iniziato a generare lo stato del ciclo di vita di destinazione il 10 marzo 2022. Se l'istanza passa a uno degli stati del ciclo di vita di destinazione dopo tale data, l'elemento dello stato del ciclo di vita di destinazione è presente nei metadati dell'istanza. In caso contrario, non è presente e ricevi un errore HTTP 404.

*Per ulteriori informazioni sul recupero dei metadati dell'istanza, consulta [Recupera i metadati dell'istanza nella Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html) User Guide.*

Consulta la sezione [Tutorial: utilizza lo script di dati e i metadati dell'istanza per recuperare lo stato del ciclo di vita](tutorial-lifecycle-hook-instance-metadata.md) per un tutorial che mostra come creare un hook del ciclo di vita con un'operazione personalizzata in uno script di dati utente che utilizza lo stato del ciclo di vita di destinazione.

**Importante**  
Per assicurarti di poter richiamare un'azione personalizzata il prima possibile, il codice locale deve interrogare spesso IMDS e riprovare a correggere gli errori.

# Aggiungi gli hook del ciclo di vita al tuo gruppo Auto Scaling
<a name="adding-lifecycle-hooks"></a>

Per mettere le istanze Auto Scaling in uno stato di attesa ed eseguire operazioni personalizzate su di esse, puoi aggiungere hook del ciclo di vita al gruppo con scalabilità automatica. Le operazioni personalizzate vengono eseguite all'avvio o prima della fine delle istanze. Le istanze rimarranno in stato di attesa finché non avrai completato l’operazione del ciclo di vita oppure finché il periodo di timeout non sarà terminato.

Dopo aver creato un gruppo Auto Scaling da Console di gestione AWS, è possibile aggiungervi uno o più hook del ciclo di vita, fino a un totale di 50 hook del ciclo di vita. Puoi anche utilizzare AWS CLI CloudFormation, o un SDK per aggiungere hook del ciclo di vita a un gruppo Auto Scaling durante la creazione.

Per impostazione predefinita, quando aggiungi un hook del ciclo di vita nella console, Amazon EC2 Auto Scaling invia notifiche sugli eventi del ciclo di vita ad Amazon. EventBridge L'utilizzo EventBridge o di uno script di dati utente è una best practice consigliata. Per creare un hook del ciclo di vita che invii notifiche direttamente ad Amazon SNS, Amazon SQS AWS Lambda oppure puoi usare [put-lifecycle-hook](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-lifecycle-hook.html)il comando, come mostrato negli esempi in questo argomento.

**Topics**
+ [Come aggiungere hook del ciclo di vita (console)](#adding-lifecycle-hooks-console)
+ [Aggiunta di hook del ciclo di vita (AWS CLI)](#adding-lifecycle-hooks-aws-cli)

## Come aggiungere hook del ciclo di vita (console)
<a name="adding-lifecycle-hooks-console"></a>

Per aggiungere un hook del ciclo di vita a un gruppo con dimensionamento automatico, segui questa procedura. Per aggiungere hook del ciclo di vita per il dimensionamento orizzontale (avvio delle istanze) o il dimensionamento verticale (terminazione delle istanze o restituzione a un pool caldo), devi creare due hook separati. 

Prima di iniziare, assicurati di avere impostato un'operazione personalizzata, a seconda delle necessità, come descritto in [Preparazione all'aggiunta di un hook del ciclo di vita al gruppo con scalabilità automatica](prepare-for-lifecycle-notifications.md).

**Per aggiungere un hook del ciclo di vita per il dimensionamento orizzontale**

1. Apri la console Amazon EC2 all'indirizzo [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)e scegli **Auto Scaling** Groups dal pannello di navigazione.

1. Seleziona la casella di controllo accanto al gruppo con dimensionamento automatico. Si aprirà un riquadro diviso nella parte inferiore della pagina. 

1. Nella scheda **Instance management (Gestione istanze)** in **Lifecycle hooks (Hook del ciclo di vita)**, scegliere **Create lifecycle hook (Crea hook del ciclo di vita)**.

1. Per definire un hook del ciclo di vita per il dimensionamento orizzontale (avvio delle istanze), procedi come descritto di seguito:

   1. Per **Lifecycle hook name (Nome hook del ciclo di vita)** specificare un nome per l'hook del ciclo di vita.

   1. In **Lifecycle transition (Transizione ciclo di vita)**, scegli **Instance launch (Avvia istanza)**.

   1. Per **Timeout heartbeat**, specifica quanto a lungo, in secondi, le istanze debbano rimanere in uno stato di attesa durante il dimensionamento orizzontale prima che l'hook scada. L'intervallo è tra `30` e `7200` secondi. L'impostazione di un periodo di timeout esteso fornisce più tempo per il completamento dell'operazione personalizzata. Quindi, se finisci prima della fine del periodo di timeout, invia il [complete-lifecycle-action](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/complete-lifecycle-action.html)comando per consentire all'istanza di passare allo stato successivo. 

   1. Per **Default result** (Risultato di default), specifica l'operazione da intraprendere quando gli hook del ciclo di vita scadono o si verifica un errore imprevisto. Puoi scegliere di **CONTINUARE** o **ABBANDONARE**.
      + Se scegli **CONTINUA**, il gruppo con dimensionamento automatico può procedere con qualsiasi altro hook del ciclo di vita e quindi mettere l'istanza in servizio.
      + Se scegli **ABBANDONA**, il gruppo con dimensionamento automatico arresta tutte le operazioni rimanenti e termina l'istanza immediatamente.

   1. (Facoltativo) In **Metadati delle notifiche**, specifica le altre informazioni che desideri includere ogni volta che Dimensionamento automatico Amazon EC2 invia un messaggio alla destinazione di notifica. 

1. Scegli **Create** (Crea).

**Per aggiungere un hook del ciclo di vita per il dimensionamento verticale**

1. Scegli **Crea hook del ciclo di vita** per continuare da dove avevi interrotto dopo aver creato un hook del ciclo di vita per il dimensionamento orizzontale.

1. Per definire un hook del ciclo di vita per il dimensionamento (istanze che terminano o ritornano a un pool caldo), procedi come segue:

   1. Per **Lifecycle hook name (Nome hook del ciclo di vita)** specificare un nome per l'hook del ciclo di vita.

   1. In **Lifecycle transition (Transizione ciclo di vita)** scegli **Instance terminate (Terminazione istanza)**. 

   1. Per **Timeout heartbeat**, specifica quanto a lungo, in secondi, le istanze debbano rimanere in uno stato di attesa durante il dimensionamento orizzontale prima che l'hook scada. Ti consigliamo un breve periodo di timeout, `30` da 1 a `120` 2 secondi, a seconda del tempo necessario per eseguire le attività finali, come ad esempio estrarre i log EC2. CloudWatch

   1. In **Default result (Risultato di default)**, specifica l'operazione che il gruppo con scalabilità automatica deve intraprendere una volta scaduto il timeout o se si verifica un errore imprevisto. Sia **ABANDON (ABBANDONA)** sia **CONTINUE (CONTINUA)** permettono all'istanza di terminare. 
      + Se scegli **CONTINUE (CONTINUA)**, il gruppo con scalabilità automatica può procedere con qualsiasi operazione restante, ad esempio altri hook del ciclo di vita, prima della terminazione. 
      + Se scegli **ABBANDONA**, il gruppo con dimensionamento automatico termina l'istanza immediatamente. 

   1. (Facoltativo) In **Metadati delle notifiche**, specifica le altre informazioni che desideri includere ogni volta che Dimensionamento automatico Amazon EC2 invia un messaggio alla destinazione di notifica.

1. Scegli **Create** (Crea).

## Aggiunta di hook del ciclo di vita (AWS CLI)
<a name="adding-lifecycle-hooks-aws-cli"></a>

Creare e aggiornare hook del ciclo di vita utilizzando il comando [put-lifecycle-hook](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-lifecycle-hook.html).

Per eseguire un'operazione di aumento orizzontale, utilizza il comando seguente.

```
aws autoscaling put-lifecycle-hook --lifecycle-hook-name my-launch-hook  \
  --auto-scaling-group-name my-asg \
  --lifecycle-transition autoscaling:EC2_INSTANCE_LAUNCHING
```

Per eseguire un'operazione di riduzione orizzontale, utilizza invece il comando seguente.

```
aws autoscaling put-lifecycle-hook --lifecycle-hook-name my-termination-hook  \
  --auto-scaling-group-name my-asg \
  --lifecycle-transition autoscaling:EC2_INSTANCE_TERMINATING
```

Per ricevere notifiche utilizzando Amazon SNS o Amazon SQS, aggiungi le opzioni `--notification-target-arn` e `--role-arn`. Per ricevere notifiche utilizzando AWS Lambda, aggiungi il. `--notification-target-arn`

Nell'esempio seguente viene creato un hook del ciclo di vita che specifica un argomento SNS denominato `my-sns-topic` come destinazione di notifica.

```
aws autoscaling put-lifecycle-hook --lifecycle-hook-name my-termination-hook  \
  --auto-scaling-group-name my-asg \
  --lifecycle-transition autoscaling:EC2_INSTANCE_TERMINATING \
  --notification-target-arn arn:aws:sns:region:123456789012:my-sns-topic \
  --role-arn arn:aws:iam::123456789012:role/my-notification-role
```

L'argomento riceve una notifica di test con la seguente coppia chiave-valore:

```
"Event": "autoscaling:TEST_NOTIFICATION"
```

Per impostazione predefinita, il [put-lifecycle-hook](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-lifecycle-hook.html)comando crea un hook del ciclo di vita con un timeout del battito cardiaco di `3600` secondi (un'ora). 

Per modificare il timeout dell'heartbeat per un hook del ciclo di vita esistente, aggiungere l'opzione `--heartbeat-timeout`, come mostrato nell'esempio seguente.

```
aws autoscaling put-lifecycle-hook --lifecycle-hook-name my-termination-hook \
  --auto-scaling-group-name my-asg --heartbeat-timeout 120
```

Se un'istanza è già in stato di attesa, puoi impedire il timeout del lifecycle hook registrando un heartbeat, utilizzando il comando CLI. [record-lifecycle-action-heartbeat](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/record-lifecycle-action-heartbeat.html) Ciò estende il periodo di timeout del valore di timeout specificato al momento della creazione dell'hook del ciclo di vita. Se finisci prima della fine del periodo di timeout, puoi inviare il comando [complete-lifecycle-action](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/complete-lifecycle-action.html)CLI per consentire all'istanza di passare allo stato successivo. Per maggiori informazioni ed esempi, consulta [Completa un'azione del ciclo di vita in un gruppo Auto Scaling](completing-lifecycle-hooks.md).

# Completa un'azione del ciclo di vita in un gruppo Auto Scaling
<a name="completing-lifecycle-hooks"></a>

Quando un gruppo con scalabilità automatica risponde a un evento del ciclo di vita, mette l'istanza in stato di attesa e invia una notifica di evento. Mentre l'istanza è in stato di attesa, è possibile eseguire un'operazione personalizzata.

Completare l'azione del ciclo di vita con il risultato di `CONTINUE` è utile se termini prima della scadenza del periodo di timeout. Se non completi l'azione del ciclo di vita, l'hook del ciclo di vita passa allo stato specificato per **Risultato predefinito** al termine del periodo di timeout.

**Topics**
+ [Completare un'operazione del ciclo di vita (manuale)](#completing-lifecycle-hooks-aws-cli)
+ [Completare un'operazione del ciclo di vita (automatico)](#completing-lifecycle-hooks-automatic)

## Completare un'operazione del ciclo di vita (manuale)
<a name="completing-lifecycle-hooks-aws-cli"></a>

La procedura seguente è relativa all'interfaccia della riga di comando e non è supportata nella console. Le informazioni che devono essere sostituite, ad esempio l'ID dell'istanza o il nome di un gruppo con scalabilità automatica, vengono visualizzate in corsivo. 

**Completamento di un'operazione del ciclo di vita (AWS CLI)**

1. Se necessiti di più tempo per completare l'operazione personalizzata, utilizza il comando [record-lifecycle-action-heartbeat](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/record-lifecycle-action-heartbeat.html) per riavviare il periodo di timeout e mantenere l'istanza in uno stato di attesa. Ad esempio, se il periodo di timeout è di un'ora e si chiama questo comando dopo 30 minuti, l'istanza rimane in uno stato di attesa per un'ulteriore ora, ossia per un totale di 90 minuti. 

   Puoi specificare il token di operazione del ciclo di vita ricevuto con la [notifica](prepare-for-lifecycle-notifications.md#notification-message-example), come illustrato nel comando seguente.

   ```
   aws autoscaling record-lifecycle-action-heartbeat --lifecycle-hook-name my-launch-hook \
     --auto-scaling-group-name my-asg --lifecycle-action-token bcd2f1b8-9a78-44d3-8a7a-4dd07d7cf635
   ```

   In alternativa, puoi specificare l'ID dell'istanza ricevuta con la [notifica](prepare-for-lifecycle-notifications.md#notification-message-example) come mostrato nel comando seguente.

   ```
   aws autoscaling record-lifecycle-action-heartbeat --lifecycle-hook-name my-launch-hook \
     --auto-scaling-group-name my-asg --instance-id i-1a2b3c4d
   ```

1. Se completate l'azione personalizzata prima della fine del periodo di timeout, utilizzate il [complete-lifecycle-action](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/complete-lifecycle-action.html)comando in modo che il gruppo Auto Scaling possa continuare ad avviare o terminare l'istanza. Puoi specificare il token dell'operazione del ciclo di vita, come mostrato nel comando seguente.

   ```
   aws autoscaling complete-lifecycle-action --lifecycle-action-result CONTINUE \
     --lifecycle-hook-name my-launch-hook --auto-scaling-group-name my-asg \
     --lifecycle-action-token bcd2f1b8-9a78-44d3-8a7a-4dd07d7cf635
   ```

   In alternativa, puoi specificare l'ID dell'istanza, come mostrato nel comando seguente.

   ```
   aws autoscaling complete-lifecycle-action --lifecycle-action-result CONTINUE \
     --instance-id i-1a2b3c4d --lifecycle-hook-name my-launch-hook \
     --auto-scaling-group-name my-asg
   ```

## Completare un'operazione del ciclo di vita (automatico)
<a name="completing-lifecycle-hooks-automatic"></a>

Se disponi di uno script di dati utente che configura le istanze dopo l'avvio, non è necessario completare manualmente le operazioni del ciclo di vita. È possibile aggiungere il [complete-lifecycle-action](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/complete-lifecycle-action.html)comando allo script. Lo script può recuperare l'ID dell'istanza dai metadati dell'istanza e segnalare ad Amazon EC2 Auto Scaling quando gli script di bootstrap sono stati completati correttamente. 

Se non lo stai già facendo, aggiorna lo script per recuperare l'ID istanza dai metadati dell'istanza. Per ulteriori informazioni, consulta [Recupera i metadati dell'istanza nella Guida](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html) per l'utente di *Amazon EC2*.

Se utilizzi Lambda, puoi anche impostare un callback nel codice della funzione per consentire al ciclo di vita dell'istanza di procedere se l'operazione personalizzata viene eseguita correttamente. Per ulteriori informazioni, consulta [Tutorial : Configurazione di un hook del ciclo di vita che richiama una funzione Lambda](tutorial-lifecycle-hook-lambda.md).

# Tutorial: utilizza lo script di dati e i metadati dell'istanza per recuperare lo stato del ciclo di vita
<a name="tutorial-lifecycle-hook-instance-metadata"></a>

Un modo comune per creare azioni personalizzate per i lifecycle hook consiste nell'utilizzare le notifiche che Amazon EC2 Auto Scaling invia ad altri servizi, come Amazon. EventBridge Tuttavia, puoi evitare di dover creare un'infrastruttura aggiuntiva utilizzando invece uno script di dati utente per spostare il codice che configura le istanze e completa l'operazione del ciclo di vita nelle istanze stesse. 

Il seguente tutorial illustra le nozioni di base su come utilizzare uno script di dati utente e i metadati dell'istanza. È possibile creare una configurazione di base del gruppo con scalabilità automatica con uno script di dati utente che legge lo [stato del ciclo di vita di destinazione](retrieving-target-lifecycle-state-through-imds.md) delle istanze del gruppo ed esegue un'operazione di callback in una fase specifica del ciclo di vita di un'istanza per continuare il processo di avvio.

La seguente illustrazione riassume il flusso di un evento di scalabilità orizzontale quando si utilizza uno script di dati utente per eseguire un'azione personalizzata. Dopo l'avvio di un'istanza, il ciclo di vita dell'istanza viene sospeso fino al completamento dell'hook del ciclo di vita, tramite timeout o facendo sì che Amazon EC2 Auto Scaling riceva un segnale di continuazione. 

![\[Il flusso per un evento di scalabilità orizzontale quando si utilizza uno script di dati utente per eseguire un'azione personalizzata.\]](http://docs.aws.amazon.com/it_it/autoscaling/ec2/userguide/images/lifecycle-hook-user-data-script.png)


**Topics**
+ [Passaggio 1: creazione di un ruolo IAM con autorizzazioni per completare le operazioni del ciclo di vita](#instance-metadata-create-iam-role)
+ [Passaggio 2: creazione di un modello di avvio e inclusione del ruolo IAM e di uno script di dati utente](#instance-metadata-create-hello-world-function)
+ [Passaggio 3: creazione di un gruppo con dimensionamento automatico](#instance-metadata-create-auto-scaling-group)
+ [Passaggio 4: aggiunta di un hook del ciclo di vita](#instance-metadata-add-lifecycle-hook)
+ [Passaggio 5: test e verifica della funzionalità](#instance-metadata-testing-hook)
+ [Fase 6: pulizia](#instance-metadata-lifecycle-hooks-tutorial-cleanup)
+ [Risorse correlate](#instance-metadata-lifecycle-hooks-tutorial-related-resources)

## Passaggio 1: creazione di un ruolo IAM con autorizzazioni per completare le operazioni del ciclo di vita
<a name="instance-metadata-create-iam-role"></a>

Quando utilizzi l'SDK AWS CLI o un AWS SDK per inviare un callback per completare le azioni del ciclo di vita, devi utilizzare un ruolo IAM con autorizzazioni per completare le azioni del ciclo di vita. 

**Come creare la policy**

1. Nella console IAM, apri [Policies (Policy)](https://console.aws.amazon.com/iam/home?#/policies), quindi seleziona **Create policy (Crea policy)**.

1. Scegli la scheda **JSON**.

1. Nella casella **Policy Document** (Documento della policy), copia e incolla il documento della policy seguente nella casella. Sostituiscilo **sample text**con il tuo numero di account e il nome del gruppo Auto Scaling che desideri creare ()**TestAutoScalingEvent-group**.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "autoscaling:CompleteLifecycleAction"
         ],
         "Resource": "arn:aws:autoscaling:*:123456789012:autoScalingGroup:*:autoScalingGroupName/TestAutoScalingEvent-group"
       }
     ]
   }
   ```

------

1. Scegli **Next (Successivo)**. 

1. In **Policy name** (Nome policy), inserisci **TestAutoScalingEvent-policy**. Scegli **Create Policy (Crea policy)**.

Dopo aver creato la policy, puoi creare un ruolo che la utilizzi.

**Come creare il ruolo**

1. Nel riquadro di navigazione sulla sinistra, scegliere **Roles (Ruoli)**.

1. Scegli **Crea ruolo**.

1. In **Seleziona tipo di entità attendibile**, scegli ** Servizio AWS **.

1. Per il tuo caso d'uso, scegli **EC2** quindi scegli **Successivo**. 

1. In **Aggiungi autorizzazioni**, scegli la politica che hai creato (**TestAutoScalingEvent-policy**). Quindi, seleziona **Successivo**. 

1. Nella pagina **Nome, revisione e creazione**, per **Nome ruolo**, inserisci **TestAutoScalingEvent-role** e scegli **Crea ruolo**. 

## Passaggio 2: creazione di un modello di avvio e inclusione del ruolo IAM e di uno script di dati utente
<a name="instance-metadata-create-hello-world-function"></a>

Crea un modello di avvio da utilizzare con un gruppo con scalabilità automatica. Includi il ruolo IAM creato e lo script di dati utente di esempio fornito.

**Per creare un modello di avvio**

1. Apri la pagina [Configurazioni di avvio](https://console.aws.amazon.com/ec2/v2/#LaunchTemplates) della console Amazon EC2.

1. Scegli **Crea modello di avvio**.

1. In **Launch template name (Nome del modello di) avvio**, inserisci **TestAutoScalingEvent-template**.

1. In **Auto Scaling guidance** (Guida Auto Scaling), seleziona la casella di controllo. 

1. Per **Application and OS Images (Amazon Machine Image)** (Immagini di applicazioni e SO (Amazon Machine Image)), scegli Amazon Linux 2 (HVM), tipo di volume SSD, 64 bit (x86) dall'elenco **Avvio rapido**. 

1. Per **Instance type** (Tipo di istanza), scegli un tipo di istanza Amazon EC2 (ad esempio, "t2.micro").

1. In **Advanced details** (Dettagli avanzati), espandi la sezione per visualizzare i campi. 

1. Per il **profilo dell'istanza IAM**, scegli il nome del profilo dell'istanza IAM del tuo ruolo IAM (**TestAutoScalingEvent-role**). Un profilo dell'istanza è un container per un ruolo IAM che permette ad Amazon EC2 di trasferire il ruolo IAM a un'istanza quando quest'ultima viene avviata.

   Se hai creato un ruolo IAM utilizzando la console IAM, la console ha creato automaticamente un profilo dell'istanza assegnandogli lo stesso nome del ruolo a cui corrisponde.

1. Nel campo **User data** (Dati utente), incolla lo script riportato di seguito. Sostituite il testo di esempio `group_name` con il nome del gruppo Auto Scaling che desiderate creare e `region` con quello che Regione AWS desiderate venga utilizzato dal gruppo Auto Scaling.

   ```
   #!/bin/bash
   
   function token {
       echo "X-aws-ec2-metadata-token: $(curl -X PUT 'http://169.254.169.254/latest/api/token' -H 'X-aws-ec2-metadata-token-ttl-seconds: 21600')"
   }
   
   function get_target_state {
       echo $(curl -H "$(token)" -s http://169.254.169.254/latest/meta-data/autoscaling/target-lifecycle-state)
   }
   
   function get_instance_id {
       echo $(curl -H "$(token)" -s http://169.254.169.254/latest/meta-data/instance-id)
   }
   
   function complete_lifecycle_action {
       instance_id=$(get_instance_id)
       group_name='TestAutoScalingEvent-group'
       region='us-west-2'
    
       echo $instance_id
       echo $region
       echo $(aws autoscaling complete-lifecycle-action \
         --lifecycle-hook-name TestAutoScalingEvent-hook \
         --auto-scaling-group-name $group_name \
         --lifecycle-action-result CONTINUE \
         --instance-id $instance_id \
         --region $region)
   }
   
   function main {
       while true
       do
           target_state=$(get_target_state)
           if [ \"$target_state\" = \"InService\" ]; then
               # Change hostname
               export new_hostname="${group_name}-$instance_id"
               hostname $new_hostname
               # Send callback
               complete_lifecycle_action
               break
           fi
           echo $target_state
           sleep 5
       done
   }
   
   main
   ```

   Questo script di dati utente d'esempio svolge le seguenti operazioni:
   + Chiama i metadati dell'istanza per recuperare lo stato del ciclo di vita di destinazione e l'ID dell'istanza dai metadati dell'istanza
   + Recupera ripetutamente lo stato del ciclo di vita di destinazione fino a quando non cambia in `InService`
   + Cambia il nome host dell'istanza anteponendo l'ID istanza al nome del gruppo con scalabilità automatica, se lo stato del ciclo di vita di destinazione è `InService`
   + Invia un callback chiamando il comando **complete-lifecycle-action** della CLI per segnalare ad Amazon EC2 Auto Scaling di `CONTINUE` (continuare) il processo di avvio di EC2

1. Scegli **Crea modello di avvio**.

1. Nella pagina di conferma, scegli **Crea gruppo con dimensionamento automatico)**.

**Nota**  
Per altri esempi che puoi usare come riferimento per lo sviluppo dello script dei dati utente, consulta il [GitHub repository](https://github.com/aws-samples/amazon-ec2-auto-scaling-group-examples) per Amazon EC2 Auto Scaling.

## Passaggio 3: creazione di un gruppo con dimensionamento automatico
<a name="instance-metadata-create-auto-scaling-group"></a>

Dopo avere creato il modello di avvio, crea un gruppo con scalabilità automatica.

**Creazione di un gruppo con scalabilità automatica**

1. Nella pagina **Choose launch template or configuration** (Scegli il modello o la configurazione di avvio), per **Auto Scaling group name** (Nome gruppo con scalabilità automatica) inserisci un nome per il gruppo con scalabilità automatica (**TestAutoScalingEvent-group**).

1. Scegli **Next** (Successivo) per andare alla pagina **Choose instance launch options** (Scegli le opzioni di avvio dell'istanza). 

1. In **Network** (Rete), scegli un VPC.

1. Per **Availability Zones and subnets** (Zone di disponibilità e sottoreti), scegli una o più sottoreti da una o più zone di disponibilità.

1. Nella sezione **Instance type requirements** (Requisiti del tipo di istanza), utilizza l'impostazione di default per semplificare questo passaggio. (Non sovrascrivere il modello di avvio.) Per questo tutorial, avvierai solo un'istanza on demand utilizzando il tipo di istanza specificato nel modello di avvio. 

1. Scegli **Skip to review** (Passa alla revisione) nella parte inferiore della schermata. 

1. Nella pagina **Review** (Revisione), rivedi le impostazioni del gruppo con scalabilità automatica, quindi scegli **Create Auto Scaling group** (Crea gruppo con scalabilità automatica).

## Passaggio 4: aggiunta di un hook del ciclo di vita
<a name="instance-metadata-add-lifecycle-hook"></a>

Aggiungi un hook del ciclo di vita per mantenere l'istanza in uno stato di attesa fino al completamento dell'operazione del ciclo di vita.

**Per aggiungere un hook del ciclo di vita**

1. Apri la [pagina Gruppi con dimensionamento automatico](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) nella console Amazon EC2.

1. Seleziona la casella di controllo accanto al gruppo con dimensionamento automatico. Si aprirà un riquadro diviso nella parte inferiore della pagina. 

1. Nel riquadro inferiore, nella scheda **Instance management (Gestione istanze)** in **Lifecycle hooks (Hook del ciclo di vita)**, scegli **Create lifecycle hook (Crea hook del ciclo di vita)**.

1. Per definire un hook del ciclo di vita per il dimensionamento orizzontale (avvio delle istanze), procedi come descritto di seguito:

   1. In **Lifecycle hook name (Nome hook del ciclo di vita)**, inserisci**TestAutoScalingEvent-hook**.

   1. In **Lifecycle transition (Transizione ciclo di vita)**, scegli **Instance launch (Avvia istanza)**.

   1. In **Heartbeat timeout** (Timeout dell'heartbeat), inserisci **300** per il numero di secondi di attesa del callback dallo script di dati utente.

   1. In **Default result (Risultato di default)**, scegli **ABANDON (ABBANDONA)**. Se l'hook va in timeout senza ricevere un callback dallo script dei dati utente, il gruppo con scalabilità automatica termina la nuova istanza.

   1. (Facoltativo) Lascia vuoto il campo **Notification metadata** (Metadati della notifica).

1. Scegli **Create** (Crea).

## Passaggio 5: test e verifica della funzionalità
<a name="instance-metadata-testing-hook"></a>

Per effettuare il test della funzionalità, aggiorna il gruppo con scalabilità automatica aumentando di 1 la capacità desiderata del gruppo con scalabilità automatica. Lo script dei dati utente viene eseguito e inizia a controllare lo stato del ciclo di vita di destinazione dell'istanza subito dopo l'avvio dell'istanza. Lo script modifica il nome host e invia un'operazione di callback quando lo stato del ciclo di vita di destinazione è `InService`. Solitamente, il completamento di questo processo richiede solo pochi secondi.

**Per aumentare le dimensioni del gruppo con dimensionamento automatico**

1. Apri la [pagina Gruppi con dimensionamento automatico](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) nella console Amazon EC2.

1. Seleziona la casella di controllo accanto al gruppo con dimensionamento automatico. Puoi visualizzare i dettagli in un pannello inferiore mentre continui a visualizzare le righe superiori del pannello superiore. 

1. Nel riquadro inferiore, nella scheda **Details (Dettagli)** scegli **Group details (Dettagli gruppo)**, **Edit (Modifica)**.

1. Per **Desired capacity (Capacità desiderata)**, aumentare il valore corrente di 1.

1. Scegliere **Aggiorna**. Durante l'avvio o la terminazione di un'istanza, la colonna **Status (Stato)** visualizza lo stato *Updating capacity (Aggiornamento della capacità*. 

Dopo avere aumentato la capacità desiderata, puoi verificare che l'istanza sia stata avviata correttamente e che non sia terminata dalla descrizione delle attività di dimensionamento. 

**Come visualizzare le attività di dimensionamento**

1. Dalla pagina **Auto Scaling groups (Gruppi Auto Scaling)**, seleziona il gruppo.

1. Nella scheda **Activity (Attività)** in **Activity history (Cronologia attività)**, la colonna **Status (Stato)** indica se il gruppo con scalabilità automatica ha avviato correttamente le istanze. 

1. Se lo script di dati utente non riesce, al termine del periodo di timeout viene visualizzata un'attività di dimensionamento con uno stato di `Canceled` e un messaggio di stato di `Instance failed to complete user's Lifecycle Action: Lifecycle Action with token e85eb647-4fe0-4909-b341-a6c42EXAMPLE was abandoned: Lifecycle Action Completed with ABANDON Result`.

## Fase 6: pulizia
<a name="instance-metadata-lifecycle-hooks-tutorial-cleanup"></a>

Se hai finito di utilizzare le risorse create appositamente per il tutorial, segui questa procedura per eliminarle.

**Come eliminare l'hook del ciclo di vita**

1. Apri la [pagina Gruppi con dimensionamento automatico](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) nella console Amazon EC2.

1. Seleziona la casella di controllo accanto al gruppo con dimensionamento automatico.

1. Nella scheda **Instance management (Gestione istanze)** in **Lifecycle hooks (Hook del ciclo di vita)**, scegli Create lifecycle hook (Crea hook del ciclo di vita)(`TestAutoScalingEvent-hook`).

1. Scegli **Actions** (Operazioni), **Delete** (Elimina).

1. Per confermare, scegli di nuovo **Delete (Elimina)**.

**Per eliminare il modello di avvio**

1. Apri la pagina [Configurazioni di avvio](https://console.aws.amazon.com/ec2/v2/#LaunchTemplates) della console Amazon EC2.

1. Seleziona il modello di avvio (`TestAutoScalingEvent-template`), quindi scegli **Actions** (Operazioni), **Delete template** (Elimina modello).

1. Quando viene richiesta la conferma, digitare **Delete** per confermare l'eliminazione del modello di avvio specificato e scegliere **Delete** (Elimina).

Se hai finito di lavorare con il gruppo con scalabilità automatica di esempio, eliminalo. Puoi anche eliminare il ruolo IAM e la policy di autorizzazione creati.

**Per eliminare il gruppo con scalabilità automatica**

1. Apri la [pagina Gruppi con dimensionamento automatico](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) nella console Amazon EC2.

1. Seleziona la casella di controllo accanto al gruppo con scalabilità automatica (`TestAutoScalingEvent-group`), quindi scegli **Delete** (Elimina). 

1. Quando viene richiesta la conferma, digita **delete** per confermare l'eliminazione del gruppo con dimensionamento automatico specificato e scegli **Elimina**.

   Un'icona di caricamento nella colonna **Nome** indica che il gruppo con dimensionamento automatico è in fase di eliminazione. Sono necessari alcuni minuti per terminare le istanze ed eliminare il gruppo. 

**Per eliminare il ruolo IAM**

1. Apri la [pagina Roles (Ruoli)](https://console.aws.amazon.com/iam/home?#/roles) della console IAM.

1. Seleziona il ruolo della funzione (`TestAutoScalingEvent-role`).

1. Scegli **Elimina**.

1. Quando viene richiesta la conferma, digita il nome del ruolo e scegli **Delete** (Elimina).

**Come eliminare la policy IAM**

1. Apri la pagina [Policies (Policy)](https://console.aws.amazon.com/iam/home?#/policies) nella console IAM.

1. Seleziona la policy creata (`TestAutoScalingEvent-policy`).

1. Scegli **Operazioni** > **Elimina**.

1. Quando viene richiesta la conferma, digita il nome della policy e scegli **Delete** (Elimina).

## Risorse correlate
<a name="instance-metadata-lifecycle-hooks-tutorial-related-resources"></a>

I seguenti argomenti correlati possono essere utili per lo sviluppo di codice che richiama azioni sulle istanze in base ai dati disponibili nei metadati dell'istanza.
+ [Recupero dello stato del ciclo di vita di destinazione tramite i metadati dell'istanza](retrieving-target-lifecycle-state-through-imds.md). Questa sezione descrive lo stato del ciclo di vita per altri casi d'uso, come la chiusura dell'istanza.
+ [Come aggiungere hook del ciclo di vita (console)](adding-lifecycle-hooks.md#adding-lifecycle-hooks-console). Questa procedura mostra come aggiungere lifecycle hook sia per il dimensionamento orizzontale (avvio delle istanze) che per il dimensionamento verticale (istanze che terminano o ritornano a un pool caldo).
+ [Categorie di metadati delle istanze](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html#instancedata-data-categories) nella *Amazon EC2* User Guide. Questo argomento elenca tutte le categorie di metadati delle istanze che puoi utilizzare per richiamare azioni sulle istanze EC2.

Per un tutorial che mostra come usare Amazon per EventBridge creare regole che richiamano le funzioni Lambda in base agli eventi che si verificano alle istanze del tuo gruppo Auto Scaling, consulta. [Tutorial : Configurazione di un hook del ciclo di vita che richiama una funzione Lambda](tutorial-lifecycle-hook-lambda.md)

# Tutorial : Configurazione di un hook del ciclo di vita che richiama una funzione Lambda
<a name="tutorial-lifecycle-hook-lambda"></a>

In questo esercizio, crei una EventBridge regola Amazon che include uno schema di filtro che, se abbinato, richiama una AWS Lambda funzione come obiettivo della regola. Forniamo il modello di filtro e il codice di funzione di esempio da utilizzare. 

Se tutto è configurato correttamente, al termine di questo tutorial, la funzione Lambda eseguirà un'operazione personalizzata all'avvio delle istanze. L'azione personalizzata registra semplicemente l'evento nel flusso di log CloudWatch Logs associato alla funzione Lambda.

Se questa operazione ha esito positivo, la funzione Lambda esegue anche un callback per consentire al ciclo di vita dell'istanza di procedere, ma consente all'istanza di abbandonare l'avvio e terminare se l'operazione fallisce.

La seguente illustrazione riassume il flusso di un evento di scalabilità orizzontale quando si utilizza una funzione Lambda per eseguire un'azione personalizzata. Dopo l'avvio di un'istanza, il ciclo di vita dell'istanza viene sospeso fino al completamento dell'hook del ciclo di vita, tramite timeout o facendo sì che Amazon EC2 Auto Scaling riceva un segnale di continuazione. 

![\[Il flusso per un evento di scalabilità orizzontale quando si utilizza una funzione Lambda per eseguire un'azione personalizzata.\]](http://docs.aws.amazon.com/it_it/autoscaling/ec2/userguide/images/lifecycle-hook-lambda-function.png)


**Nota**  
A seconda del caso d'uso, puoi configurare un lifecycle hook seguendo i passaggi seguenti e creando una regola. EventBridge In alternativa, puoi utilizzare una funzione Lambda per configurare direttamente un lifecycle hook senza creare una regola. EventBridge 

**Topics**
+ [Prerequisiti](#lambda-hello-world-tutorial-prerequisites)
+ [Passaggio 1: creazione di un ruolo IAM con autorizzazioni per completare le operazioni del ciclo di vita](#lambda-create-iam-role)
+ [Passaggio 2: creazione di una funzione Lambda](#lambda-create-hello-world-function)
+ [Fase 3: Creare una regola EventBridge](#lambda-create-rule)
+ [Passaggio 4: aggiunta di un hook del ciclo di vita](#lambda-add-lifecycle-hook)
+ [Passaggio 5: test e verifica dell'evento](#lambda-testing-hook-notifications)
+ [Fase 6: pulizia](#lambda-lifecycle-hooks-tutorial-cleanup)
+ [Risorse correlate](#lambda-lifecycle-hooks-tutorial-related-resources)

## Prerequisiti
<a name="lambda-hello-world-tutorial-prerequisites"></a>

Prima di iniziare questa esercitazione, crea un gruppo con scalabilità automatica, se non hai già uno. Per creare un gruppo con dimensionamento automatico, apri la [ pagina dei gruppi Auto Scaling](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) nella console Amazon EC2 e scegli **Crea gruppo con dimensionamento automatico**.

## Passaggio 1: creazione di un ruolo IAM con autorizzazioni per completare le operazioni del ciclo di vita
<a name="lambda-create-iam-role"></a>

Prima di creare una funzione Lambda, è necessario innanzitutto creare un ruolo di esecuzione e una policy di autorizzazioni per permettere a Lambda di completare gli hook del ciclo di vita.

**Come creare la policy**

1. Nella console IAM, apri [Policies (Policy)](https://console.aws.amazon.com/iam/home?#/policies), quindi seleziona **Create policy (Crea policy)**.

1. Scegli la scheda **JSON**.

1. Nella casella **Documento di policy**, incolla il seguente documento di policy nella casella, sostituendo il testo **italics**con il tuo numero di account e il nome del tuo gruppo Auto Scaling.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "autoscaling:CompleteLifecycleAction"
         ],
         "Resource": "arn:aws:autoscaling:*:123456789012:autoScalingGroup:*:autoScalingGroupName/my-asg"
       }
     ]
   }
   ```

------

1. Scegli **Next (Successivo)**. 

1. In **Policy name** (Nome policy), inserisci **LogAutoScalingEvent-policy**. Scegli **Create Policy (Crea policy)**.

Dopo aver creato la policy, puoi creare un ruolo che la utilizzi.

**Come creare il ruolo**

1. Nel riquadro di navigazione sulla sinistra, scegliere **Roles (Ruoli)**.

1. Scegli **Crea ruolo**.

1. In **Seleziona tipo di entità attendibile**, scegli **Servizio AWS **.

1. Per il tuo caso d'uso, scegli **Lambda** quindi scegli **Successivo**. 

1. In **Aggiungi autorizzazioni**, scegli la politica che hai creato (**LogAutoScalingEvent-policy) e la politica** denominata. **AWSLambdaBasicExecutionRole** Quindi, seleziona **Successivo**. 
**Nota**  
La **AWSLambdaBasicExecutionRole**policy dispone delle autorizzazioni necessarie alla funzione per scrivere i log in Logs. CloudWatch 

1. Nella pagina **Nome, revisione e creazione**, per **Nome ruolo**, inserisci **LogAutoScalingEvent-role** e scegli **Crea ruolo**.

## Passaggio 2: creazione di una funzione Lambda
<a name="lambda-create-hello-world-function"></a>

Crea una funzione Lambda affinché serva da destinazione per gli eventi. La funzione Lambda di esempio, scritta in Node.js, viene richiamata da EventBridge quando viene emesso un evento corrispondente da Amazon EC2 Auto Scaling.

**Come creare una funzione Lambda**

1. Aprire la [pagina Functions (Funzioni)](https://console.aws.amazon.com/lambda/home#/functions) nella console Lambda.

1. Scegli **Create function (Crea funzione)** e **Author from scratch (Crea da zero)**.

1. In **Basic information (Informazioni di base)** , per **Function name (Nome funzione)** , inserisci **LogAutoScalingEvent**.

1. Per **Runtime**, scegli **Node.js 18.x**.

1. Scorri verso il basso e scegli **Cambia ruolo di esecuzione predefinito** e in **Ruolo di esecuzione** scegli **Utilizza un ruolo esistente**.

1. **Per Ruolo **esistente**, scegli -role. LogAutoScalingEvent**

1. Non modificare gli altri valori di default.

1. Scegli **Crea funzione**. Verrai riportato alla configurazione e al codice della funzione. 

1. Con la funzione `LogAutoScalingEvent` ancora aperta nella console, in **Codice della funzione**, nell'editor, incolla il seguente codice di esempio nel file denominato index.mjs.

   ```
   import { AutoScalingClient, CompleteLifecycleActionCommand } from "@aws-sdk/client-auto-scaling";
   export const handler = async(event) => {
     console.log('LogAutoScalingEvent');
     console.log('Received event:', JSON.stringify(event, null, 2));
     var autoscaling = new AutoScalingClient({ region: event.region });
     var eventDetail = event.detail;
     var params = {
       AutoScalingGroupName: eventDetail['AutoScalingGroupName'], /* required */
       LifecycleActionResult: 'CONTINUE', /* required */
       LifecycleHookName: eventDetail['LifecycleHookName'], /* required */
       InstanceId: eventDetail['EC2InstanceId'],
       LifecycleActionToken: eventDetail['LifecycleActionToken']
     };
     var response;
     const command = new CompleteLifecycleActionCommand(params);
     try {
       var data = await autoscaling.send(command);
       console.log(data); // successful response
       response = {
         statusCode: 200,
         body: JSON.stringify('SUCCESS'),
       };
     } catch (err) {
       console.log(err, err.stack); // an error occurred
       response = {
         statusCode: 500,
         body: JSON.stringify('ERROR'),
       };
     }
     return response;
   };
   ```

   Questo codice registra semplicemente l'evento in modo che, alla fine di questo tutorial, sia possibile vedere apparire un evento nel flusso di log CloudWatch Logs associato a questa funzione Lambda. 

1. Seleziona **Implementa**. 

## Fase 3: Creare una regola EventBridge
<a name="lambda-create-rule"></a>

Crea una EventBridge regola per eseguire la funzione Lambda. Per ulteriori informazioni sull’utilizzo di EventBridge, consultare [Utilizzato EventBridge per gestire gli eventi di Auto Scaling](automating-ec2-auto-scaling-with-eventbridge.md).

**Creazione di una regola tramite la console**

1. Apri la [EventBridge console](https://console.aws.amazon.com/events/).

1. Nel pannello di navigazione, scegli **Regole**.

1. Scegli **Crea regola**.

1. Per **Define rule detail** (Definisci dettagli della regola), effettua le seguenti operazioni:

   1. In **Nome**, inserisci **LogAutoScalingEvent-rule**.

   1. Per **Event bus** (Bus di eventi), scegli **default**. Quando un Servizio AWS utente del tuo account genera un evento, questo passa sempre al bus eventi predefinito del tuo account.

   1. Per **Tipo di regola**, scegli **Regola con un modello di eventi**.

   1. Scegli **Next (Successivo)**.

1. Per **Build event pattern** (Crea modello di eventi), procedi come segue:

   1. Per **Event source**, scegli **AWS eventi o eventi EventBridge partner**.

   1. Scorri verso il basso fino a **Modello di evento** ed esegui le seguenti operazioni:

   1. 

      1. In **Event source (Origine eventi)**, selezionare **Servizi AWS**.

      1. Per **Servizio AWS**, scegli **Auto Scaling** (Scalabilità automatica).

      1. In **Event Type (Tipo di evento)**, seleziona **Instance Launch and Terminate (Avvio e arresto dell'istanza)**.

      1. Per impostazione predefinita, la regola corrisponde a qualsiasi evento di aumento o riduzione orizzontale. Per creare una regola che ti avvisa quando esiste un evento di dimensionamento e un'istanza viene messa in stato di attesa a causa di un hook del ciclo di vita, scegli **Specific instance event(s)** (Evento/i di istanza specifici) e seleziona **EC2 Instance-launch Lifecycle Action** (Operazione del ciclo di vita per l'avvio dell'istanza EC2).

      1. Per impostazione predefinita, la regola corrisponde a qualsiasi gruppo con scalabilità automatica nella Regione. Affinché la regola corrisponda a un gruppo con dimensionamento automatico specifico, seleziona **Nomi gruppi specifici**, quindi seleziona il gruppo.

      1. Scegli **Next (Successivo)**.

1. Per **Select target(s)** (Seleziona destinazione/i), esegui queste operazioni:

   1. Per **Target types** (Tipi di target), scegli **Servizio AWS**.

   1. Per **Select a target** (Seleziona destinazione), scegli **Lambda function** (Funzione Lambda).

   1. Per **Funzione**, scegli **LogAutoScalingEvent**.

   1. Scegliere **Next (Successivo)** due volte.

1. Nella pagina **Rivedi e crea**, scegli **Crea regola**.

## Passaggio 4: aggiunta di un hook del ciclo di vita
<a name="lambda-add-lifecycle-hook"></a>

In questa sezione, si aggiunge un hook del ciclo di vita in modo che Lambda esegua la funzione sulle istanze al momento dell'avvio.

**Per aggiungere un hook del ciclo di vita**

1. Apri la [pagina Gruppi con dimensionamento automatico](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) nella console Amazon EC2.

1. Seleziona la casella di controllo accanto al gruppo con dimensionamento automatico. Si aprirà un riquadro diviso nella parte inferiore della pagina. 

1. Nel riquadro inferiore, nella scheda **Instance management (Gestione istanze)** in **Lifecycle hooks (Hook del ciclo di vita)**, scegli **Create lifecycle hook (Crea hook del ciclo di vita)**.

1. Per definire un hook del ciclo di vita per il dimensionamento orizzontale (avvio delle istanze), procedi come descritto di seguito:

   1. In **Lifecycle hook name (Nome hook del ciclo di vita)**, inserisci**LogAutoScalingEvent-hook**.

   1. In **Lifecycle transition (Transizione ciclo di vita)**, scegli **Instance launch (Avvia istanza)**.

   1. In **Heartbeat timeout (Timeout heartbeat)**, inserisci **300** per il numero di secondi di attesa della richiamata dalla funzione Lambda.

   1. In **Default result (Risultato di default)**, scegli **ABANDON (ABBANDONA)**. Ciò significa che se l'hook va in timeout senza ricevere un callback dalla funzione Lambda, il gruppo con scalabilità automatica terminerà una nuova istanza.

   1. (Facoltativo) Lascia **Notification metadata (Metadati delle notifiche)** vuoto. I dati degli eventi a cui passiamo EventBridge contengono tutte le informazioni necessarie per richiamare la funzione Lambda.

1. Scegli **Create** (Crea).

## Passaggio 5: test e verifica dell'evento
<a name="lambda-testing-hook-notifications"></a>

Per effettuare il test dell'evento, aggiorna il gruppo con scalabilità automatica aumentando di 1 la capacità desiderata del gruppo con scalabilità automatica. La funzione Lambda viene richiamata pochi secondi dopo aver aumentato la capacità desiderata.

**Per aumentare le dimensioni del gruppo con dimensionamento automatico**

1. Apri la [pagina Gruppi con dimensionamento automatico](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) nella console Amazon EC2.

1. Seleziona la casella di controllo accanto al gruppo con scalabilità automatica per visualizzare i dettagli in un riquadro inferiore e visualizzare ancora le righe superiori del riquadro superiore. 

1. Nel riquadro inferiore, nella scheda **Details (Dettagli)** scegli **Group details (Dettagli gruppo)**, **Edit (Modifica)**.

1. Per **Desired capacity (Capacità desiderata)**, aumentare il valore corrente di 1.

1. Scegliere **Aggiorna**. Durante l'avvio o la terminazione di un'istanza, la colonna **Status (Stato)** visualizza lo stato *Updating capacity (Aggiornamento della capacità*. 

Dopo avere aumentato la capacità desiderata, potrai verificare che la funzione Lambda è stata invocata.

**Per visualizzare l'output della funzione Lambda**

1. Apri la [pagina Log groups](https://console.aws.amazon.com/cloudwatch/home#logs:) della CloudWatch console.

1. Seleziona il nome del gruppo di log per la funzione Lambda (`/aws/lambda/LogAutoScalingEvent`).

1. Seleziona il nome del flusso di log per visualizzare i dati forniti dalla funzione per l'istanza avviata.

Successivamente, è possibile verificare che l'istanza sia stata avviata correttamente dalla descrizione delle attività di dimensionamento.

**Come visualizzare le attività di dimensionamento**

1. Dalla pagina **Auto Scaling groups (Gruppi Auto Scaling)**, seleziona il gruppo.

1. Nella scheda **Activity (Attività)** in **Activity history (Cronologia attività)**, la colonna **Status (Stato)** indica se il gruppo con scalabilità automatica ha avviato correttamente le istanze. 
   + Se l'azione ha avuto esito positivo, l'attività di dimensionamento avrà lo stato "Successful" (Riuscito).
   + In caso di errore, dopo aver atteso alcuni minuti, verrà visualizzata un'attività di dimensionamento con lo stato "Cancelled" (Annullato) e un messaggio di stato "Instance failed to complete user's Lifecycle Action: Lifecycle Action with token e85eb647-4fe0-4909-b341-a6c42EXAMPLE was abandoned: Lifecycle Action Completed with ABANDON Result". (Istanza non riuscita a completare l'azione ciclo di vita dell'utente: Azione ciclo di vita con token e85eb647-4fe0-4909-b341-a6c42EXAMPLE abbandonato: Azione ciclo di vita completata con risultato ABANDON).

**Come ridurre le dimensioni del gruppo con scalabilità automatica**  
Se l'istanza aggiuntiva avviata per questo test non è necessaria, è possibile aprire la scheda **Details (Dettagli)** e ridurre di 1 il valore di **Desired capacity (Capacità desiderata)**.

## Fase 6: pulizia
<a name="lambda-lifecycle-hooks-tutorial-cleanup"></a>

Se hai finito di utilizzare le risorse create appositamente per l'esercitazione, segui la procedura seguente per eliminarle.

**Come eliminare l'hook del ciclo di vita**

1. Apri la [pagina Gruppi con dimensionamento automatico](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) nella console Amazon EC2.

1. Seleziona la casella di controllo accanto al gruppo con dimensionamento automatico.

1. Nella scheda **Instance management (Gestione istanze)** in **Lifecycle hooks (Hook del ciclo di vita)**, scegli Create lifecycle hook (Crea hook del ciclo di vita)(`LogAutoScalingEvent-hook`).

1. Scegli **Actions** (Operazioni), **Delete** (Elimina).

1. Per confermare, scegli di nuovo **Delete (Elimina)**.

**Per eliminare la EventBridge regola Amazon**

1. Apri la [pagina delle regole](https://console.aws.amazon.com/events/home?#/rules) nella EventBridge console Amazon.

1. In **Event bus (Bus di eventi)**, seleziona il bus di eventi associato alla regola (`Default`).

1. Seleziona la casella di controllo accanto alla regola (`LogAutoScalingEvent-rule`).

1. Scegli **Elimina**.

1. Quando viene richiesta la conferma, digita il nome della regola e scegli **Delete** (Elimina).

Se hai finito di lavorare con la funzione di esempio, eliminala. È inoltre possibile eliminare il gruppo di log che memorizza i registri della funzione e il ruolo di esecuzione e la policy delle autorizzazioni creati dalla console.

**Come eliminare una funzione Lambda**

1. Aprire la [pagina Functions (Funzioni)](https://console.aws.amazon.com/lambda/home#/functions) nella console Lambda.

1. Scegli la funzione (`LogAutoScalingEvent`).

1. Scegli **Operazioni** > **Elimina**.

1. Quando viene richiesta la conferma, digita **delete** per confermare l'eliminazione della funzione specificata e scegli **Delete** (Elimina).

**Come eliminare il gruppo di log**

1. Apri la [pagina Log groups](https://console.aws.amazon.com/cloudwatch/home#logs:) della CloudWatch console.

1. Scegli il gruppo di log della funzione (`/aws/lambda/LogAutoScalingEvent`).

1. Scegli **Actions (Azioni)**, **Delete log group(s) (Elimina gruppo/i di log)**.

1. Nella finestra di dialogo **Delete log group(s) (Elimina gruppo/i di log)** scegli **Delete (Elimina)**.

**Come eliminare il ruolo di esecuzione**

1. Apri la [pagina Roles (Ruoli)](https://console.aws.amazon.com/iam/home?#/roles) della console IAM.

1. Seleziona il ruolo della funzione (`LogAutoScalingEvent-role`).

1. Scegli **Elimina**.

1. Quando viene richiesta la conferma, digita il nome del ruolo e scegli **Delete** (Elimina).

**Come eliminare la policy IAM**

1. Apri la pagina [Policies (Policy)](https://console.aws.amazon.com/iam/home?#/policies) nella console IAM.

1. Seleziona la policy creata (`LogAutoScalingEvent-policy`).

1. Scegli **Operazioni** > **Elimina**.

1. Quando viene richiesta la conferma, digita il nome della policy e scegli **Delete** (Elimina).

## Risorse correlate
<a name="lambda-lifecycle-hooks-tutorial-related-resources"></a>

I seguenti argomenti correlati possono essere utili per creare EventBridge regole basate sugli eventi che si verificano alle istanze del gruppo Auto Scaling.
+ [Utilizzato EventBridge per gestire gli eventi di Auto Scaling](automating-ec2-auto-scaling-with-eventbridge.md). Questa sezione mostra esempi di eventi per altri casi d'uso, inclusi gli eventi per il dimensionamento verticale.
+ [Come aggiungere hook del ciclo di vita (console)](adding-lifecycle-hooks.md#adding-lifecycle-hooks-console). Questa procedura mostra come aggiungere lifecycle hook sia per il dimensionamento orizzontale (avvio delle istanze) che per il dimensionamento verticale (istanze che terminano o ritornano a un pool caldo).

Per un tutorial che illustra come utilizzare il servizio di metadati di istanza (IMDS) per richiamare un'azione dall'interno dell'istanza stessa, consulta [Tutorial: utilizza lo script di dati e i metadati dell'istanza per recuperare lo stato del ciclo di vita](tutorial-lifecycle-hook-instance-metadata.md).