Gebruik Cloudformation om een RDS MySql Instance op AWS te maken
De AWS Relational Database Service (RDS AWS) is een webdienst die het gemakkelijker maakt om een relationele databank in de cloud op te zetten & te beheren. Om meer te begrijpen over RDS zoek je naar het artikel“How to setup an RDS MySql (Relation Database MySql ) instance on AWS“.
Met AWS CloudFormation kunnen we programmeertalen (yaml/json) of een eenvoudig tekstbestand gebruiken om alle middelen die we voor onze toepassingen nodig hebben te modelleren en te provisionen. Dit geeft ons een enkele bron van waarheid voor onze AWS bronnen.
In dit artikel zien we de stappen om een RDS MySql Instance te maken met behulp van Cloudformation Stack.
Pre-requisites
- AWS Account (Maak aan als je er geen hebt).
- Basiskennis van Cloudformation Stack.
- Basiskennis vanRDS MySql (Relation Database MySql ) instance op AWS.
Wat zullen we doen?
- Log in op AWS.
- Maak een RDS MySql Instance met behulp van Cloudformation Stack
Login op AWS
- Klik op hier om naar de AWS Login pagina te gaan.
Als we op de bovenstaande link klikken, zien we een webpagina als volgt waar we moeten inloggen met onze inloggegevens.
Zodra we met succes op AWS zijn ingelogd, zien we de hoofdconsole met alle genoemde diensten.
Maak een RDS MySql Instance met Cloudformation.
Voor we een instance maken met Cloudformation Stack, kopieer je de code uit het volgende blok of download je het sjabloon vanhier en sla je het op je lokale machine op.
--- 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
Als je het sjabloon bij je hebt op je lokale machine, ga dan naar de AWS console en klik op “Services” in de bovenste menubalk en zoek naar “Cloudformation”.
Je ziet het hoofddashboard van Cloudformation als volgt. Klik op de knop “Create Stack” om een stack te maken om een RDS MySql Instance te maken.
Klik op het keuzerondje “Upload a template file” en kies het sjabloon dat je van je lokale machine hebt opgeslagen en klik op de knop “Next”.
Geef een naam naar keuze aan de stack en vul de vereiste gegevens in en klik op “Next” om verder te gaan.
Je kunt de tags aan Cloudformation Stack geven die toegepast kunnen worden op de RDS MySql Instance die door de stack aangemaakt zal worden. Klik op “Next” om verder te gaan.
Scroll naar beneden en klik op “Create stack” om de stack aan te maken.
Het aanmaken duurt enige tijd. Je kunt de actie die ondernomen wordt zien onder events.
Om de status te zien van de RDS MySql instantie die gemaakt wordt, klik je op “Services” en zoek je naar “RDS”.
Op het hoofddashboard klik je op “DB Instances”.
Hier zie je dat de status van de instantie “Modifying” is. Het zal even duren voor deze is aangemaakt en klaar is voor gebruik.
In de Cloudformation Stack gebeurtenissen zie je dat na enige tijd, als de RDS MySql Instance eenmaal gemaakt is, de status “CREATE_COMPLETE” is.
In de RDS Console zie je nu dat de status “Available” is.
Om meer details over de RDS MySql Instance te zien, klik je op de RDS MySql Instance –> Connectivity & Security.
Om verbinding te maken met de RDS MySql Instance kun je het eindpunt gebruiken dat door de instance wordt verschaft.
Als de instantie niet meer nodig is, verwijder je de Cloudformation Stack uit het Cloudformation Main Dashboard om op de kosten te besparen.
Conclusie
In dit artikel zagen we de stappen om een RDS MySql instance te maken met Cloudformation Stack.