AWS EC2 AUTO START STOP
AWS EC2 AUTO START STOP: AVVIARE E ARRESTARE AUTOMATICAMENTE ISTANZE AWS
Le istanze EC2 di amazon web services sono molto comode per avere un server, con pagamento a consumo, configurato secondo le proprie necessità.
Nel caso di applicazioni web che non devono necessariamente essere disponibili 24 ore su 24, ad esempio gestionali aziendali o similari, può essere utili definire un tempo di disponibilità, sia per risparmiare qualcosa sia per avere un minore impatto ambientale.
La procedura per avviare e fermare le istanze è ben documentata da amazon, sembra complicata ma in realtà è più semplice da farsi che a dirsi.
Seguendo passo passo la guida che ho tradotto e semplificato è possibile farlo senza problemi.
Tra l’altro può essere anche un buon esempio di utilizzo delle funzioni LAMBDA e CLOUDWATCH di AWS.
Creare una policy IAM dedicata
Accedere alla gestione console IAM da: https://console.aws.amazon.com/iam
Selezionare Policy dal menu a sinistra:
Scegliere Crea policy
Scegliere la tab JSON
Incollare la policy seguente così com’è:
{ "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": "*" } ] }
Cliccare Valida policy
Creare il ruolo per la funzione Lambda che andremo a creare:
Sempre dalla console IAM selezioniamo Ruoli dal menù a sinistra.
Premere: Crea ruolo
Selezionare come tipo di entità: AWS service.
Selezionare il servizio Lambda
Premere Successivo: Autorizzazioni
Selezionare la Policy create in precedenza.
Successivo: Tags
I tag sono opzionali, possiamo tranquillamente premere Successivo: Verifica
Digitare un nome ruolo univoco e premere Crea Ruolo
Creare le funzioni Lambda per arrestare ed avviare le istanze EC 2
Accediamo alla console Lambda da:
https://eu-west-1.console.aws.amazon.com/lambda
Premiamo Crea Funzione, dopodiché scegliere Crea da zero
Sotto informazioni di base immettere un nome univoco per la funzione, esempio AvviaIstanze.
Come Runtime impostiamo Python 3.7.
Sotto Autorizzazioni selezioniamo il ruolo precedentemente creato.
Premiamo Crea funzione
Nell’editor codice della funzione copiamo il codice seguente per fermare le istanze indicate (sostituiamo regione e id istanze in base alle nostre):
import boto3 region = codice regione,es.:'eu-west-1' instances = codice istanze, es.:['i-yyyyyyyyy', 'i-xxxxxxxxx'] ec2 = boto3.client('ec2', region_name=region) def lambda_handler(event, context): ec2.stop_instances(InstanceIds=instances) print('stopped your instances: ' + str(instances))
Sotto impostazioni di base impostiamo il timeout a 10 secondi.
Scegliamo Distribuisci
Creiamo un’altra funzione come abbiamo appena fatto, copiando però il codice seguente:
import boto3 region = codice regione,es.:'eu-west-1' instances = codice istanze, es.:['i-yyyyyyyyy', 'i-xxxxxxxxx'] ec2 = boto3.client('ec2', region_name=region) def lambda_handler(event, context): ec2.start_instances(InstanceIds=instances) print('started your instances: ' + str(instances))
Possiamo testare le funzioni create selezionandole sempre dalla console Lambda e scegliendo Test dal menù operazioni.
Scheduliamo l’avvio delle funzioni create
Apriamo la CloudWatch console da: https://eu-west-1.console.aws.amazon.com/cloudwatch
Scegliamo Regolamento (ottima traduzione ) dal pannello a sinistra.
Scegliamo Crea regola
Scegliamo Schedule.
Inseriamo un valore fisso o un parametro cron in base a esigenza.
Premiamo aggiungi target e scegliamo un’azione Lambda creata in precedenza.
Assegnamo un nome per identificare la regola e premiamo Crea regola.
Ripetiamo per le altre funzioni necessarie e il gioco è fatto!