GNU/Linux >> Tutoriels Linux >  >> Linux

Utiliser Cloudformation pour créer une instance RDS MySql sur AWS

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

  1. Compte AWS (créez-le si vous n'en avez pas).
  2. Compréhension de base de Cloudformation Stack.
  3. Compréhension de base de l'instance RDS MySql (Relation Database MySql) sur AWS.

Qu'allons-nous faire ?

  1. Connectez-vous à AWS.
  2. Créer une instance RDS MySql à l'aide de Cloudformation Stack

Connexion à AWS

  1. 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.


Linux
  1. Créer une instance EC2 sur AWS à l'aide de Terraform

  2. Comment créer une instance RDS sur AWS à l'aide de Terraform

  3. Créer une nouvelle base de données et l'utiliser dans MySQL/MariaDB

  4. Comment utiliser l'assistant de base de données MySQL cPanel

  5. Utiliser les conseils du planificateur pour créer un serveur

Créer un compartiment S3 sur AWS à l'aide de Terraform

Comment créer une instance Amazon AWS EC2 à l'aide de Python Boto3

Comment créer une instance RDS à l'aide de Python Boto3 sur AWS

Comment créer une table DynamoDB dans AWS

Comment utiliser Cloudformation pour créer des files d'attente SQS sur AWS

Comment créer une instance Ubuntu EC2 sur AWS