Preparazione all'aggiunta di un hook del ciclo di vita al gruppo con scalabilità automatica - Dimensionamento automatico Amazon EC2

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

Preparazione all'aggiunta di un hook del ciclo di vita al gruppo con scalabilità automatica

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

  • Per segnalare ad Amazon EC2 Auto Scaling quando l'azione del ciclo di vita è completa, devi aggiungere CompleteLifecyclela chiamata Action 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, consulta Completare un'operazione del ciclo di vita e Ruoli IAM per le applicazioni in esecuzione sulle istanze Amazon EC2.

  • Per utilizzare un servizio come Lambda per eseguire un'azione personalizzata, è necessario aver già creato una EventBridge regola e specificato una funzione Lambda come destinazione. Per ulteriori informazioni, consulta Configurazione di una destinazione di notifica per le notifiche del ciclo di vita.

  • Per consentire a Lambda di segnalare Amazon EC2 Auto Scaling quando l'azione del ciclo di vita è completa, devi CompleteLifecycleaggiungere la chiamata Action 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.

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

    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 o Amazon SQS, usa AWS CloudFormation, 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

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

Il primo approccio utilizza Amazon EventBridge per richiamare una funzione Lambda che esegue l'azione desiderata. Il secondo approccio prevede la creazione di un argomento Amazon Simple Notification Service (Amazon SNS) su cui vengono pubblicate le notifiche. I client possono sottoscriversi all'argomento SNS e ricevere messaggi pubblicati utilizzando un protocollo supportato. L'ultimo approccio prevede l'utilizzo di Amazon Simple Queue Service (Amazon SQS), un sistema di messaggistica utilizzato dalle applicazioni distribuite per scambiare messaggi tramite un modello di polling.

Come best practice, ti consigliamo 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.

Le procedure seguenti illustrano come impostare la destinazione di notifica.

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.

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

È 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 notifica degli eventi del ciclo di vita sull'istanza in fase di avvio o chiusura e un token che puoi usare EventBridge per controllare l'azione del ciclo di vita. Per esempi di questi eventi, consulta Riferimento eventi Dimensionamento automatico Amazon EC2.

Nota

Quando usi AWS Management Console 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 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. 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 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 nella Guida per gli sviluppatori AWS Lambda .

  2. Per creare una regola che corrisponda agli eventi per l'avvio delle istanze, utilizza il seguente comando: put-rule.

    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 in corsivo con il nome del gruppo con scalabilità automatica.

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

  3. Per specificare la funzione Lambda da utilizzare come destinazione per la regola, usa il seguente comando: put-target.

    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 alla fase 2 e il valore per il parametro Arn è l'ARN della funzione che hai creato alla fase 1.

  4. Per aggiungere autorizzazioni che permettono alla regola di richiamare la funzione Lambda, utilizza il seguente comando Lambda: add-permission. 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 desideri utilizzi la regola 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.

  5. Dopo aver seguito queste istruzioni, passa a Aggiungere un hook del ciclo di vita come fase successiva.

Ricezione di notifiche tramite Amazon SNS

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 o il seguente comando: create-topic. 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 nella Guida per gli sviluppatori di Amazon Simple Notification Service.

    aws sns create-topic --name my-sns-topic
  2. 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.

  3. 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. Apertura della console IAM https://console.aws.amazon.com/iam/

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

    3. Scegli Crea ruolo.

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

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

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

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

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

  4. Dopo aver seguito queste istruzioni, passa a Aggiunta di hook del ciclo di vita (AWS CLI) come fase successiva.

Ricezione di notifiche tramite Amazon SQS

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. 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 nella Guida per gli sviluppatori di Amazon Simple Queue Service.

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

  3. 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. Apertura della console IAM https://console.aws.amazon.com/iam/

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

    3. Scegli Crea ruolo.

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

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

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

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

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

  4. Dopo aver seguito queste istruzioni, passa a Aggiunta di hook del ciclo di vita (AWS CLI) come fase successiva.

Esempio di messaggio di notifica per Amazon SNS e Amazon SQS

Mentre l'istanza è in uno stato di attesa, un messaggio viene pubblicato alla destinazione di notifica Amazon SNS o Amazon SQS. Il messaggio include le informazioni seguenti:

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

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 forniti da Amazon EC2 Auto Scaling EventBridge a, consulta. Riferimento eventi Dimensionamento automatico Amazon EC2