Tutorial: utilizza lo script di dati e i metadati dell'istanza per recuperare lo stato del ciclo di vita - Amazon EC2 Auto Scaling

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

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

Passaggio 1: creazione di un ruolo IAM con autorizzazioni per completare le operazioni del ciclo di vita

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), quindi seleziona Create policy (Crea policy).

  2. Scegli la scheda JSON.

  3. Nella casella Policy Document (Documento della policy), copia e incolla il documento della policy seguente nella casella. Sostituisci il testo di esempio con il numero di account e il nome del gruppo con scalabilità automatica che desideri creare (TestAutoScalingEvent-group).

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

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

  2. Scegli Crea ruolo.

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

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

  5. In Aggiungi autorizzazioni, scegli la policy che hai creato (-policy). TestAutoScalingEvent Quindi, seleziona Next (Successivo).

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

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 della console Amazon EC2.

  2. Scegli Crea modello di avvio.

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

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

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

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

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

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

  9. 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 get_target_state { echo $(curl -s http://169.254.169.254/latest/meta-data/autoscaling/target-lifecycle-state) } function get_instance_id { echo $(curl -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

  10. Scegli Crea modello di avvio.

  11. 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 per Amazon EC2 Auto Scaling.

Passaggio 3: creazione di un gruppo con dimensionamento automatico

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

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

  3. In Network (Rete), scegli un VPC.

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

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

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

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

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 nella console Amazon EC2.

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

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

  4. 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), inserisciTestAutoScalingEvent-hook.

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

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

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

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

  5. Scegli Crea.

Passaggio 5: test e verifica della funzionalità

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 nella console Amazon EC2.

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

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

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

  5. Scegli 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.

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

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

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 nella console Amazon EC2.

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

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

  4. Scegli Actions (Operazioni), Delete (Elimina).

  5. Per confermare, scegli di nuovo Delete (Elimina).

Per eliminare il modello di avvio
  1. Apri la pagina Configurazioni di avvio della console Amazon EC2.

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

  3. 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 nella console Amazon EC2.

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

  3. 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) della console IAM.

  2. Seleziona il ruolo della funzione (TestAutoScalingEvent-role).

  3. Scegli Elimina.

  4. 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) nella console IAM.

  2. Seleziona la policy creata (TestAutoScalingEvent-policy).

  3. Scegli Operazioni > Elimina.

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

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.

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