

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

# 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).