AWS RDS · 6 min read · Feb 04, 2026

Utilizzare Cloudformation per creare un'istanza RDS MySql su AWS

Il Servizio di Database Relazionali (AWS RDS) è un servizio web che semplifica la configurazione e l’operazione di un database relazionale nel cloud. Per comprendere meglio RDS cerca l’articolo “Come configurare un’istanza RDS MySql (Database Relazionale MySql) su AWS”.

AWS CloudFormation ci consente di utilizzare linguaggi di programmazione (yaml/json) o un semplice file di testo per modellare e fornire tutte le risorse necessarie per le nostre applicazioni. Questo ci fornisce una singola fonte di verità per le nostre risorse AWS.

In questo articolo, vedremo i passaggi per creare un’istanza RDS MySql utilizzando Cloudformation Stack.

Requisiti

  1. Account AWS (Crea se non ne hai uno).
  2. Comprensione di base di Cloudformation Stack.
  3. Comprensione di base dell’istanza RDS MySql (Database Relazionale MySql) su AWS.

Cosa faremo?

  1. Accedi ad AWS.
  2. Crea un’istanza RDS MySql utilizzando Cloudformation Stack

Accedi ad AWS

  1. Clicca qui per andare alla pagina di accesso di AWS.

Quando clicchiamo sul link sopra, vedremo una pagina web come segue dove siamo tenuti ad accedere utilizzando i nostri dettagli di accesso.

Accedi ad AWS

Una volta effettuato l’accesso ad AWS con successo, vedremo la console principale con tutti i servizi elencati.

Console di gestione AWS

Crea un’istanza RDS MySql utilizzando Cloudformation.

Prima di creare un’istanza utilizzando Cloudformation Stack, copia il codice dal seguente blocco o scarica il modello da qui e salvalo sul tuo computer locale.

---
AWSTemplateFormatVersion: '2010-09-09'
Description: Questo stack crea un'istanza RDS MySql 5.7
Parameters:
  Owner:
    Description: Inserisci il nome del proprietario per questo Stack.
    Type: String
    Default: Nome
  VPC:
    Description: Seleziona VPC tra le VPC disponibili nel tuo account.
    Type: AWS::EC2::VPC::Id
  PrivateSubnet1:
    Description: Seleziona Subnet Privata 1.
    Type: AWS::EC2::Subnet::Id
  PrivateSubnet2:
    Description: Seleziona Subnet Privata 2.
    Type: AWS::EC2::Subnet::Id
  PrivateSubnet3:
    Description: Seleziona Subnet Privata 3.
    Type: AWS::EC2::Subnet::Id
  MasterUsername:
    Description: Nome dell'amministratore del database.
    Type: String
    Default: rdsroot
  MasterUserPassword:
    NoEcho: 'true'
    Description: Password dell'amministratore del database.
    Type: String
    MinLength: '8'
    AllowedPattern: "[a-zA-Z0-9!?]*"
    ConstraintDescription: Deve contenere solo lettere maiuscole e minuscole e numeri
  BackupRetentionPeriod:
    Description: Inserisci il periodo di conservazione del backup in giorni.
    Type: Number
    Default: '5'
  MultiAvailabilityZone:
    Description: Vuoi abilitare più zone di disponibilità?
    Type: String
    Default: 'true'
    AllowedValues:
    - 'true'
    - 'false'
  TcpPort:
    Description: Inserisci il numero di porta TCP di ascolto RDS.
    Type: Number
    Default: '3306'
  PreferredBackupWindow:
    Description: Inserisci l'orario della finestra di backup preferita.
    Type: String
    Default: 15:00-17:00
  PreferredMaintenanceWindow:
    Description: Inserisci l'orario della finestra di manutenzione preferita.
    Type: String
    Default: Sun:18:00-Sun:22:00
  AllocatedStorage:
    Default: '15'
    Description: Inserisci la dimensione del database (Gb)
    Type: Number
    MinValue: '5'
    MaxValue: '6144'
    ConstraintDescription: Deve essere compreso tra 5-6144
  SnapshotOnDelete:
    Description: Vuoi creare uno snapshot alla cancellazione dell'istanza?
    Type: String
    Default: 'true'
    AllowedValues:
    - 'true'
    - 'false'
  AutoMinorVersionUpgrade:
    Description: Vuoi consentire l'aggiornamento automatico della versione minore?
    Type: String
    Default: 'true'
    AllowedValues:
    - 'true'
    - 'false'
  InstanceType:
    Description: Seleziona il tipo di istanza.
    Type: String
    Default: db.t2.micro
    ConstraintDescription: Deve essere un tipo di istanza EC2 valido.
Mappings:
  Settings:
    MySQL:
      Engine: MySQL
      Version: '5.7'
Conditions:
  ConfigureSnapshotOnDelete:
    Fn::Equals:
    - Ref: SnapshotOnDelete
    - 'true'

Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
    - Label:
        default: Proprietà
      Parameters:
      - Owner
    - Label:
        default: Configurazione di rete
      Parameters:
      - VPC
      - PrivateSubnet1
      - PrivateSubnet2
      - PrivateSubnet3
    - Label:
        default: Configurazione RDS
      Parameters:
      - InstanceType
      - MasterUsername
      - MasterUserPassword
      - BackupRetentionPeriod
      - PreferredBackupWindow
      - PreferredMaintenanceWindow
      - SnapshotOnDelete
      - AllocatedStorage
      - AutoMinorVersionUpgrade
      - TcpPort
      - MultiAvailabilityZone
    ParameterLabels:
      Owner:
        default: Proprietario del team o individuale
      InstanceType:
        default: Tipo di istanza
      PrivateSubnet1:
        default: Subnet Privata 1
      PrivateSubnet2:
        default: Subnet Privata 2
      PrivateSubnet3:
        default: Subnet Privata 3
      MasterUsername:
        default: Nome utente principale
      MasterUserPassword:
        default: Password utente principale
      BackupRetentionPeriod:
        default: Periodo di conservazione del backup
      PreferredBackupWindow:
        default: Finestra di backup preferita
      PreferredMaintenanceWindow:
        default: Finestra di manutenzione preferita
      AllocatedStorage:
        default: Spazio di archiviazione allocato
      AutoMinorVersionUpgrade:
        default: Aggiornamento automatico della versione minore
      TcpPort:
        default: Porta TCP
      MultiAvailabilityZone:
        default: Zone di disponibilità multiple?
      SnapshotOnDelete:
        default: Snapshot alla cancellazione?

Resources:
  RDSAccessSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Accesso all'istanza RDS
      VpcId:
        Ref: VPC
      Tags:
      - Key: Name
        Value:
          Fn::Join:
          - ''
          - - Ref: AWS::StackName
            - "-rds"
      - Key: Owner
        Value:
          Ref: Owner
  AccessSecurityGroupIngress:
    Type: AWS::EC2::SecurityGroupIngress
    DependsOn: RDSAccessSecurityGroup
    Properties:
      GroupId:
        Ref: RDSAccessSecurityGroup
      IpProtocol: tcp
      FromPort:
        Ref: TcpPort
      ToPort:
        Ref: TcpPort
      SourceSecurityGroupId:
        Ref: RDSAccessSecurityGroup
  DbSubnetGroup:
    Type: AWS::RDS::DBSubnetGroup
    Properties:
      DBSubnetGroupDescription:
        Fn::Join:
        - ''
        - - 'Gruppo di subnet RDS per '
          - Ref: AWS::StackName
      SubnetIds:
      - Ref: PrivateSubnet1
      - Ref: PrivateSubnet2
      - Ref: PrivateSubnet3
      Tags:
      - Key: Name
        Value:
          Ref: AWS::StackName
      - Key: Owner
        Value:
          Ref: Owner
  DbInstance:
    Type: AWS::RDS::DBInstance
    DeletionPolicy: Snapshot
    DependsOn:
    - DbSubnetGroup
    - RDSAccessSecurityGroup
    Properties:
      AllocatedStorage:
        Ref: AllocatedStorage
      AllowMajorVersionUpgrade: 'false'
      AutoMinorVersionUpgrade:
        Ref: AutoMinorVersionUpgrade
      BackupRetentionPeriod:
        Ref: BackupRetentionPeriod
      DBInstanceClass:
        Ref: InstanceType
      DBInstanceIdentifier:
        Ref: AWS::StackName
      DBSubnetGroupName:
        Ref: DbSubnetGroup
      Engine:
        Fn::FindInMap:
        - Settings
        - MySQL
        - Engine
      EngineVersion:
        Fn::FindInMap:
        - Settings
        - MySQL
        - Version
      MasterUsername:
        Ref: MasterUsername
      MasterUserPassword:
        Ref: MasterUserPassword
      MultiAZ:
        Ref: MultiAvailabilityZone
      Port:
        Ref: TcpPort
      PreferredBackupWindow:
        Ref: PreferredBackupWindow
      PreferredMaintenanceWindow:
        Ref: PreferredMaintenanceWindow
      PubliclyAccessible: 'false'
      StorageEncrypted: 'false'
      StorageType: gp2
      VPCSecurityGroups:
      - Ref: RDSAccessSecurityGroup
      Tags:
      - Key: Name
        Value:
          Ref: AWS::StackName
      - Key: Owner
        Value:
          Ref: Owner

Outputs:
  Owner:
    Description: Team o individuo che possiede questa formazione.
    Value:
      Ref: Owner
  VPC:
    Description: VPC utilizzato
    Value:
      Ref: VPC
  RDSHostname:
    Description: Nome host RDS
    Value:
      Fn::GetAtt:
      - DbInstance
      - Endpoint.Address
  RDSPort:
    Description: Porta RDS
    Value:
      Fn::GetAtt:
      - DbInstance
      - Endpoint.Port
  DbSubnetGroup:
    Description: Gruppo di subnet DB creato.
    Value:
      Ref: DbSubnetGroup
  RDSAccessSecurityGroup:
    Description: Gruppo di sicurezza per l'accesso RDS creato.
    Value:
      Ref: RDSAccessSecurityGroup
  PrivateSubnet1:
    Description: Distribuzione Subnet Privata 1
    Value:
      Ref: PrivateSubnet1
  PrivateSubnet2:
    Description: Distribuzione Subnet Privata 2
    Value:
      Ref: PrivateSubnet2
  PrivateSubnet3:
    Description: Distribuzione Subnet Privata 3
    Value:
      Ref: PrivateSubnet3
  BackupRetentionPeriod:
    Description: Periodo di conservazione del backup in giorni
    Value:
      Ref: BackupRetentionPeriod
  MultiAvailabilityZone:
    Description: Abilitare più zone di disponibilità?
    Value:
      Ref: MultiAvailabilityZone
  SnapshotOnDelete:
    Description: Creare uno snapshot alla cancellazione?
    Value:
      Ref: SnapshotOnDelete
  PreferredBackupWindow:
    Description: Finestra di backup preferita
    Value:
      Ref: PreferredBackupWindow
  PreferredMaintenanceWindow:
    Description: Finestra di manutenzione preferita
    Value:
      Ref: PreferredMaintenanceWindow
  AllocatedStorage:
    Description: Spazio di archiviazione allocato in GB
    Value:
      Ref: AllocatedStorage

Una volta che hai il modello sul tuo computer locale, vai alla console AWS e clicca su “Servizi” dalla barra del menu in alto e cerca “Cloudformation”.

Cloudformation

Vedrai il cruscotto principale di cloudformation come segue. Clicca sul pulsante “Crea Stack” per creare uno stack per creare un’istanza RDS MySql.

Stack

Clicca sul pulsante di opzione “Carica un file di modello” e seleziona il modello che hai salvato dal tuo computer locale e clicca sul pulsante “Avanti”.

Crea Cloudformation Stack

Specifica un nome a tua scelta per lo stack e compila i dettagli richiesti, quindi clicca su “Avanti” per procedere ulteriormente.

Specifica i dettagli dello stack

Password utente principale

Puoi fornire i tag allo Stack Cloudformation che possono essere applicati all’istanza RDS MySql che verrà creata dallo stack. Clicca su “Avanti” per procedere.

Tag

Scorri verso il basso e clicca su “Crea stack” per creare lo stack.

Crea Stack

La creazione richiederà del tempo. Puoi vedere l’azione in corso sotto eventi.

RDS MySQL

Per vedere lo stato dell’istanza RDS MySql in fase di creazione, clicca su “Servizi” e cerca “RDS”.

RDS

Nella dashboard principale, clicca su “DB Instances”.

Crea database

Qui, puoi vedere che lo stato dell’istanza è “Modificando”. Ci vorrà del tempo per essere creata e pronta per l’uso.

Elenco database RDS

Negli eventi dello Stack Cloudformation, puoi vedere che dopo un po’, una volta creata l’istanza RDS MySql, lo stato è “CREATE_COMPLETE”

Registro azioni RDS

Nella Console RDS, ora puoi vedere che lo stato è “Disponibile”.

Database MySQL su AWS

Per vedere ulteriori dettagli sull’istanza RDS MySql, clicca sull’istanza RDS MySql –> Connettività e Sicurezza.

Per connetterti all’istanza RDS MySql, puoi utilizzare l’Endpoint fornito dall’istanza.

Dettagli database

Una volta che l’istanza non è più necessaria, elimina lo Stack Cloudformation dalla Dashboard principale di Cloudformation per risparmiare sui costi.

Conclusione


In questo articolo, abbiamo visto i passaggi per creare un’istanza RDS MySql utilizzando Cloudformation Stack.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.