Terraform es una plataforma de infraestructura como código (IaaC) muy popular. Esta IaaC facilita el aprovisionamiento de recursos mediante la escritura de un marco de desarrollo para su código. Esto incluye protocolos para bases de datos, máquinas virtuales, y luego ejecutar el comando de aplicación. Además, Terraform es una solución de lenguaje declarativo que ayuda a guiar su trabajo de desarrollo utilizando un enfoque de codificación de alto nivel. En otras palabras, le dices lo que quieres, y él rellenará el resto del código. Esto le ahorra mucho tiempo y codificación adicional.
En este tutorial, empezarás a usar Terraform creando una instancia EC2 de máquina virtual de AWS. Aprenderás a instalarla, conectarla a AWS, aprovisionar alguna infraestructura y, finalmente, destruirla.
Requisitos previos de AWS
Antes de comenzar este tutorial, asegúrese de tener lo siguiente para AWS:
- Cuenta de AWS
- Una Instancia EC2
- Acceso root para los servidores de AWS bajo su cuenta
- Una ‘access_key’ y la ‘secret_key’ para tu usuario AWS IAM
- Ahora que tienes todos los requisitos previos fuera del camino, ¡vamos a instalar Terraform!
Instalación de Terraform
Dependiendo de la imagen de tu máquina, necesitarás descargar una imagen binaria que se adapte a tu sistema operativo desde el sitio de descargas de Terraform. Para este tutorial vamos a suponer que estamos usando un sistema operativo Linux/Mac. Antes de descargarla, querrás crear un directorio para ella en tu instancia EC2. CD donde quieres ir y luego
- mkdir terraform
- cd terraform
Luego instala terraform en tu directorio recién creado. Una vez que lo descargues y lo descomprimas, busca el archivo binario de Terraform y muévelo a: user/local/bin. Luego comprueba la versión para ver si funciona. Utiliza los siguientes comandos:
- mv terraform /usuario/local/bin/
- terraform -v
Enhorabuena. ¡Has instalado con éxito Terraform en tu instancia EC2! Ahora, vamos a escribir algo de código y crear los archivos que vas a necesitar para empezar.
Creación de archivos de configuración de Terraform
Utilice un editor de su elección; yo prefiero VS Code con la extensión HashiCorp Terraform instalada. De esta manera, si cometo un error o un error de sintaxis, la extensión lo subrayará por mí. Créeme, esto ahorra incontables horas de rascarse la cabeza preguntando qué diablos está mal.
Usted querrá crear tres archivos de configuración para Terraform:
- variables.tf
- terraform.tfvars
- main.tf
Vamos a empezar con el main.tf primero.
Principal.tf
Querrás copiar y pegar este bloque de código. Este es tu archivo principal que usarás para escribir el código de la infraestructura. Tenga en cuenta algunas cosas que puede querer cambiar dependiendo de su configuración, como los números de puerto, cidr_blocks, etc. Querrás volver a comprobar la información de tu instancia EC2 en la consola de AWS antes de aplicar cualquier cambio.
provider “aws” {
region = “${var.region}”
access_key = “${var.access_key}”
secret_key = “${var.secret_key}”
}
resource “aws_vpc” “vpc” {
cidr_block = “10.0.0.0/16”
}
resource “aws_internet_gateway” “gateway” {
vpc_id = “${aws_vpc.vpc.id}”
}
resource “aws_route” “route” {
route_table_id = “${aws_vpc.vpc.main_route_table_id}”
destination_cidr_block = “0.0.0.0/0”
gateway_id = “${aws_internet_gateway.gateway.id}”
}
data “aws_availability_zones” “available” {}
resource “aws_subnet” “main” {
count = “${length(data.aws_availability_zones.available.names)}”
vpc_id = “${aws_vpc.vpc.id}”
cidr_block = “10.0.${count.index}.0/24”
map_public_ip_on_launch = true
availability_zone = “${element(data.aws_availability_zones.available.names, count.index)}”
}
resource “aws_security_group” “default” {
name = “http-https-allow”
description = “Allow incoming HTTP and HTTPS”
vpc_id = “${aws_vpc.vpc.id}”
ingress {
from_port = 80
to_port = 80
protocol = “tcp”
cidr_blocks = [“0.0.0.0/0”]
}
ingress {
from_port = 443
to_port = 443
protocol = “tcp”
cidr_blocks = [“0.0.0.0/0”]
}
}
Variables.tf
En el archivo variables.tf establecerás los nombres de tus variables y la descripción de la misma. Las variables no tienen valores presentados aquí. Añadirás los valores reales de los datos en el archivo terraform.tfvars. Vea la siguiente sección para las tfvars.
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”
}
Terraform.tfvars
Aquí añadirás tus valores de la instancia EC2 como se muestra a continuación. Observe también cómo los nombres coinciden con los nombres en el archivo variables.tf.
- region = «»
- access_key = «»
- secret_key = «»
Ahora que has escrito tus archivos de configuración, vas a ejecutar algunos comandos en la CLI para que terraforme cree una nube personal virtual (VPC). La VPC se basa en el código de infraestructura que escribiste en el archivo main.tf.
Ejecutando comandos de Terraform usando la CLI
Has creado tus archivos de configuración y ahora estás listo para poner Terraform a trabajar para ti. El primer comando que necesitas ejecutar es terraform init. La ejecución de este comando inicializará Terraform, luego descargará e instalará todos los paquetes para los proveedores que estás utilizando en tu archivo. En este caso, tu proveedor es AWS.
Una vez que obtengas el texto verde que indica que «Terraform se ha inicializado con éxito», puedes pasar al siguiente comando terraform plan. El plan de terraformación ejecutará el código que has escrito y comprobará que no haya errores. Una vez que ejecute esta comprobación y se asegure de que puede hacerlo, el CLI le hará saber que su código es bueno y entonces podrá pasar al tercer comando terraform apply. Ejecutando esto se ejecutará el código y se aprovisionará una VPC en AWS como se ha escrito. Ve y comprueba en la consola de AWS que tu nueva VPC se ha puesto en marcha.
Enhorabuena, has creado tu VPC a través de terraform. Ahora, para el truco final, un comando más que puede ejecutar para derribar todo. Sin embargo, tienes que tener cuidado con este comando, ya que eliminará todo de tu instancia EC2 terraform destruir. Cuando ejecutes el comando, te preguntará si quieres continuar, di que sí. Revisa tu consola y verás que la VPC ha sido terminada.
Palabras finales
En este breve tutorial has aprendido a:
- Instalar terraform en una instancia AWS EC2 los archivos de configuración primarios
- Rellenarlos con código
- Ejecutar el código con los comandos CLI de Terraform
Ahora, podrás hacer más experimentos por tu cuenta y conocer mejor Terraform. ¿Tienes más preguntas sobre Terraform? Echa un vistazo a las secciones de Preguntas Frecuentes y de Recursos más abajo.
PREGUNTAS FRECUENTES
¿Qué es la infraestructura como código (IaaC)?
La infraestructura como código (IaaC) le ayuda a desplegar el software más rápidamente en varios servidores en la nube. Utiliza el código en un formato modular para reducir las incoherencias del versionado del software en los servidores. Además, aumenta la productividad y reduce los costes de desarrollo.
¿Qué es AWS?
Amazon Web Services (AWS) es un servicio avanzado de computación en la nube de Amazon. Ofrece prácticamente todo lo que cualquier profesional de TI necesitaría para las soluciones empresariales basadas en la nube. Para ello, AWS puede almacenar datos, crear VMs, gestionar la seguridad y crear una solución empresarial completa.
¿Qué es el estado de Terraform?
Si tu equipo está formado por varios ingenieros que trabajan en Terraform, piensa en el estado como un repositorio de desarrollo de software. También controla el acceso y quién puede hacer qué. Tendrás que utilizar el comando terraform apply para propagar los cambios.
¿Con cuántos proveedores trabaja Terraform?
Más de 100 proveedores. A menudo puedes conectarlo a cualquier cosa debido a la API dinámica de Terraform. Esto sólo es cierto si el otro software que quieres utilizar también tiene una API.
¿Qué es el lenguaje HCL?
El lenguaje de configuración de HashiCorp (HCL) es un lenguaje de programación de HashiCorp’s. HCL te permite escribir código en todas sus ofertas, incluyendo Terraform. El lenguaje es visualmente similar a JSON pero tiene soporte adicional para estructuras de datos incorporadas.