In che modo posso interrompere e riavviare istanze Amazon EC2 a intervalli regolari con Lambda?

6 minuti di lettura
0

Vorrei ridurre l'utilizzo di Amazon Elastic Compute Cloud (Amazon EC2) interrompendo e riavviando istanze EC2 automaticamente.

Breve descrizione

Puoi utilizzare AWS Lambda e Amazon EventBridge per arrestare e avviare automaticamente le istanze EC2.

Nota: la seguente risoluzione è 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 personalizzata di AWS Identity and Access Management (IAM) e un ruolo di esecuzione per la funzione Lambda.

2.    Crea funzioni Lambda per interrompere e avviare le istanze EC2.

3.    Test delle funzioni Lambda.

4.    Crea regole EventBridge che eseguono la tua funzione in base a una pianificazione.
Nota: puoi anche creare regole che reagiscono agli eventi che si verificano nel tuo account AWS.

Risoluzione

Nota: se ricevi un errore client all'avvio dopo aver completato la procedura seguente, consulta Quando avvio la mia istanza con volumi crittografati allegati, l'istanza si arresta immediatamente con l'errore "errore client all'avvio".

Ottieni gli ID delle istanze EC2 che desideri arrestare e avviare. Una volta fatto ciò, completa i passaggi seguenti.

Crea una policy IAM e un ruolo di esecuzione per la funzione Lambda

1.    Crea una policy IAM utilizzando l'editor di policy JSON. Copia e incolla il seguente documento sulla policy JSON nell'editor della 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 alleghi una policy di autorizzazioni a Lambda, assicurati di scegliere la policy IAM appena creata.

Creare funzioni Lambda per interrompere e avviare le istanze EC2

1.    Apri la console Lambda, quindi scegli Crea funzione.

2.    Seleziona Author from scratch (Crea da zero).

3.    In Informazioni di base, aggiungi le seguenti informazioni:

Per Nome funzione, inserisci un nome che la identifichi come la funzione utilizzata per arrestare le istanze EC2. Ad esempio, "StopEC2Instances".
Per Runtime, scegli Python 3.9..
In Autorizzazioni, espandi Modifica ruolo di esecuzione di default.
Per Ruolo di esecuzione, scegli Utilizza un ruolo esistente.
In Ruolo esistente, scegli il ruolo IAM che hai creato.

4.    Scegli Crea funzione.

5.    Sotto Codice, Codice sorgente, copia e incolla il seguente codice nel riquadro Editor nell'editor di codice: (lambda_function). Questo codice arresta le istanze EC2 identificate.

Esempio di codice funzione per l'arresto di 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 regione, sostituisci "us-west-1" con la Regione AWS in cui si trovano le tue istanze. Per istanze, sostituisci gli esempi di ID dell'istanza EC2 con gli ID delle istanze specifiche che desideri interrompere e avviare.

6.    Scegli Implementa.

7.    Nella scheda Configurazione, seleziona Configurazione generale, Modifica. Imposta Timeout su 10 secondi, quindi scegli Salva.

Nota: Configura le impostazioni della funzione Lambda secondo necessità per il tuo caso d'uso. Per esempio, per interrompere e avviare più istanze, potresti utilizzare un valore diverso per Timeout e Memoria.

8.    Ripeti le fasi da 1 a 7 per creare un'altra funzione. Completa i seguenti passaggi in modo diverso, cosicché questa funzione avvii le tue istanze EC2:

Nel passaggio 3, inserisci un nome di funzione diverso da quello utilizzato in precedenza. Ad esempio, "StartEC2Instances".
Nel passaggio 5, copia e incolla il seguente codice nel riquadro dell'editor di codice ( lambda_function).

Esempio di codice funzione per l'avvio di 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 regione e istanze, utilizza gli stessi valori che hai utilizzato per far sì che il codice interrompesse le istanze EC2.

Test delle funzioni 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 Codice sorgente, scegli Test.

5.    Nella finestra di dialogo Configura evento di test, scegli Crea nuovo evento di test.

6.    Inserisci un nome per l'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 creata.

Verifica lo stato delle tue istanze EC2

Console di gestione AWS

Puoi controllare lo stato delle istanze EC2 prima e dopo il test per verificare che le funzioni operino come previsto.

AWS CloudTrail

Puoi utilizzare CloudTrail per verificare la presenza di eventi per confermare che la funzione Lambda ha interrotto o avviato l'istanza EC2.

1.    Apri la console CloudTrail.

2.    Nel pannello di navigazione, scegli Event history (Cronologia eventi).

3.    Scegli dall'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 interrotto o avviato le istanze EC2.

Crea regole EventBridge che eseguono le funzioni Lambda

1.    Apri la Console di EventBridge.

2.    Seleziona Create role (Crea ruolo).

3.    Inserisci un Nome per la tua regola, ad esempio "StopEC2Instances". (Facoltativo) Inserisci una descrizione per la regola in Descrizione.

4.    Per Tipo di regola, scegli Pianifica, quindi scegli Continua in EventBridge Scheduler.

5.    Per Schema di pianificazione, scegli Pianificazione ricorrente. Completa uno dei seguenti passaggi:

In Schema di pianificazione, per Occorrenza, scegli Pianificazione ricorrente. Quindi completa uno dei seguenti passaggi:
Se il tipo di pianificazione è Pianificazione basata sulla tariffa**, per l'espressione della tariffa**, inserisci un valore di tariffa e scegli un intervallo di tempo in minuti, ore o giorni.
Se il tipo Schedule è una pianificazione basata su Cron**, per l'espressione Cron**, inserisci un'espressione che indichi a Lambda quando interrompere l'istanza. Per ulteriori informazioni sulla sintassi delle espressioni, consulta Pianificazione di espressioni per regole.
Nota: le espressioni Cron vengono valutate in UTC. Assicurati di impostare l'espressione per il fuso orario che preferisci.

6.    In Seleziona destinazioni, scegli la funzione Lambda dal menu a tendina Destinazione.

7.    Per Funzione, scegli la funzione che interrompe le istanze EC2.

8.    Scegli Ignora per rivedere e creare, quindi scegli Crea.

9.    Ripeti le fasi da 1 a 8 per creare una regola che avvii le istanze EC2. Completa i seguenti passaggi:

Inserisci un nome per la tua regola, ad esempio "StartEC2Instances".
(Facoltativo) In Descrizione, inserisci una descrizione della regola, ad esempio «Avvia le istanze EC2 ogni mattina alle 7:00».
Nel passaggio 5, per espressione Cron, inserisci un'espressione che indichi a Lambda quando avviare le istanze.
Nel passaggio 7, per Funzione, scegli la funzione che avvia le istanze EC2.


Informazioni correlate

Tutorial: pianificazione delle funzioni Lambda tramite EventBridge

Eventi dai servizi AWS

Aggiunta di azioni di arresto agli allarmi Amazon CloudWatch

Istanze riservate pianificate

AWS UFFICIALE
AWS UFFICIALEAggiornata un mese fa