Come avviare e arrestare un'istanza Aurora in maniera automatica con AWS Lambda

Immagine di copertina

I costi della tua istanza Aurora aumentano facilmente, e non tutte le istanze del database hanno necessità di essere sempre operative: come risparmiare sulle ore di utilizzo delle istanze, sfruttando Lambda?

Vediamo quali sono i passaggi per consentire a una funzione AWS Lambda di avviare e/o arrestare un’istanza Amazon Aurora.

Crea una policy IAM

È necessario creare una policy IAM che conceda le autorizzazioni necessarie per avviare e arrestare le istanze Aurora. La policy deve includere le azioni rds:StartDBCluster e rds:StopDBCluster, che sono proprio quelle che ci permetteranno di avviare e arrestare le risorse.

Ecco un esempio di come potrebbe essere la policy per arrestare l’istanza del database del cluster:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "rds:StartDBCluster",
        "rds:StopDBCluster"
      ],
      "Resource": "arn:aws:rds:<region>:<account-id>:db:<db-cluster-name>"
    }
  ]
}

Ovviamente, dobbiamo sostituire i campi <region>, <account-id> e <db-cluster-name> con i dettagli dell’account e della region in cui si trova il cluster.

Crea un ruolo tramite IAM

A questo punto, avendo la policy pronta, dobbiamo permettere a Lambda di sfruttarla: creiamo un ruolo IAM affinché la funzione Lambda possa essere “delegata” ad eseguire queste operazioni.

  • Apri la console IAM.
  • Nel riquadro di navigazione, scegli Ruoli.
  • Scegli Crea ruolo.
  • Seleziona Servizio AWS come entità attendibile e scegli Lambda.
  • Allega la policy creata nel passaggio precedente.
  • Completa la creazione del ruolo.

Assegna il ruolo IAM alla funzione Lambda

Quando crei o aggiorni la tua funzione Lambda, assegna il ruolo IAM che hai creato:

  • Nella console Lambda, vai alla tua funzione.
  • In Configurazione, scegli Autorizzazioni.
  • Scegli Modifica e seleziona il ruolo IAM che hai creato.

L’alternativa, è quella di associare la precedente policy a quello che è il ruolo di esecuzione della Lambda.

Scrivi il codice della funzione Lambda

Passiamo alla scrittura della Lambda: è possibile usare l’SDK AWS che supporta diversi linguaggi, tra cui Node.js e Python con le rispettive librerie. In questo caso, useremo boto3 per Python per avviare l’istanza Aurora.

Per farlo, sfruttiamo la funzione lambda_handler per creare una variabile che ospiterà il client necessario alla comunicazione con RDS e quindi Aurora. Poi, sfruttiamo le API di RDS per chiamare la funzione start_db_cluster che, tramite l’ID del Cluster, possa avviare il cluster:

import boto3

def lambda_handler(event, context):
    rds_client = boto3.client('rds')
    
    response = rds_client.start_db_cluster(
        DBClusterIdentifier='your-db-cluster-name'
    )
    
    return response

E per arrestare un cluster? La procedura è del tutto simile:

import boto3

def lambda_handler(event, context):
    rds_client = boto3.client('rds')
    
    response = rds_client.stop_db_cluster(
        DBClusterIdentifier='your-db-cluster-name'
    )
    
    return response

Testa la funzione

Dopo aver eseguito il deploy della funzione Lambda per avere la certezza che le modifiche siano state salvate correttamente, è possibile testarla per assicurarti che avvii l’istanza Aurora come previsto.

Se invece vuoi che l’avvio o lo spegnimento avvengano in maniera automatica, è possibile impostare CloudWatch Events o EventBridge per pianificare l’esecuzione della funzione Lambda. Un esempio di come creare una regola e la relativa schedulazione, puoi dare un’occhiata a questo post.


🔗 Leggi anche:

Conosci meglio chi ha scritto questo articolo

Serena Sensini

Ciao! Mi chiamo Serena Sensini e sono la creatrice di @ TheRedCode.it. Ho aperto questo blog nel 2021 per raccontare il mio lavoro e il mondo dell’informatica a parole semplici, in piccole pillole e alla portata di tutte le persone.

Sono un’ingegnera informatica specializzata in ambito AI & NLP. Di giorno lavoro come CTO @ Welyk e come Innovation & Emerging Technologies Leader @ Dedalus, mentre di notte scrivo e sono autrice di 5 libri -per ora-. 🖊️

Foto di Serena Sensini

Partners

Community, aziende e persone che supportano attivamente il blog

Vuoi diventare tech content creator? 🖊️

Se ti va di raccontare la tua esperienza nel mondo tech, questo è il posto giusto.

Cerchiamo voci autentiche, esempi pratici e punti di vista utili per chi legge.

Scrivici a collaborazioni[at]theredcode.it con una proposta: idea, taglio del contenuto e una breve presentazione. Non vediamo l'ora di leggere la tua esperienza!

Invia la tua idea