Uncategorized

AVVIARE E ARRESTARE AUTOMATICAMENTE ISTANZE AWS

aws lambda ec2 start stop automatici

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!

 

Comment here