Pubblicato il 16/12/2023 da alnao nella categoria AWS

Il Cloud mette a disposizione diversi servizi di tipo DBMS cioè basi di dati (database) di tipo relazionali, il più usato è RDS (abbreviazione proprio di Relational Database Service). Si tratta di un servizio di tipo serverless: usando questo servizio è possibile concentrarsi sulla gestione delle tabelle e tutte le altre strutture del database delegando ad AWS l’onere di gestire il server e il sistema operativo dove viene eseguito il database. RDS è compatibile con i più comuni database: offre la scelta tra sette motori di database popolari tra cui Aurora-MySQL, Aurora-PostgreSQL, MySQL, MariaDB, PostgreSQL, Oracle e SQL Server, per quanto riguarda i database Aurora sarà introdotto un articolo dedicato e in questo articolo saranno descritti solo gli altri tipi.

Il servizio è studiato per la costruzioni di applicazioni di vario tipo: le varie features permettono di scalare i database (con le varie grandezze di engine) e creare strutture sicure con le tecniche di backup, snapshot, read-replica e multiAZ, si rimanda alla documentazione ufficiale per maggiori informazioni e dettagli, questo articolo non vuole essere un manuale d’uso ma solo una introduzione ai comandi per la gestione del servizio.
Per usare e configurare al meglio questo servizio bisogna sempre tener presente che

  • non è possibile collegarsi al server fisico dove è in esecuzione il server e si possono usare i vari tool di accesso da remoto, la password di amministrazione viene creata alla creazione e non può essere modificata
  • i database RDS vengono sempre “posizionati” all’interno di una VPC e di un SubnetGroup, inteso come gruppo di subnet, gli viene assegnato un endpoint di accesso non modificabile
  • con un security group è possibile definire la lista delle regole di accesso al database, è sconsigliata la configurazione di apertura delle porte a tutto internet con il CIDR 0.0.0.0/0
  • non esiste una console web con la quale accedere ai dati, la funzionalità di “Query Editor” è disponibile solo per i database Aurora. Anche in maniera programmatica con l’SDK non è possibile eseguire query da RDS non di tipo Aurora
  • da console è possibile configurare tutte le caratteristiche del DB come la gestione dei backup, entryption, storage, allarmi CloudWatch e monitoraggio

Quando si usa questo servizio bisogna sempre ricordare che non è gratuito ma il costo è calcolato in base al tipo di istanza e al tempo di utilizzo, si consiglia di controllare sempre la pagina ufficiale dei prezzi del servizio RDS, è possibile ridurre i costi usando le istanze riservate.


Come per tutti i servizi, la CLI di AWS mette a disposizione una lunga lista di comandi per la gestione dei Database gestiti tramite il servizio RDS. Il più rilevante comando è messo a disposizione per la creazione di istanze dove bisogna inserire le impostazioni base come la classe, subnet e il tipo di engine:

aws rds create-db-instance 
  --db-name database 
  --db-instance-identifier databaseid 
  --db-instance-class db.t3.small 
  --db-subnet-group-name subnet-xxxxxxxxxxxx 
  --engine aurora-mysql 
  --engine-version 5.7.23 
  --master-username username 
  --master-user-password 123password

Per ottenere l’elenco di tutte le istanze e di tutte le proprietà per ogni stanza si può usare il comando:

aws rds describe-db-instances

il cui output può essere semplicifico filtrando i dati di risposta:

aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier.S,DBInstanceClass.S,Engine.S,DBInstanceStatus.S]"

La libreria SDK mette a disposizione una libreria dedicata alla gestione dei database RDS da non confondere con la libreria per gestire i dati che funziona solo con i database aurora e non descritti in questo articolo. Il principale metodo DescribeDBInstances permette di recuperare da un ambiente cloud tutte le informazioni riguardo ai database RDS disponibli con ilmetodo, un semplice esempio di utilizzo è:

response = rds_client.describe_db_instances(
  #DBInstanceIdentifier=instance_id
)

Esempi di utilizzo di questa libreria può essere trovato al repository ufficiale.


Con CloudFormation è possibile creare e gestire database con RDS, la documentazione ufficiale descrive tutte le proprietà e le possibilità di configurazione, il tipo principale è DBInstance che necessita di alcuni parametri obbligatori, si riporta un semplice esempio funzionante:

RDS:
  Type: 'AWS::RDS::DBInstance'
  Properties:
    Engine: !Ref EngineRDS # MySQL
    DBName: !Ref DBName
    MultiAZ: !Ref MultiAZDatabase
    MasterUsername: !Ref DBUser
    MasterUserPassword: !Ref DBPassword
    DBInstanceClass: !Ref DBInstanceClass
    AllocatedStorage: !Ref DBAllocatedStorage
    VPCSecurityGroups: !GetAtt RDSSecurityGroup.GroupId
    DBSubnetGroupName: !Ref RDSSubnetGroup
    Tags:
      - Key: "Name"
        Value: !Ref AWS::StackName
        Publicly Accessible: !Ref DBPubliclyAccessible #True
    #StorageType: gp2

Il tipo di engine supportati sono ben descritti nella documentazione ufficiale.

L’esempio completo con la configurazione base di un SecurityGroup e la configurazione del SubnetGroup è disponibile al solito repository:

https://github.com/alnao/AWSCloudFormationExamples/tree/master/Esempio14rds
MENU