Utilice Cloudformation para crear una instancia RDS MySql en AWS

Iniciar sesión en AWS

El servicio de base de datos relacional de AWS (RDS AWS) es un servicio web que facilita la configuración y el funcionamiento de una base de datos relacional en la nube. Para obtener más información sobre RDS, busque el artículo «Cómo configurar una instancia de RDS MySql (Relation Database MySql) en AWS».

AWS CloudFormation nos permite usar lenguajes de programación (yaml/json) o un archivo de texto simple para modelar y aprovisionar todos los recursos necesarios para nuestras aplicaciones. Esto nos brinda una única fuente de información para nuestros recursos de AWS.

En este artículo, veremos los pasos para crear una instancia RDS MySql usando Cloudformation Stack.

requisitos previos

  1. Cuenta AWS (Crear si no tienes uno).
  2. Comprensión básica de Cloudformation Stack.
  3. Comprensión básica de la instancia RDS MySql (Relation Database MySql) en AWS.

¿Que haremos?

  1. Inicie sesión en AWS.
  2. Cree una instancia RDS MySql usando Cloudformation Stack

Iniciar sesión en AWS

  1. Hacer clic aquí para ir a la página de inicio de sesión de AWS.

Cuando hagamos clic en el enlace anterior, veremos una página web como la siguiente donde debemos iniciar sesión con nuestros datos de inicio de sesión.

Iniciar sesión en AWS

Una vez que iniciemos sesión en AWS con éxito, veremos la consola principal con todos los servicios enumerados.

Consola de administración de AWS

Cree una instancia RDS MySql usando Cloudformation.

Antes de crear una instancia usando Cloudformation Stack, copie el código del siguiente bloque o descargue la plantilla de aquí y guárdelo en su máquina 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

Una vez que tenga la plantilla con usted en su máquina local, vaya a la consola de AWS y haga clic en «Servicios» en la barra de menú superior y busque «Cloudformation».

formación de nubes

Verá el panel principal de formación de la nube de la siguiente manera. Haga clic en el botón «Crear pila» para crear una pila para crear una instancia RDS MySql.

pilas

Haga clic en el botón de radio «Cargar un archivo de plantilla» y seleccione la plantilla que ha guardado de su máquina local y haga clic en el botón «Siguiente».

Crear pila de formación en la nube

Especifique un nombre de su elección para la pila y complete los detalles requeridos y haga clic en «Siguiente» para continuar.

Especificar detalles de la pila

Contraseña de usuario maestro

Puede proporcionar las etiquetas a Cloudformation Stack que se pueden aplicar a la instancia RDS MySql que creará la pila. Haga clic en «Siguiente» para continuar.

Etiquetas

Desplácese hacia abajo y haga clic en «Crear pila» para crear la pila.

Crear pila

La creación llevará algún tiempo. Puede ver la acción que se está realizando en los eventos.

MySQL RDS

Para ver el estado de la instancia RDS MySql que se está creando, haga clic en «Servicios» y busque «RDS».

RDS

En el tablero principal, haga clic en «Instancias de base de datos».

Crear base de datos

Aquí puede ver que el estado de la instancia es «Modificando». Esto tomará algún tiempo para ser creado y estar listo para su uso.

Lista de base de datos RDS

En los eventos de Cloudformation Stack, puede ver que después de un tiempo, una vez que se crea la instancia RDS MySql, el estado es «CREATE_COMPLETE»

Registro de acciones de RDS

En RDS Console, ahora puede ver que el estado es «Disponible».

Base de datos MySQL en AWS

Para ver más detalles sobre la instancia RDS MySql, haga clic en Instancia RDS MySql –> Conectividad y seguridad.

Para conectarse a la instancia MySql de RDS, puede usar el punto final proporcionado por la instancia.

Detalles de la base de datos

Una vez que la instancia ya no sea necesaria, elimine la pila de Cloudformation del panel principal de Cloudformation para ahorrar costos.

Conclusión

En este artículo, vimos los pasos para crear una instancia RDS MySql usando Cloudformation Stack.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *