

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: 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)