AWS Relational Database Service (RDS AWS) est un service Web qui facilite la configuration et l'exploitation d'une base de données relationnelle dans le cloud. Pour en savoir plus sur RDS, recherchez l'article "Comment configurer une instance RDS MySql (Relation Database MySql) sur AWS".
AWS CloudFormation nous permet d'utiliser des langages de programmation (yaml/json) ou un simple fichier texte pour modéliser et provisionner toutes les ressources nécessaires à nos applications. Cela nous donne une source unique de vérité pour nos ressources AWS.
Dans cet article, nous verrons les étapes pour créer une instance RDS MySql à l'aide de Cloudformation Stack.
Pré-requis
- Compte AWS (créez-le si vous n'en avez pas).
- Compréhension de base de Cloudformation Stack.
- Compréhension de base de l'instance RDS MySql (Relation Database MySql) sur AWS.
Qu'allons-nous faire ?
- Connectez-vous à AWS.
- Créer une instance RDS MySql à l'aide de Cloudformation Stack
Connexion à AWS
- Cliquez ici pour accéder à la page de connexion AWS.
Lorsque nous cliquons sur le lien ci-dessus, nous verrons une page Web comme suit où nous devons nous connecter en utilisant nos informations de connexion.
Une fois que nous aurons réussi à nous connecter à AWS, nous verrons la console principale avec tous les services répertoriés.
Créer une instance RDS MySql à l'aide de Cloudformation.
Avant de créer une instance à l'aide de Cloudformation Stack, copiez le code du bloc suivant ou téléchargez le modèle ici et enregistrez-le sur votre ordinateur local.
--- 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
Une fois que vous avez le modèle avec vous sur votre machine locale, accédez à la console AWS et cliquez sur "Services" dans la barre de menu supérieure et recherchez "Cloudformation".
Vous verrez le tableau de bord principal de cloudformation comme suit. Cliquez sur le bouton "Créer une pile" pour créer une pile afin de créer une instance RDS MySql.
Cliquez sur le bouton radio "Télécharger un fichier de modèle" et sélectionnez le modèle que vous avez enregistré à partir de votre machine locale et cliquez sur le bouton "Suivant".
Spécifiez un nom de votre choix pour la pile et remplissez les détails requis et cliquez sur "Suivant" pour continuer.
Vous pouvez fournir les balises à Cloudformation Stack qui peuvent être appliquées à l'instance RDS MySql qui sera créée par la pile. Cliquez sur "Suivant" pour continuer.
Faites défiler vers le bas et cliquez sur "Créer une pile" pour créer la pile.
La création prendra du temps. Vous pouvez voir les actions entreprises sous les événements.
Pour voir l'état de l'instance RDS MySql en cours de création, cliquez sur "Services" et recherchez "RDS".
Sur le tableau de bord principal, cliquez sur "Instances DB".
Ici, vous pouvez voir que le statut de l'instance est "Modifying". Cela prendra un certain temps pour être créé et prêt à l'emploi.
Dans les événements Cloudformation Stack, vous pouvez voir qu'après un certain temps, une fois l'instance RDS MySql créée, le statut est "CREATE_COMPLETE"
Dans la console RDS, vous pouvez maintenant voir que le statut est "Disponible".
Pour voir plus de détails sur l'instance RDS MySql, cliquez sur l'instance RDS MySql --> Connectivité et sécurité.
Pour vous connecter à l'instance RDS MySql, vous pouvez utiliser le point de terminaison fourni par l'instance.
Une fois que l'instance n'est plus nécessaire, supprimez la pile Cloudformation du tableau de bord principal Cloudformation pour économiser sur le coût.
Conclusion
Dans cet article, nous avons vu les étapes pour créer une instance RDS MySql à l'aide de Cloudformation Stack.