Cómo crear una instancia RDS en AWS usando Terraform
En este artículo, veremos cómo crear una Instancia RDS MySql. Antes de continuar, asumo que estás familiarizado con los fundamentos de Terraform y del servicio RDS de AWS. Si quieres aprender a crear una instancia RDS MySql desde la consola de AWS, entonces busca«Cómo configurar una instancia RDS MySql (Relation Database MySql ) en AWS«
Requisitos previos
- Conocimiento básico de Terraform.
- Terraform instalado en tu sistema.
- Cuenta de AWS (Crea si no tienes una).
- ‘access_key’ & ‘secret_key’ de un usuario IAM de AWS. (Haz clic aquí para aprender a crear un usuario IAM con ‘access_key’ & ‘secret_key’ en AWS, )
Qué vamos a hacer
- Escribir los archivos de configuración de Terraform para la Instancia RDS MySql.
- Crear una Instancia RDS MySql utilizando los archivos de configuración de Terraform.
- Eliminar la Instancia RDS MySql creada utilizando Terraform.
Escribe los archivos de configuración de Terraform para la Instancia RDS MySql.
Crea un directorio dedicado donde puedas crear los archivos de configuración de Terraform.
Utiliza el siguiente comando para crear un directorio y cambiar tu actual directorio de trabajo a él.
mkdir terraform
cd terraform/
Estoy utilizando «vim» como editor para escribir en los archivos, puedes utilizar un editor de tu elección y copiar-pegar las siguientes configuraciones para crear variables.tf, terraform.tfvars y main.tf.
Crea ‘main.tf’, que es el responsable de crear un RDS MySql en AWS. Este main.tf leerá los valores de las variables de variables.tf y terraform.tfvars.
vim main.tf
provider "aws" { region = "${var.region}" access_key = "${var.access_key}" secret_key = "${var.secret_key}" } resource "aws_db_instance" "default" { depends_on = ["aws_security_group.default"] identifier = "${var.identifier}" allocated_storage = "${var.storage}" engine = "${var.engine}" engine_version = "${lookup(var.engine_version, var.engine)}" instance_class = "${var.instance_class}" name = "${var.db_name}" username = "${var.username}" password = "${var.password}" vpc_security_group_ids = ["${aws_security_group.default.id}"] db_subnet_group_name = "${aws_db_subnet_group.default.id}" skip_final_snapshot = "true" } resource "aws_db_subnet_group" "default" { name = "main_subnet_group" description = "Our main group of subnets" subnet_ids = ["${aws_subnet.subnet_1.id}", "${aws_subnet.subnet_2.id}"] } resource "aws_subnet" "subnet_1" { vpc_id = "${var.vpc_id}" cidr_block = "${var.subnet_1_cidr}" availability_zone = "${var.az_1}" tags = { Name = "main_subnet1" } } resource "aws_subnet" "subnet_2" { vpc_id = "${var.vpc_id}" cidr_block = "${var.subnet_2_cidr}" availability_zone = "${var.az_2}" tags = { Name = "main_subnet2" } } resource "aws_security_group" "default" { name = "main_rds_sg" description = "Allow all inbound traffic" vpc_id = "${var.vpc_id}" ingress { from_port = 0 to_port = 65535 protocol = "TCP" cidr_blocks = ["${var.cidr_blocks}"] } egress { from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] } tags = { Name = "${var.sg_name}" } }
Crea ‘variables.tf’ que contiene la declaración y definición de las variables.
vim variables.tf
variable "access_key" { description = "Access key to AWS console" } variable "secret_key" { description = "Secret key to AWS console" } variable "region" { description = "Region of AWS VPC" } variable "identifier" { default = "mydb-rds" description = "Identifier for your DB" } variable "storage" { default = "10" description = "Storage size in GB" } variable "engine" { default = "mysql" description = "Engine type, here it is mysql" } variable "engine_version" { description = "Engine version" default = { mysql = "5.7.21" } } variable "instance_class" { default = "db.t2.micro" description = "Instance class" } variable "db_name" { default = "myfirstdb" description = "db name" } variable "username" { default = "rahul" description = "User name" } variable "password" { description = "password, provide through your ENV variables" default = "rahul1234" } variable "subnet_1_cidr" { default = "172.31.48.0/20" description = "Your AZ" } variable "subnet_2_cidr" { default = "172.31.64.0/20" description = "Your AZ" } variable "az_1" { default = "eu-west-3c" description = "Your Az1, use AWS CLI to find your account specific" } variable "az_2" { default = "eu-west-3a" description = "Your Az2, use AWS CLI to find your account specific" } variable "vpc_id" { description = "Your VPC ID" default = "vpc-be1010d7" } variable "cidr_blocks" { default = "0.0.0.0/0" description = "CIDR for sg" } variable "sg_name" { default = "my-rds-sg" description = "Tag Name for sg" }
Una vez creado ‘variables.tf’, no olvides cambiar los valores asignados a las variables. Debes cambiar los valores resaltados ya que son específicos de mi entorno. Puedes mantener el resto de variables tal y como están.
Crea ‘terraform.tfvars’ que contiene la definición de las variables access_key y secret_key definidas en el archivo anterior. Hemos mantenido la declaración de estas 2 variables junto con «región» en el archivo ‘terraform.tfvars’. Cambia el valor de «región» si quieres crear la instancia en una región distinta a la que he especificado.
Es necesario cambiar las siguientes claves con las claves de tu usuario IAM.
vim terraform.tfvars
region = "eu-west-3" access_key = "AKIAQ6GAIA5XFLXF6HOV" secret_key = "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"
Ahora deberías tener 3 archivos, a saber, variables.tf, terraform.tfvars y main.tf
Crea una Instancia RDS MySql utilizando los archivos de configuración de Terraform
Antes de ejecutar los siguientes comandos asegúrate de haber configurado la access_key y secret_key válidas.
El primer comando a utilizar es ‘terraform init’. Este comando descarga e instala los plugins de los proveedores utilizados en la configuración. En nuestro caso es AWS.
terraform init
El segundo comando a utilizar es ‘terraform plan’. Este comando se utiliza para ver los cambios que se producirán en la infraestructura.
terraform plan
El comando «terraformar aplicar» creará los recursos en el AWS mencionados en el archivo main.tf. Se te pedirá que des tu confirmación para crear los recursos.
terraformar aplicar
Cuando ejecutes el comando anterior, una vez completado con éxito, podrás ver que se han añadido nuevos recursos y que se han destruido 0.
Puedes ir a la consola de AWS RDS para verificar si la instancia RDS MySql está creada o no.
Eliminar la Instancia RDS MySql creada mediante Terraform
Si ya no necesitas los recursos que has creado utilizando la configuración mencionada en el archivo main.tf, puedes utilizar el comando «terraform destroy» para eliminar todos esos recursos.
terraform destruir
Conclusión
En este artículo, hemos visto los pasos para crear una instancia RDS MySql en la región de nuestra elección. También hemos visto cómo se puede eliminar la instancia que hemos creado con un solo comando.