Come posso interrompere e avviare le istanze Amazon EC2 a intervalli regolari utilizzando Lambda?
Desidero ridurre l'utilizzo di Amazon Elastic Compute Cloud (Amazon EC2) arrestando e avviando automaticamente le mie istanze EC2.
Breve descrizione
Puoi usare AWS Lambda e Amazon EventBridge per arrestare e avviare automaticamente le istanze EC2.
**Nota:**la seguente risoluzione presenta una soluzione semplice. Per una soluzione più avanzata, utilizza il pianificatore di istanze AWS. Per ulteriori informazioni, consulta Automatizzazione dell'avvio e dell'arresto delle istanze AWS.
Per utilizzare Lambda per arrestare e avviare le istanze EC2 a intervalli regolari, completa i seguenti passaggi:
1. Crea una policy AWS IAM (Identity and Access Management) personalizzata e un ruolo di esecuzione per la tua funzione Lambda.
2. Crea funzioni Lambda per arrestare e avviare le tue istanze EC2.
3. Testa le funzioni Lambda.
4. Crea regole EventBridge che eseguano la tua funzione in base a una pianificazione.
**Nota:**Puoi anche creare regole che reagiscono ad eventi che si verificano nel tuo account AWS.
Risoluzione
**Nota:**Nota: se ricevi un errore Client error on launch dopo aver completato la procedura seguente, consulta Quando avvio la mia istanza con volumi crittografati allegati, l'istanza si arresta immediatamente con l'errore "client error on launch".
Ottieni gli ID delle istanze EC2 che desideri arrestare e avviare. Poi segui questi passaggi.
Crea una policy IAM e un ruolo di esecuzione per la tua funzione Lambda
1. Crea una policy IAM utilizzando l'editor di policy JSON. Copia e incolla il seguente documento di policy JSON nell'editor delle policy:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" }, { "Effect": "Allow", "Action": [ "ec2:Start*", "ec2:Stop*" ], "Resource": "*" } ] }
2. Crea un ruolo IAM per Lambda.
**Importante:**Quando colleghi una policy di autorizzazioni a Lambda, assicurati di scegliere la policy IAM che hai appena creato.
Creazione di funzioni Lambda per interrompere e avviare istanze EC2
1.Apri la console Lambda, quindi scegli Crea funzione.
2. Scegli Crea da zero.
3. In Informazioni di base, aggiungi le seguenti informazioni:
In Nome funzione, inserisci un nome che la identifichi come la funzione utilizzata per arrestare le istanze EC2. Ad esempio "StopEC2Instances".
Come Runtime, scegli Python 3.9.
In Autorizzazioni espandi Modifica del ruolo di esecuzione predefinito.
In Ruolo di esecuzione, scegli Utilizza un ruolo esistente.
In Ruolo esistente, scegli il ruolo IAM che hai creato.
4. Scegli Crea funzione.
5. In Codice, Fonte codice, copia e incolla il seguente codice nel riquadro dell'editor nell’editor di codice: (lambda_function). Questo codice arresta le istanze EC2 identificate.
Esempio di codice di funzione per arrestare le istanze EC2
import boto3 region = 'us-west-1' instances = ['i-12345cb6de4f78g9h', 'i-08ce9b2d7eccf6d26'] ec2 = boto3.client('ec2', region_name=region) def lambda_handler(event, context): ec2.stop_instances(InstanceIds=instances) print('stopped your instances: ' + str(instances))
**Importante:**Per region, sostituisci "us-west-1" con la regione AWS in cui si trovano le tue istanze. Per instances, sostituisci gli ID delle istanze EC2 di esempio con gli ID delle istanze che desideri interrompere e avviare.
6. Scegli Implementa.
7. Nella scheda Configurazione, scegli Configurazione generale, Modifica. Imposta Timeout su 10 secondi, quindi scegli Salva.
Nota:Configura le impostazioni della funzione Lambda in base alle esigenze del tuo caso d'uso. Ad esempio, per interrompere e avviare più istanze, è possibile utilizzare valori diversi per Timeout e Memoria.
8. Ripeti i passaggi da 1 a 7 per creare un'altra funzione. Completa i seguenti passaggi in modo diverso in modo che tale funzione avvii le tue istanze EC2:
Al passaggio 3, inserisci un Nome funzione diverso da quello utilizzato in precedenza. Ad esempio "StartEC2Instances".
Al passaggio 5, copia e incolla il seguente codice nel riquadro dell'editor nell’editor di codice: (lambda_function).
Esempio di codice di funzione per avviare le istanze EC2
import boto3 region = 'us-west-1' instances = ['i-12345cb6de4f78g9h', 'i-08ce9b2d7eccf6d26'] ec2 = boto3.client('ec2', region_name=region) def lambda_handler(event, context): ec2.start_instances(InstanceIds=instances) print('started your instances: ' + str(instances))
**Importante:**Per region e instances usa gli stessi valori che hai usato nel codice per interrompere le istanze EC2.
Test della funzione Lambda
1.Apri la console Lambda, quindi scegli Funzioni.
2. Scegli una delle funzioni che hai creato.
3.Scegli la scheda Codice.
4. Nella sezione Origine codice scegli Test.
5. Nella finestra di dialogo Configura evento di test scegli Crea un nuovo evento di test.
6. Inserisci un Nome evento. Quindi scegli Crea.
**Nota:**Non modificare il codice JSON per l'evento di test. La funzione non lo utilizza.
7. Scegli Test per eseguire la funzione.
8. Ripeti i passaggi da 1 a 7 per l'altra funzione che hai creato.
Verifica dello stato delle istanze EC2
Console di gestione AWS
Puoi verificare lo stato delle istanze EC2 prima e dopo il test per accertarti che le tue funzioni funzionino come previsto.
AWS CloudTrail
Puoi utilizzare CloudTrail per verificare la presenza di eventi che confermino che la funzione Lambda ha interrotto o avviato l'istanza EC2.
1. Apri la console CloudTrail.
2. Nel pannello di navigazione, scegli Cronologia eventi.
3. Scegli l'elenco a discesa Attributi di ricerca, quindi scegli Nome evento.
4. Nella barra di ricerca inserisci StopInstances per esaminare i risultati.
5.Nella barra di ricerca, inserisci StartInstances per esaminare i risultati.
Se non ci sono risultati, la funzione Lambda non ha arrestato né avviato le istanze EC2.
Creazione di regole EventBridge che eseguono funzioni Lambda
1. Apri la console EventBridge.
2. Seleziona Crea regola.
3. Inserisci un Nome per la tua regola, ad esempio "StopEC2Instances". (Facoltativo) Inserisci una descrizione della regola in Descrizione.
4.Come Tipo di regola, scegli Pianificazione, quindi scegli Continua nel pianificatore EventBridge.
5.Come Modello di pianificazione, scegli Pianificazione ricorrente. Completa uno dei seguenti passaggi:
In Modello di pianificazione, per Ricorrenza scegli** Pianificazione ricorrente**. Quindi completa uno dei seguenti passaggi:
Quando il Tipo di programma è Pianificazione basata su frequenza, in Espressione frequenza, inserisci un valore di frequenza e scegli un intervallo di tempo in minuti, ore o giorni.
Quando il Tipo di programma è Pianificazione basata su cron, per l’espressione Cron inserisci un'espressione che indichi a Lambda quando interrompere l'istanza. Per informazioni sulla sintassi delle espressioni, consulta Pianificazione di espressioni per regole.
**Nota:**Le espressioni Cron sono calcolate in UTC. Assicurati di regolare l'espressione sulla base del tuo fuso orario di riferimento.
6. In ** Seleziona i target**, scegli Funzione Lambda dall'elenco a discesa Target.
7. In Funzione, scegli la funzione che arresta le tue istanze EC2.
8. Scegli Passa alla revisione e alla creazione quindi scegli Crea.
9. Ripeti i passaggi da 1 a 8 per creare una regola per avviare le istanze EC2. Completa i seguenti passaggi in modo diverso:
Inserisci un nome per la tua regola, ad esempio "StartEC2Instances".
(Facoltativo) In Descrizione, inserisci una descrizione per la tua regola, ad esempio "Avvia le istanze EC2 ogni mattina alle 7:00".
Al passaggio 5, per l'Espressione Cron inserisci un'espressione che indichi a Lambda quando avviare le istanze.
Al passaggio 7, per Funzione, scegli la funzione che avvia le tue istanze EC2.
Informazioni correlate
Tutorial: pianificazione delle funzioni Lambda tramite EventBridge
Aggiunta di azioni di arresto agli allarmi Amazon CloudWatch
Video correlati

Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- Come posso usare una funzione Lambda per interrompere un'istanza Amazon RDS per più di sette giorni?AWS UFFICIALEAggiornata 8 mesi fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa