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á familiarizado con los conceptos básicos de Terraform y AWS RDS Service. Si desea aprender a crear una instancia RDS MySql desde la consola de AWS, busque «Cómo configurar una instancia RDS MySql (Relation Database MySql) en AWS»
requisitos previos
- Comprensión básica de Terraform.
- Terraform instalado en su sistema.
- Cuenta AWS (Crear si no tienes uno).
- ‘access_key’ y ‘secret_key’ de un usuario de AWS IAM. (Haga clic aquí para obtener información sobre cómo crear un usuario de IAM con ‘access_key’ y ‘secret_key’ en AWS)
Lo que haremos
- Escriba archivos de configuración de Terraform para la instancia RDS MySql.
- Cree una instancia RDS MySql utilizando los archivos de configuración de Terraform.
- Elimine la instancia RDS MySql creada usando Terraform.
Escriba archivos de configuración de Terraform para la instancia RDS MySql.
Cree un directorio dedicado donde pueda crear archivos de configuración de terraformación.
Use el siguiente comando para crear un directorio y cambiar su directorio de trabajo actual a él.
mkdir terraformar
cd terraform/
Estoy usando «vim» como editor para escribir en archivos, puede usar un editor de su elección y copiar y pegar las siguientes configuraciones para crear variables.tf, terraform.tfvars y main.tf.
Cree ‘main.tf’ que es responsable de crear un RDS MySql en AWS. Este main.tf leerá valores de variables de variables.tf y terraform.tfvars.
vim principal.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}" } }
Cree ‘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 que haya creado ‘variables.tf’, no olvide cambiar los valores asignados a las variables. Debe cambiar los valores resaltados ya que son específicos de mi entorno. Puede mantener el resto de variables como están.
Cree ‘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’. Cambie el valor de «región» si desea crear la instancia en una región diferente a la que he especificado.
Las siguientes claves deben cambiarse con las claves de su usuario de IAM.
vim terraform.tfvars
region = "eu-west-3" access_key = "AKIAQ6GAIA5XFLXF6HOV" secret_key = "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"
Ahora, debe tener 3 archivos, a saber, variables.tf, terraform.tfvars y main.tf
Cree una instancia RDS MySql utilizando los archivos de configuración de Terraform
Antes de ejecutar los siguientes comandos, asegúrese de haber configurado access_key y secret_key válidos.
El primer comando que se utilizará es ‘terraform init’. Este comando descarga e instala complementos para proveedores utilizados dentro de la configuración. En nuestro caso es AWS.
inicio de terraformación
El segundo comando que se utilizará es ‘plan de terraformación’. Este comando se utiliza para ver los cambios que se producirán en la infraestructura.
plan de terraformación
El comando ‘terraform apply’ creará los recursos en AWS mencionados en el archivo main.tf. Se le pedirá que proporcione su entrada de confirmación para crear los recursos.
Aplicar terraformación
Cuando ejecuta el comando anterior, al completarlo con éxito, puede ver que se agregaron nuevos recursos y 0 se destruyó.
Puede ir a la consola de AWS RDS para verificar si la instancia RDS MySql está creada o no.
Elimine la instancia RDS MySql creada usando Terraform
Si ya no necesita los recursos que creó usando la configuración mencionada en el archivo main.tf, puede usar el comando «terraform destroy» para eliminar todos esos recursos.
terraformar destruir
Conclusión
En este artículo, vimos los pasos para crear una instancia RDS MySql en la región de nuestra elección. También vimos cómo la instancia que creamos se puede eliminar con un solo comando.