Il AWS Relational Database Service (RDS AWS) è un servizio Web che semplifica la configurazione e il funzionamento di un database relazionale nel cloud. Per saperne di più su RDS, cerca l'articolo "Come configurare un'istanza RDS MySql (Relation Database MySql ) su AWS".
AWS CloudFormation ci consente di utilizzare linguaggi di programmazione (yaml/json) o un semplice file di testo per modellare ed eseguire il provisioning di tutte le risorse necessarie per le nostre applicazioni. Questo ci fornisce un'unica fonte di verità per le nostre risorse AWS.
In questo articolo, vedremo i passaggi per creare un'istanza RDS MySql utilizzando Cloudformation Stack.
Prerequisiti
- Account AWS (crea se non ne hai uno).
- Conoscenza di base di Cloudformation Stack.
- Conoscenza di base dell'istanza RDS MySql (Relation Database MySql ) su AWS.
Cosa faremo?
- Accedi ad AWS.
- Crea un'istanza RDS MySql utilizzando Cloudformation Stack
Accedi ad AWS
- Fai clic qui per andare alla pagina di accesso di AWS.
Quando premiamo il link sopra, vedremo una pagina web come segue in cui ci viene richiesto di accedere utilizzando i nostri dettagli di accesso.

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

Crea un'istanza RDS MySql utilizzando Cloudformation.
Prima di creare un'istanza utilizzando Cloudformation Stack, copia il codice dal blocco seguente o scarica il modello da qui e salvalo sul tuo computer locale.
---
AWSTemplateFormatVersion: '2010-09-09'
Description: This stack creates an RDS MySql 5.7 Instance
Parameters:
Owner:
Description: Enter the Name of the owner for this Stack.
Type: String
Default: Name
VPC:
Description: Select VPC form the available VPCs in your account.
Type: AWS::EC2::VPC::Id
PrivateSubnet1:
Description: Select Private Subnet 1.
Type: AWS::EC2::Subnet::Id
PrivateSubnet2:
Description: Select Private Subnet 2.
Type: AWS::EC2::Subnet::Id
PrivateSubnet3:
Description: Select Private Subnet 3.
Type: AWS::EC2::Subnet::Id
MasterUsername:
Description: Database administration name.
Type: String
Default: rdsroot
MasterUserPassword:
NoEcho: 'true'
Description: Database administration password.
Type: String
MinLength: '8'
AllowedPattern: "[a-zA-Z0-9!?]*"
ConstraintDescription: Must only contain upper and lowercase letters and numbers
BackupRetentionPeriod:
Description: Enter Backup Retention Period in Days.
Type: Number
Default: '5'
MultiAvailabilityZone:
Description: Do you want to Enable Multi Availability Zones?
Type: String
Default: 'true'
AllowedValues:
- 'true'
- 'false'
TcpPort:
Description: Enter RDS Listening TCP Port number.
Type: Number
Default: '3306'
PreferredBackupWindow:
Description: Enter Preferred Backup Window Time.
Type: String
Default: 15:00-17:00
PreferredMaintenanceWindow:
Description: Enter Preferred Maintenance Window Time.
Type: String
Default: Sun:18:00-Sun:22:00
AllocatedStorage:
Default: '15'
Description: Enter the size of the database (Gb)
Type: Number
MinValue: '5'
MaxValue: '6144'
ConstraintDescription: Must be between 5-6144
SnapshotOnDelete:
Description: Do you want to create a Snapshot on instance delete?
Type: String
Default: 'true'
AllowedValues:
- 'true'
- 'false'
AutoMinorVersionUpgrade:
Description: Do you want to allow automatic minor version upgrade?
Type: String
Default: 'true'
AllowedValues:
- 'true'
- 'false'
InstanceType:
Description: Select Instance Type.
Type: String
Default: db.t2.micro
ConstraintDescription: Must be a valid EC2 instance type.
Mappings:
Settings:
MySQL:
Engine: MySQL
Version: '5.7'
Conditions:
ConfigureSnapshotOnDelete:
Fn::Equals:
- Ref: SnapshotOnDelete
- 'true'
Metadata:
AWS::CloudFormation::Interface:
ParameterGroups:
- Label:
default: Ownership
Parameters:
- Owner
- Label:
default: Network Configuration
Parameters:
- VPC
- PrivateSubnet1
- PrivateSubnet2
- PrivateSubnet3
- Label:
default: RDS Configuration
Parameters:
- InstanceType
- MasterUsername
- MasterUserPassword
- BackupRetentionPeriod
- PreferredBackupWindow
- PreferredMaintenanceWindow
- SnapshotOnDelete
- AllocatedStorage
- AutoMinorVersionUpgrade
- TcpPort
- MultiAvailabilityZone
ParameterLabels:
Owner:
default: Team or Individual Owner
InstanceType:
default: Instance Type
PrivateSubnet1:
default: Private Subnet 1
PrivateSubnet2:
default: Private Subnet 2
PrivateSubnet3:
default: Private Subnet 3
MasterUsername:
default: Master Username
MasterUserPassword:
default: Master User Password
BackupRetentionPeriod:
default: Backup Retention Period
PreferredBackupWindow:
default: Preferred Backup Window
PreferredMaintenanceWindow:
default: Preferred Maintenance Window
AllocatedStorage:
default: Allocated Storage
AutoMinorVersionUpgrade:
default: Auto Minor Version Upgrade
TcpPort:
default: TCP Port
MultiAvailabilityZone:
default: Multi Availability Zone?
SnapshotOnDelete:
default: Snapshot On Delete?
Resources:
RDSAccessSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Instance to RDS Access
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:
- ''
- - 'RDS Subnet Group for '
- 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 or Individual that Owns this Formation.
Value:
Ref: Owner
VPC:
Description: VPC Used
Value:
Ref: VPC
RDSHostname:
Description: RDS Hostname
Value:
Fn::GetAtt:
- DbInstance
- Endpoint.Address
RDSPort:
Description: RDS Port
Value:
Fn::GetAtt:
- DbInstance
- Endpoint.Port
DbSubnetGroup:
Description: DB Subnet Group Created.
Value:
Ref: DbSubnetGroup
RDSAccessSecurityGroup:
Description: RDS Access Security Group Created.
Value:
Ref: RDSAccessSecurityGroup
PrivateSubnet1:
Description: Private Subnet 1 Deployment
Value:
Ref: PrivateSubnet1
PrivateSubnet2:
Description: Private Subnet 2 Deployment
Value:
Ref: PrivateSubnet2
PrivateSubnet3:
Description: Private Subnet 3 Deployment
Value:
Ref: PrivateSubnet3
BackupRetentionPeriod:
Description: Backup Retention Period in Days
Value:
Ref: BackupRetentionPeriod
MultiAvailabilityZone:
Description: Enable Multi Availability Zones?
Value:
Ref: MultiAvailabilityZone
SnapshotOnDelete:
Description: Create Snapshot on Delete?
Value:
Ref: SnapshotOnDelete
PreferredBackupWindow:
Description: Preferred Backup Window
Value:
Ref: PreferredBackupWindow
PreferredMaintenanceWindow:
Description: Preferred Maintenance Window
Value:
Ref: PreferredMaintenanceWindow
AllocatedStorage:
Description: Allocated Storage in GB
Value:
Ref: AllocatedStorage
Una volta che hai il modello con te sulla tua macchina locale, vai alla console AWS e fai clic su "Servizi" dalla barra dei menu in alto e cerca "Cloudformation".

Vedrai la dashboard principale di cloudformation come segue. Fai clic sul pulsante "Crea stack" per creare uno stack per creare un'istanza RDS MySql.

Fai clic sul pulsante di opzione "Carica un file modello" e seleziona il modello che hai salvato dal tuo computer locale e fai clic sul pulsante "Avanti".

Specifica un nome a tua scelta nello stack e compila i dettagli richiesti e fai clic su "Avanti" per procedere ulteriormente.


Puoi fornire i tag a Cloudformation Stack che possono essere applicati all'istanza RDS MySql che verrà creata dallo stack. Fare clic su "Avanti" per procedere.

Scorri verso il basso e fai clic su "Crea stack" per creare lo stack.

La creazione richiederà del tempo. Puoi vedere l'azione intrapresa sotto gli eventi.

Per vedere lo stato dell'istanza RDS MySql in fase di creazione, fai clic su "Servizi" e cerca "RDS".

Nella dashboard principale, fai clic su "Istanze database".

Qui puoi vedere che lo stato dell'istanza è "Modifica in corso". Questa operazione richiederà del tempo per essere creata ed essere pronta per l'uso.

Negli eventi Cloudformation Stack, puoi vedere che dopo un po' di tempo, una volta creata l'istanza RDS MySql, lo stato è "CREATE_COMPLETE"

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

Per visualizzare maggiori dettagli sull'istanza RDS MySql, fare clic su Istanza RDS MySql --> Connettività e sicurezza.
Per connetterti all'istanza RDS MySql, puoi utilizzare l'endpoint fornito dall'istanza.

Quando l'istanza non è più necessaria, elimina lo stack di Cloudformation dal 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.