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.