AWS RDS · 7 min read · Feb 04, 2026

Usar Cloudformation para crear una instancia RDS MySql en AWS

El AWS Relational Database Service (RDS AWS) es un servicio web que facilita la configuración y operación de una base de datos relacional en la nube. Para entender más sobre RDS, busca el artículo “Cómo configurar una instancia RDS MySql (Base de Datos Relacional 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 da una única fuente de verdad para nuestros recursos de AWS.

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

Pre-requisitos

  1. Cuenta de AWS (Crea una si no tienes una).
  2. Comprensión básica de Cloudformation Stack.
  3. Comprensión básica de la instancia RDS MySql (Base de Datos Relacional MySql) en AWS.

¿Qué haremos?

  1. Iniciar sesión en AWS.
  2. Crear una instancia RDS MySql usando Cloudformation Stack

Iniciar sesión en AWS

  1. Haz 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 se nos requiere iniciar sesión usando nuestros datos de acceso.

Iniciar sesión en AWS

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

Consola de administración de AWS

Crear una instancia RDS MySql usando Cloudformation.

Antes de crear una instancia usando Cloudformation Stack, copia el código del siguiente bloque o descarga la plantilla desde aquí y guárdala en tu máquina local.

---
AWSTemplateFormatVersion: '2010-09-09'
Description: Esta pila crea una instancia RDS MySql 5.7
Parameters:
  Owner:
    Description: Ingresa el nombre del propietario de esta pila.
    Type: String
    Default: Nombre
  VPC:
    Description: Selecciona VPC de las VPC disponibles en tu cuenta.
    Type: AWS::EC2::VPC::Id
  PrivateSubnet1:
    Description: Selecciona la Subred Privada 1.
    Type: AWS::EC2::Subnet::Id
  PrivateSubnet2:
    Description: Selecciona la Subred Privada 2.
    Type: AWS::EC2::Subnet::Id
  PrivateSubnet3:
    Description: Selecciona la Subred Privada 3.
    Type: AWS::EC2::Subnet::Id
  MasterUsername:
    Description: Nombre de administración de la base de datos.
    Type: String
    Default: rdsroot
  MasterUserPassword:
    NoEcho: 'true'
    Description: Contraseña de administración de la base de datos.
    Type: String
    MinLength: '8'
    AllowedPattern: "[a-zA-Z0-9!?]*"
    ConstraintDescription: Debe contener solo letras mayúsculas y minúsculas y números
  BackupRetentionPeriod:
    Description: Ingresa el período de retención de copias de seguridad en días.
    Type: Number
    Default: '5'
  MultiAvailabilityZone:
    Description: ¿Quieres habilitar múltiples zonas de disponibilidad?
    Type: String
    Default: 'true'
    AllowedValues:
    - 'true'
    - 'false'
  TcpPort:
    Description: Ingresa el número de puerto TCP de escucha de RDS.
    Type: Number
    Default: '3306'
  PreferredBackupWindow:
    Description: Ingresa el tiempo de ventana de copia de seguridad preferido.
    Type: String
    Default: 15:00-17:00
  PreferredMaintenanceWindow:
    Description: Ingresa el tiempo de ventana de mantenimiento preferido.
    Type: String
    Default: Dom:18:00-Dom:22:00
  AllocatedStorage:
    Default: '15'
    Description: Ingresa el tamaño de la base de datos (Gb)
    Type: Number
    MinValue: '5'
    MaxValue: '6144'
    ConstraintDescription: Debe estar entre 5-6144
  SnapshotOnDelete:
    Description: ¿Quieres crear una instantánea al eliminar la instancia?
    Type: String
    Default: 'true'
    AllowedValues:
    - 'true'
    - 'false'
  AutoMinorVersionUpgrade:
    Description: ¿Quieres permitir la actualización automática de la versión menor?
    Type: String
    Default: 'true'
    AllowedValues:
    - 'true'
    - 'false'
  InstanceType:
    Description: Selecciona el tipo de instancia.
    Type: String
    Default: db.t2.micro
    ConstraintDescription: Debe ser un tipo de instancia EC2 válido.
Mappings:
  Settings:
    MySQL:
      Engine: MySQL
      Version: '5.7'
Conditions:
  ConfigureSnapshotOnDelete:
    Fn::Equals:
    - Ref: SnapshotOnDelete
    - 'true'

Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
    - Label:
        default: Propiedad
      Parameters:
      - Owner
    - Label:
        default: Configuración de Red
      Parameters:
      - VPC
      - PrivateSubnet1
      - PrivateSubnet2
      - PrivateSubnet3
    - Label:
        default: Configuración de RDS
      Parameters:
      - InstanceType
      - MasterUsername
      - MasterUserPassword
      - BackupRetentionPeriod
      - PreferredBackupWindow
      - PreferredMaintenanceWindow
      - SnapshotOnDelete
      - AllocatedStorage
      - AutoMinorVersionUpgrade
      - TcpPort
      - MultiAvailabilityZone
    ParameterLabels:
      Owner:
        default: Propietario del equipo o individuo
      InstanceType:
        default: Tipo de instancia
      PrivateSubnet1:
        default: Subred Privada 1
      PrivateSubnet2:
        default: Subred Privada 2
      PrivateSubnet3:
        default: Subred Privada 3
      MasterUsername:
        default: Nombre de usuario maestro
      MasterUserPassword:
        default: Contraseña de usuario maestro
      BackupRetentionPeriod:
        default: Período de retención de copias de seguridad
      PreferredBackupWindow:
        default: Ventana de copia de seguridad preferida
      PreferredMaintenanceWindow:
        default: Ventana de mantenimiento preferida
      AllocatedStorage:
        default: Almacenamiento asignado
      AutoMinorVersionUpgrade:
        default: Actualización automática de versión menor
      TcpPort:
        default: Puerto TCP
      MultiAvailabilityZone:
        default: ¿Múltiples zonas de disponibilidad?
      SnapshotOnDelete:
        default: ¿Instantánea al eliminar?

Resources:
  RDSAccessSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Acceso a la instancia RDS
      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:
        - ''
        - - 'Grupo de Subred RDS para '
          - 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: Equipo o individuo que posee esta formación.
    Value:
      Ref: Owner
  VPC:
    Description: VPC utilizada
    Value:
      Ref: VPC
  RDSHostname:
    Description: Nombre de host RDS
    Value:
      Fn::GetAtt:
      - DbInstance
      - Endpoint.Address
  RDSPort:
    Description: Puerto RDS
    Value:
      Fn::GetAtt:
      - DbInstance
      - Endpoint.Port
  DbSubnetGroup:
    Description: Grupo de subred DB creado.
    Value:
      Ref: DbSubnetGroup
  RDSAccessSecurityGroup:
    Description: Grupo de seguridad de acceso RDS creado.
    Value:
      Ref: RDSAccessSecurityGroup
  PrivateSubnet1:
    Description: Despliegue de Subred Privada 1
    Value:
      Ref: PrivateSubnet1
  PrivateSubnet2:
    Description: Despliegue de Subred Privada 2
    Value:
      Ref: PrivateSubnet2
  PrivateSubnet3:
    Description: Despliegue de Subred Privada 3
    Value:
      Ref: PrivateSubnet3
  BackupRetentionPeriod:
    Description: Período de retención de copias de seguridad en días
    Value:
      Ref: BackupRetentionPeriod
  MultiAvailabilityZone:
    Description: ¿Habilitar múltiples zonas de disponibilidad?
    Value:
      Ref: MultiAvailabilityZone
  SnapshotOnDelete:
    Description: ¿Crear instantánea al eliminar?
    Value:
      Ref: SnapshotOnDelete
  PreferredBackupWindow:
    Description: Ventana de copia de seguridad preferida
    Value:
      Ref: PreferredBackupWindow
  PreferredMaintenanceWindow:
    Description: Ventana de mantenimiento preferida
    Value:
      Ref: PreferredMaintenanceWindow
  AllocatedStorage:
    Description: Almacenamiento asignado en GB
    Value:
      Ref: AllocatedStorage

Una vez que tengas la plantilla en tu máquina local, ve a la consola de AWS y haz clic en “Servicios” en la barra de menú superior y busca “Cloudformation”.

Cloudformation

Verás el panel principal de Cloudformation como sigue. Haz clic en el botón “Crear Pila” para crear una pila para crear una instancia RDS MySql.

Pilas

Haz clic en el botón de opción “Subir un archivo de plantilla” y selecciona la plantilla que has guardado en tu máquina local y haz clic en el botón “Siguiente”.

Crear Pila de Cloudformation

Especifica un nombre de tu elección para la pila y completa los detalles requeridos y haz clic en “Siguiente” para continuar.

Especificar detalles de la pila

Contraseña de usuario maestro

Puedes proporcionar etiquetas a la Pila de Cloudformation que se pueden aplicar a la instancia RDS MySql que se creará mediante la pila. Haz clic en “Siguiente” para continuar.

Etiquetas

Desplázate hacia abajo y haz clic en “Crear pila” para crear la pila.

Crear Pila

La creación tomará algún tiempo. Puedes ver la acción que se está llevando a cabo en los eventos.

RDS MySQL

Para ver el estado de la instancia RDS MySql que se está creando, haz clic en “Servicios” y busca “RDS”.

RDS

En el panel principal, haz clic en “Instancias DB”.

Crear base de datos

Aquí, puedes 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 bases de datos RDS

En los eventos de la Pila de Cloudformation, puedes ver que después de un tiempo, una vez que la instancia RDS MySql se crea, el estado es “CREATE_COMPLETE”

Registro de acciones RDS

En la consola de RDS, ahora puedes ver que el estado es “Disponible”.

Base de datos MySQL en AWS

Para ver más detalles sobre la instancia RDS MySql, haz clic en la instancia RDS MySql –> Conectividad y Seguridad.

Para conectarte a la instancia RDS MySql, puedes usar el Endpoint proporcionado por la instancia.

Detalles de la base de datos

Una vez que la instancia ya no sea necesaria, elimina la Pila de Cloudformation desde el panel principal de Cloudformation para ahorrar en costos.

Conclusión


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

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.