Utilizar Cloudformation para crear una instancia RDS MySql 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 saber más sobre RDS busca el artículo«Cómo configurar una instancia de RDS MySql (Base de Datos Relacional MySql ) en AWS«.
AWS CloudFormation nos permite utilizar lenguajes de programación (yaml/json) o un simple archivo de texto para modelar y aprovisionar todos los recursos necesarios para nuestras aplicaciones. Esto nos proporciona una única fuente de verdad para nuestros recursos de AWS.
En este artículo, veremos los pasos para crear una Instancia RDS MySql utilizando Cloudformation Stack.
Requisitos previos
- Cuenta de AWS (Crea si no tienes una).
- Conocimiento básico de Cloudformation Stack.
- Conocimiento básico de la instancia RDS MySql (Relation Database MySql ) en AWS.
¿Qué vamos a hacer?
- Iniciar sesión en AWS.
- Crea una instancia RDS MySql utilizando Cloudformation Stack
Inicia sesión en AWS
- Haz clic en aquí para ir a la página de inicio de sesión de AWS.
Cuando pulsemos el enlace anterior, veremos una página web como la siguiente en la que se nos pide que iniciemos sesión con nuestros datos de acceso.
Una vez que iniciemos sesión en AWS con éxito, veremos la consola principal con todos los servicios listados.
Crear una Instancia RDS MySql utilizando Cloudformation.
Antes de crear una instancia utilizando 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: 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 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».
Verás el panel principal de Cloudformation de la siguiente manera. Haz clic en el botón «Crear pila» para crear una pila para crear una Instancia RDS MySql.
Haz clic en el botón de opción «Cargar un archivo de plantilla» y selecciona la plantilla que has guardado en tu máquina local y haz clic en el botón «Siguiente».
Especifica un nombre de tu elección para la pila y rellena los detalles requeridos y haz clic en «Siguiente» para continuar.
Puedes proporcionar las etiquetas a Cloudformation Stack que se pueden aplicar a la Instancia RDS MySql que será creada por la pila. Haz clic en «Siguiente» para continuar.
Desplázate hacia abajo y haz clic en «Crear pila» para crear la pila.
La creación tardará algún tiempo. Puedes ver la acción que se está llevando a cabo en los eventos.
Para ver el estado de la instancia RDS MySql que se está creando, haz clic en «Servicios» y busca «RDS».
En el panel principal, haz clic en «Instancias de BD».
Aquí puedes ver que el estado de la instancia es «Modificando». Tardará algún tiempo en crearse y estar lista para su uso.
En los eventos de Cloudformation Stack, puedes ver que después de un tiempo, una vez creada la Instancia RDS MySql, el estado es «CREATE_COMPLETE»
En la Consola RDS, ahora puedes ver que el estado es «Disponible».
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 utilizar el Endpoint proporcionado por la instancia.
Una vez que la instancia ya no sea necesaria, elimina la pila de Cloudformation desde el panel principal de Cloudformation para ahorrar costes.
Conclusión
En este artículo, hemos visto los pasos para crear una instancia RDS MySql utilizando Cloudformation Stack.